python 2048游戏思路
"""
2048 游戏核心算法
"""
list_merge = None
"""
函数内部只能读全局变量,不能改,如果改会变成局部变量。
"""
def zero_to_end():
"""
零元素移至末尾
"""
for i in range(-1, -len(list_merge)-1, -1):
if list_merge[i] == 0:
del list_merge[i]
list_merge.append(0)
def merge():
"""
先将中间的零元素移到末尾。
在合并相邻相同元素。
"""
zero_to_end()
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)
map = [
[2, 0, 0, 2],
[4, 4, 2, 2],
[2, 4, 0, 4],
[0, 0, 2, 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 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)