思想:python实现最简单的代码了(如有写的不好,请各位多多指教)
"""
2048 游戏核心算法(游戏玩法可自行百度搜2048游戏了解)
谈架构
显示(界面)与控制(算法)分离
控制台
PyQt
PyGame
谈算法
1、高内聚
上下移动--->矩阵转置--->左右移动
向左移动--->合并数据--->零元素后移
向右移动--->翻转--->合并数据--->零元素后移
2、降纬思想
将二维列表的操作 改为对 一维列表的操作
"""
list_merge = [2, 0, 2, 0]
"""
零元素向右移动
思想:从后向前判断,如果是0则删除,末尾补0
"""
def zero_to_end():
for i in range(len(list_merge)-1, -1, -1):
if list_merge[i] == 0:
del list_merge[i]
list_merge.append(0)
"""
合并:
"""
# 读取全局变量
def merge():
zero_to_end()
for i in range(len(list_merge)-1): # -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)
map = [
[2, 2, 8, 16],
[4, 2, 0, 2],
[2, 4, 2, 4],
[0, 4, 0, 4]
]
# 向左移动数据
def move_left():
"""
修改全局变量,给全局变量赋值
"""
global list_merge
for line in map:
list_merge = line
merge()
# 不用返回的原因是 操作的数据就是 map
# 向右移动数据
def move_right():
"""
"""
global list_merge
for line in map:
# 从右向左获取数据形成新列表(思想:为了复用向左移动逻辑)
list_merge = line[::-1]
merge()
# 将处理后的数据在从右向左还给map
line[::-1] = list_merge
# 矩阵转置
def square_matrix_transposition():
for c in range(1, len(map)):
for r in range(c, len(map)):
map[r][c - 1], map[c - 1][r] = map[c - 1][r], map[r][c - 1]
"""
思路:将二维列表转置(列变行),调用左右移动函数,在将二维列表转置(行变列)
"""
# 向上移动数据
def move_up():
""" """
square_matrix_transposition()
move_left()
square_matrix_transposition()
# 向下移动数据
def move_down():
square_matrix_transposition()
move_right()
square_matrix_transposition()
# move_up()
# move_down()
# move_left()
move_right()
print(map)