跳至正文
View Categories

< 1 min read

主要内容 #

    1. 随机数生成模块
    2. 判断结束模块

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