python 2048游戏思路

python 2048游戏思路

"""
    2048 游戏核心算法
"""
# 利用降维的思想。
list_merge = None
# 测试方法:断点测试。
"""
    函数内部只能读全局变量,不能改,如果改会变成局部变量。
"""


def zero_to_end():
    """
        零元素移至末尾
    """
    # print(list_merge)
    # 想法:从后向前,如果发现零元素,删除并追加。
    for i in range(-1, -len(list_merge)-1, -1):
        if list_merge[i] == 0:
            del list_merge[i]
            list_merge.append(0)
# zero_to_end()
# print(list_merge)


def merge():
    """
    先将中间的零元素移到末尾。
    在合并相邻相同元素。
    """
    zero_to_end()
    # print(list_merge)
    for i in range(0, len(list_merge)-1):
        if list_merge[i] == list_merge[i+1]:
            list_merge[i] += list_merge[i+1]
            del list_merge[i+1]
            list_merge.append(0)
# merge()
# print(list_merge)


map = [
    [2, 0, 0, 2],
    [4, 4, 2, 2],
    [2, 4, 0, 4],
    [0, 0, 2, 2],
]


def move_left():
    """
    向左移动。
    """
    # 思想:将二维列表中的每行交给merge函数进行操作。
    for line in map:
        global list_merge
        list_merge = line
        merge()
# move_left()
# print(map)


def move_right():
    """
    向右移动
    """
    # 思想:将二维列表中每行(从右向左)交给merge函数进行操作
    for line in map:
        global list_merge
        # 从右向左取出数据  形成  新列表。
        list_merge = line[::-1]
        # 切片操作会产生新的列表。
        merge()
        # 从右向左接受 合并后的数据。
        line[::-1] = list_merge
        # print(list_merge)
        # print(map)
# move_right()
# print(map)


def move_up():
    square_matrix_transpose(map)
    move_left()
    square_matrix_transpose(map)


def square_matrix_transpose(sqr_matrix):
    for c in range(1, len(sqr_matrix)):
        for r in range(c, len(sqr_matrix)):
            sqr_matrix[r][c-1], sqr_matrix[c-1][r] =\
            sqr_matrix[c-1][r], sqr_matrix[r][c-1]


def move_down():
    square_matrix_transpose(map)
    move_right()
    square_matrix_transpose(map)


move_up()
print(map)

# 利用方阵转置函数
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键律疯魔

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值