主要内容 #
-
- 主要功能模块设计说明
- 主要功能模块代码部分
1.主要功能模块设计说明 #
该模块主要完成方块的移动与合并的功能,主要包含combinate()函数、up()函数、down()函数、left()函数和right()函数,这些函数的功能描述如下:
combinate()函数用来执行相同方块的合并操作。
up()函数用来对应游戏中用户按下“上”键后,对应向上合并方块的操作。
down()函数用来对应用游戏中户按下“下”键后,对应向下合并方块的操作。
left()函数用来对应游戏中用户按下“左”键后,对应向左合并方块的操作。
right()函数用来对应游戏中用户按下“右”键后,对应向右合并方块的操作。
combinate()函数合并运算设计思想:
要执行一行中相同方块的合并,首先从左到右将这一行的数字们存入一个新的列表ans中:
(1)当ans中有两个数字时,直接将他们相加合并。把相加后的新的一行返回。score加上相应的得分。
(2)当ans中有三个数字时,我们首先判断ans[0]和ans[1]是否相等,相等合并二者;否则判断and[1]和ans[2]。共两种可能合并的情况。再把score加上相应的的得分。
(3)当ans中有四个数字时同理,需要判断ans[0]和ans[1],ans[1]和ans[2],ans[2]和ans[3],有三种可能合并的情况。
向左合并时从上到下一行一行的进行combinate()运算;向右合并时将每一行左右逆序即可;向上合并时从左到右一列一列进行combinate()运算;向下合并时与向上上下逆序即可。
2.主要功能模块代码部分 #
该部分代码如下:
def combinate(L): # 实现相加操作#此函数的功能是进行方块的合并原理,是本程序的重难点所在
global score
ans = [0, 0, 0, 0]
num = []
for i in L:
if i != 0:#把本行中所有的数字放到列表num中去
num.append(i)
length = len(num)
if length == 4: # 当本行中有4个数字的多种情况
if num[0] == num[1]:#case1
ans[0] = num[0] + num[1]
score += ans[0]
if num[2] == num[3]:
ans[1] = num[2] + num[3]
score += ans[1]
else:
ans[1] = num[2]
ans[2] = num[3]
elif num[1] == num[2]:#case2
ans[0] = num[0]
ans[1] = num[1] + num[2]
ans[2] = num[3]
score += ans[1]
elif num[2] == num[3]:#case3
ans[0] = num[0]
ans[1] = num[1]
ans[2] = num[2] + num[3]
score += ans[2]
else:#case4 没有能合并的数字
for i in range(length):
ans[i] = num[i]
elif length == 3: # 本行中有三个数
if num[0] == num[1]:#case 1
ans[0] = num[0] + num[1]
ans[1] = num[2]
score += ans[0]
elif num[1] == num[2]:#case 2
ans[0] = num[0]
ans[1] = num[1] + num[2]
score += ans[1]
else:#case 3 没有能合并的数字
for i in range(length):
ans[i] = num[i]
elif length == 2: # 本行中有两个数
if num[0] == num[1]:#case 1
ans[0] = num[0] + num[1]
score += ans[0]
else:#case 2 没有能合并的数字
for i in range(length):
ans[i] = num[i]
elif length == 1: # 有一个数
ans[0] = num[0]
else:
pass
return ans
def left(): #用户按下左键进行的移动
for i in range(4):
temp = combinate(board[i])
for j in range(4):
board[i][j] = temp[j]
def right(): #用户按下右键进行的移动
for i in range(4):
temp = combinate(board[i][::-1])
for j in range(4):
board[i][3 - j] = temp[j]
def up(): #用户按下上键进行的移动
for i in range(4):
to_comb = []
for j in range(4):
to_comb.append(board[j][i])
temp = combinate(to_comb)
for k in range(4):
board[k][i] = temp[k]
def down(): #用户按下下键进行的移动
for i in range(4):
to_comb = []
for j in range(4):
to_comb.append(board[3 - j][i])
temp = combinate(to_comb)
for k in range(4):
board[3 - k][i] = temp[k]
将以上所有代码加入到上一课创建的项目文件中(该代码请置放在main()函数和is_over()函数中间),运行,发现无任何变化,因为该部分只是定义了主要功能的方法,并未调用该方法。
本小节中的多个方法在当前的逻辑中未去实现,将在后续的代码中完成调用,本小节仅提前完成逻辑的定义。
小结 #
本节主要介绍了2048小游戏程序中的主要功能模块的设计方法以及代码部分,该模块主要完成方块的移动与合并的功能。