主要内容 #
-
- 主要功能模块设计说明
- 主要功能模块代码部分
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小游戏程序中的主要功能模块的设计方法以及代码部分,该模块主要完成方块的移动与合并的功能。