after_source[i].reverse()def transposition(): """二维列表转置(矩阵转置)""" for x in range(4): for y in range(x, 4): after_source[x][y], after_source[y][x] = after_source[y][x], after_source[x][y]def compare_matrix():
"""
二维数组比较
操作前后的二维数组(矩阵)进行比较
如果不相等,说明有元素可移动,当移动时调用random_site()函数
"""
if not (before_source == after_source):
random_site()def left():
"""向左操作"""
merge()def right():
"""向右操作"""
reverse()
merge()
reverse()def up():
"""向上操作"""
transposition()
merge()
transposition()def down():
"""向下操作"""
transposition()
reverse()
merge()
reverse()
transposition()# View层def init(): """ 游戏初始化 :return: None """ print(f"""当前分数:{score}\n操作方式:q退出 n认输 w(上)a(左) s(下) d(右)""") for i in range(init_count): # 随机生成init_count个初始值 random_site() print_list()def print_list():
"""打印游戏过程中必看的矩阵信息"""
for single_list in after_source:
print(single_list)def forfeit():
"""认输"""
print(f"玩家已认输,最终得分:{score}")
raise KeyboardInterruptdef main(): """程序入口:初始化 + 输入 + 输出""" init() while True: try: global before_source before_source = copy.deepcopy(after_source) key = input("键入:") if key == "a": left() if key == "d": right() if key == "w": up() if key == "s": down() if key == "n": forfeit() if key == "q": break compare_matrix() print(f"当前分数:{score}") print_list() except KeyboardInterrupt: breakmain()