安装numpy库
pip3 install numpy
使用wasd游戏
import numpy as np
class Matrix_2048(object):
def __init__(self):
self.matrix = [[0] * 4 for _ in range(4)]
self.generate() # 生成一个随机数
self.generate() # 生成一个随机数
self.print_matrix() # 打印矩阵
self.run() # 运行游戏
def generate(self): # 生成一个随机数
while True:
blank = 0 # 检测是否有空位
for i in range(4): # 检测是否有空位
for j in range(4):
if self.matrix[i][j] == 0:
blank += 1
if blank == 0: # 如果没有空位
break # 结束循环
i = np.random.randint(0, 4) # 随机生成一个行
j = np.random.randint(0, 4) # 随机生成一个列
if self.matrix[i][j] == 0: # 如果该位置为空
self.matrix[i][j] = 2 # 生成2
break # 结束循环
def is_game_win(self): # 检测是否胜利
for i in range(4):
for j in range(4):
if self.matrix[i][j] == 2048: # 如果有2048
return True # 胜利
return False
def is_game_over(self):
for i in range(4): # 检测是否有空位
for j in range(4): # 检测是否有空位
if self.matrix[i][j] == 0:
return False
for i in range(3): # 检测是否有相邻两个数相等
for j in range(3):
if self.matrix[i][j] == self.matrix[i][j + 1] or self.matrix[j][i] == self.matrix[j + 1][i]:
return False
return True
def merge(self): # 向左合并
out_matrix = []
def zero_to_end(lis): # 将零元素移动到末尾
while 0 in lis: # 如果0在列表中
lis.remove(0) # 删除0
return (lis + [0] * 4)[:4] # 将零元素添加到末尾并返回
for row in self.matrix:
row = zero_to_end(row) # 将零元素移动到末尾
for i in range(len(row) - 1): # 合并
if row[i] == row[i + 1]: # 如果相邻两个数相等
row[i] *= 2 # 则乘以2
row[i + 1] = 0 # 并将后一个数设为0
row = zero_to_end(row) # 将零元素移动到末尾
out_matrix.append(row) # 将合并后的行添加到输出列表
self.matrix = out_matrix # 将合并后的矩阵赋值给原矩阵
def numpy_ndarry_to_list(self): # 将numpy数组转换为列表
lis = []
for li in self.matrix:
lis.append(li.tolist()) # 将numpy数组转换为列表
self.matrix = lis # 将列表赋值给原矩阵
def rotate_rows(self, angle): # 顺时针为正,逆时针为负
if angle == 90: # 旋转90度
self.matrix = np.rot90(self.matrix, -1)
elif angle == -90: # 旋转-90度
self.matrix = np.rot90(self.matrix, 1)
elif angle == 180: # 旋转180度
self.matrix = np.rot90(self.matrix, 2)
else:
pass
self.numpy_ndarry_to_list() # 将numpy数组转换为列表
def left(self): # 向左移动
self.merge()
def right(self): # 向右移动
self.rotate_rows(180) # 旋转180度
self.merge() # 向左合并
self.rotate_rows(180) # 旋转180度
def up(self): # 向上移动
self.rotate_rows(-90) # 旋转-90度
self.merge() # 向左合并
self.rotate_rows(90) # 旋转90度
def down(self): # 向下移动
self.rotate_rows(90) # 旋转90度
self.merge() # 向左合并
self.rotate_rows(-90) # 旋转-90度
def print_matrix(self):
for i in range(4): # 打印矩阵
for j in range(4):
print('{:^5}'.format(self.matrix[i][j]), end='')
print() # 换行
def run(self): # 游戏运行
while True:
if self.is_game_over(): # 游戏结束
print('Game Over!')
break
if self.is_game_win(): # 游戏胜利
print('You Win!')
break
# 随机操作 operation = np.random.choice(['w', 'a', 's', 'd'])
operation = input('Operation -> ') # 输入操作
if operation == 'w':
self.up()
elif operation == 's':
self.down()
elif operation == 'a':
self.left()
elif operation == 'd':
self.right()
else:
print('Invalid Operation!') # 无效操作
self.generate() # 生成新数字
self.print_matrix() # 打印矩阵
if __name__ == '__main__':
Matrix_2048() # 创建2048矩阵