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()
来源:CSDN
作者:Rookie_Max
链接:https://blog.csdn.net/Rookie_Max/article/details/104045274