主要内容 #
-
- 随机数生成模块
- 判断结束模块
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游戏所需的随机数生成以及判断结束退出逻辑的方法。