Beispiel #1
0
def move_down(window):
    # 按下键的循环
    count = 0
    for i in range(4):
        add_coor = []
        for j in range(3):
            for n in list(range(j + 1))[::-1]:
                if not base_list[3 - n][i]:
                    if base_list[2 - n][i] != 0:
                        count += 1
                        # 添加数字到相应方块中
                        square_coordinate.change_color(window,
                                                       base_list[2 - n][i],
                                                       3 - n, i)
                        square_coordinate.add_num_in_rect(
                            window, base_list[2 - n][i], 3 - n, i)
                    base_list[3 - n][i] = base_list[2 - n][i]
                    base_list[2 - n][i] = 0
                    # 将数值为0的方块变为基础色
                    square_coordinate.return_base_color(window, 2 - n, i)

                elif base_list[2 - n][i] == base_list[3 - n][i]:
                    if ((3 - n, i) not in add_coor) and ((2 - n, i)
                                                         not in add_coor):
                        base_list[2 - n][i] = 0
                        base_list[3 - n][i] *= 2
                        add_coor.append((3 - n, i))
                        count += 1
                        # 数值改变之后,有数值的方块颜色和值改变,数值为0的方块变为基础色
                        # 有数值的先被基础色覆盖,再添加值。后期添加颜色就直接用颜色方块覆盖了。
                        # square_coordinate.return_base_color(window, 3-n, i)
                        square_coordinate.change_color(window,
                                                       base_list[3 - n][i],
                                                       3 - n, i)
                        square_coordinate.add_num_in_rect(
                            window, base_list[3 - n][i], 3 - n, i)
                        square_coordinate.return_base_color(window, 2 - n, i)

                        # 改变分数
                        global score
                        score += base_list[3 - n][i]
                        # 更新分数添加到得分方框中
                        square_coordinate.update_score(window, score)
                        # 判断是否够2048
                        if base_list[3 - n][i] == 2048:
                            square_coordinate.victory(window)
    # 如果count不等于0,证明按下方向键肯定有发生数值变化或者位移,那就肯定有空格可以添加数字
    if count != 0:
        create_rand(window)
    # 如果count等于0,判断数值是否满格
    else:
        for item in base_list:
            if 0 in item:
                # 数值不满格,就不添加,也没有gameover
                break
        # 数值满格,
        else:
            is_can_move(window)
Beispiel #2
0
def create_rand(window):
    # 开局之后每次产生一个随机数
    rand3 = 2 if randint(0, 16) >= 2 else 4
    # 产生一个随机坐标
    rand_coor3 = (randint(0, 3), randint(0, 3))

    while True:
        if base_list[rand_coor3[0]][rand_coor3[1]] == 0:
            base_list[rand_coor3[0]][rand_coor3[1]] = rand3
            print_base(base_list)
            # 将数值添加到方块中,并改变方块颜色
            square_coordinate.change_color(window, rand3, rand_coor3[0],
                                           rand_coor3[1])
            square_coordinate.add_num_in_rect(window, rand3, rand_coor3[0],
                                              rand_coor3[1])
            return
        else:
            rand_coor3 = (randint(0, 3), randint(0, 3))
Beispiel #3
0
def first_rand(window):
    # 开局第一次产生两个随机数
    # 产生两个随机数
    rand1 = 2 if randint(0, 16) >= 4 else 4
    rand2 = 2 if randint(0, 16) >= 4 else 4
    # 产生两个随机坐标
    rand_coor1 = (randint(0, 3), randint(0, 3))
    rand_coor2 = (randint(0, 3), randint(0, 3))
    # 将随机数添加到随机坐标
    base_list[rand_coor1[0]][rand_coor1[1]] = rand1
    base_list[rand_coor2[0]][rand_coor2[1]] = rand2
    print_base(base_list)
    # 将数值添加到方块并改变方块颜色
    square_coordinate.change_color(window, rand1, rand_coor1[0], rand_coor1[1])
    square_coordinate.add_num_in_rect(window, rand1, rand_coor1[0],
                                      rand_coor1[1])

    square_coordinate.change_color(window, rand2, rand_coor2[0], rand_coor2[1])
    square_coordinate.add_num_in_rect(window, rand2, rand_coor2[0],
                                      rand_coor2[1])
Beispiel #4
0
def move_right(window):
    # 按右键的循环
    count = 0
    for i in range(4):
        add_coor = []
        for j in range(3):
            for n in list(range(j + 1))[::-1]:
                if not base_list[i][3 - n]:
                    # 当有一个值不为0的时候,count+1才有效
                    if base_list[i][2 - n] != 0:
                        count += 1
                        # 添加数字到相应方块中,并变换方块的颜色
                        square_coordinate.change_color(window,
                                                       base_list[i][2 - n], i,
                                                       3 - n)
                        square_coordinate.add_num_in_rect(
                            window, base_list[i][2 - n], i, 3 - n)
                    # 交换相邻方块中的值
                    base_list[i][3 - n] = base_list[i][2 - n]
                    base_list[i][2 - n] = 0
                    # 将数值为0的方块变为基础色
                    square_coordinate.return_base_color(window, i, 2 - n)

                elif base_list[i][2 - n] == base_list[i][3 - n]:
                    # 判断后面一位值相同的数是否已经是改变过的,如果改变过就不会再被改变
                    if ((i, 3 - n) not in add_coor) and ((i, 2 - n)
                                                         not in add_coor):
                        base_list[i][2 - n] = 0
                        base_list[i][3 - n] *= 2
                        add_coor.append((i, 3 - n))
                        count += 1
                        # 数值改变之后,有数值的方块颜色和值改变,数值为0的方块变为基础色
                        # 有数值的先被基础色覆盖,再添加值。后期添加颜色就直接用颜色方块覆盖了。
                        # square_coordinate.return_base_color(window, i, 3-n)
                        square_coordinate.change_color(window,
                                                       base_list[i][3 - n], i,
                                                       3 - n)
                        square_coordinate.add_num_in_rect(
                            window, base_list[i][3 - n], i, 3 - n)
                        square_coordinate.return_base_color(window, i, 2 - n)

                        # 改变分数
                        global score
                        score += base_list[i][3 - n]
                        # 更新分数添加到得分方框中
                        square_coordinate.update_score(window, score)
                        # 判断是否够2048
                        if base_list[i][3 - n] == 2048:
                            square_coordinate.victory(window)
    # 如果按下方向键之后,count还是等于0,说明列表中的值以及值相应的坐标都没有任何改变,
    # 就要判断是不是数值已经满格了,如果没有满格,就不要产生新的数字,
    # 如果满格,就判断有无可相加的数字,如果有就还没结束,如果没有了,就GAMEOVER了

    # 如果count不等于0,证明按下方向键肯定有发生数值变化或者位移,那就肯定有空格可以添加数字
    if count != 0:
        create_rand(window)
    # 如果count等于0,判断数值是否满格
    else:
        for item in base_list:
            if 0 in item:
                # 数值不满格,就不添加,也没有gameover
                break
        # 数值满格,
        else:
            is_can_move(window)