主要内容 #
-
- 随机数生成模块
- 判断结束模块
1.随机数生成模块 #
该模块实现的功能为:根据要求,随机在方格中生成初始的2和4,以及后续每次移动需要生成的随机数。
该部分代码如下:
def set_random_number(): # 随机生成初始的2和4 num = [] for i in range(4): for j in range(4): if board[i][j] == 0: num.append((i, j)) # 添加元素 m = random.choice(num) num.remove(m) # 移除 value = random.uniform(0, 1) if value < 0.1: # 生成4的概率比生成2的概率小很多 value = 4 else: value = 2 board[m[0]][m[1]] = value def init_board(): # 初始生成两个数字 for i in range(2): set_random_number()
将以上所有代码加入到上一课创建的项目文件中(该代码请置放在main()函数和draw_box()函数中间),运行,发现无任何变化,因为该部分只是定义了随机数生成的方法,并未调用该方法。
2.判断结束模块 #
该模块实现的功能为:判断游戏是否结束,若方格中有0,则游戏一定没有结束,若为0,则判断每行一一相邻的方格中是否存在相同数字,每列一一相邻的方格中是否存在相同数字。
该部分代码如下:
def is_over(): # 判断是否结束 for i in range(4): for j in range(4): if board[i][j] == 0: return False # 是否有0,有0表示还有空格可以移动,未结束 for i in range(4): for j in range(3): if board[i][j] == board[i][j + 1]: return False # 是否左右有相等,左右相等表示可以进行移动合并,未结束 for i in range(3): for j in range(4): if board[i][j] == board[i + 1][j]: return False # 是否上下有相等,上下相等表示可以进行移动合并,未结束 return True
将以上所有代码加入到上一课创建的项目文件中(该代码请置放在main()函数和init_board()函数中间),运行,发现无任何变化,因为该部分只是定义了判断结束的方法,并未调用该方法。
本小节中的两个方法在当前的逻辑中未去实现,将在后续的代码中完成调用,本小节仅提前完成逻辑的定义。
小结 #
- 本节主要介绍了2048游戏所需的随机数生成以及判断结束退出逻辑的方法。