Python_2048核心算法

空扰寡人 提交于 2020-01-20 02:54:36

2048 核心算法
核心:去零操作,相邻相同则合并,
向左移动:从左向右依次取出每行数据
向右移动:从右向左依次取出每行数据
向上移动:方阵转置后向左移动再转置
向下移动:方阵转置后向右移动再转置

list_merge = [2,0,2,0]

将0元素移动到列的末尾

def zero_to_end():  
    """
        把list_merge中的0元素移动到末尾,其他元素相对位置不变
    """
    for i in range(len(list_merge) - 1, -1, -1):
        if list_merge[i] == 0:
            list_merge.append(0)
            del list_merge[i]

将相同元素向左合并

def merge_same_element():
    """
        将list_merge中相同元素进行向左合并
    """
    # 调用0元素向右移动函数
    zero_to_end()
    # 相邻相同的元素相加
    for i in range(len(list_merge) - 1):
        if list_merge[i] == list_merge[i + 1]:
            list_merge[i] *= 2
            # 删除后一个的元素
            del list_merge[i + 1]
            # 在后面补0
            list_merge.append(0)

模拟界面

map = [
    [0, 0, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 0]
]

向左移动

def map_move_left():
    """
        将map向左移动
    """
    for line in map:
    	# 修改全局变量
        global list_merge
        list_merge = line
        # 调用合同相同元素函数
        merge_same_element()

向右移动

def map_move_right():
    """
        将map向右移动
    """
    global list_merge
    for line in map:
        list_merge = line[::-1]
        # 调用合同相同元素函数
        merge_same_element()
        # 反向取出,反向放回
        line[::-1] = list_merge

定义矩阵转置方法

def matrix_transpose():
    """
        矩阵转置
    """
    global map
    list_result = []
    for c in range(len(map)):
        line = []
        for r in range(len(map)):
            line.append(map[r][c])
        list_result.append(line)
    map = list_result

向上移动

def map_move_up():
    """
        将map向上移动
    """
    # 调用矩阵转置函数,向上变成向左
    matrix_transpose()
    # 调用向左移动函数
    map_move_left()
    # 再次调用矩阵转置
    matrix_transpose()

向下移动

def map_move_down():
    """
        将map向下移动
    """
    # 调用矩阵转置函数,向下变成向右
    matrix_transpose()
    # 调用向右移动函数
    map_move_right()
    # 再次调用矩阵转置
    matrix_transpose()
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!