'''
2048游戏核心练习
'''
list_merge = None
# 1.零元素移动至末尾
# [2,0,2,0] -->[2,2,0,0]
# [0,2,2,0] -->[2,2,0,0]
# [2,4,0,2] -->[2,4,2,0]
#
def zero_to_end():
'''
零元素移动到末尾
'''
#从后向前,如果发现0,删除并追加
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)
# 相邻相同数字合并
# [2,2,0,0] --> [4,0,0,0]
# [2,0,0,2] --> [4,0,0,0]
# [2,0,4,0] --> [2,4,0,0]
# [2,2,2,2] --> [4,4,0,0]
# [2,2,2,0] --> [4,2,0,0]
def merge():
'''
合并
'''
# 将中间的零元素移动到末尾
# 合并相同元素
zero_to_end()
for i in range(len(list_merge)-1):
if list_merge[i]==list_merge[i+1]:
# 将后一个累加到前一个上
# 删除后一个,追加一个0
list_merge[i]+=list_merge[i+1]
del list_merge[i+1]
list_merge.append(0)
# 地图向左移动
# 下面的移动同时进行
# [2,2,0,0] --> [4,0,0,0]
# [2,0,0,2] --> [4,0,0,0]
# [2,0,4,0] --> [2,4,0,0]
# [2,2,2,2] --> [4,4,0,0]
# [2,2,2,0] --> [4,2,0,0]
map=[
[2,2,0,0],
[2,0,0,2],
[2,0,4,0],
[2,2,2,2],
]
#
#
#转置后矩阵
#
#[2,2,2,2]
#[2,0,0,2]
#[0,0,4,2]
#[0,2,0,2]
#
def move_left():
for line in map:
global list_merge
list_merge=line
merge()
def move_right():
for line in map:
global list_merge
list_merge=line[::-1]
merge()
line[::-1]=list_merge
#从右向左接收数据
def move_up():
#上移
square_matrix_transpose(map)
move_left()
square_matrix_transpose(map)
def move_down():
#下移
square_matrix_transpose(map)
move_right()
square_matrix_transpose(map)
#move_right()
#print(map)
'''
上移 下移
'''
# 矩阵转置函数
def square_matrix_transpose(sqr_matrix):
'''
转置函数
'''
# len(sqr_matrix) 获取矩阵的大小
for c in range(len(sqr_matrix)): # 遍历矩阵的每一列
for r in range(c,len(sqr_matrix)): # 从当前列开始,遍历其下方的所有行
# 交换元素,实现转置
sqr_matrix[r][c], sqr_matrix[c][r] = sqr_matrix[c][r], sqr_matrix[r][c]
#move_up()
#print(map)
python__基础之2048核心算法练习
最新推荐文章于 2024-07-12 16:16:27 发布