参考了大佬的代码,有了一些自己的调整,修复了大佬的一些小bug
原文链接
#!/usr/bin/env python3
# coding: utf-8
import numpy
import numpy as np
import random
from random import choice
class Game2048(object):
'''2048游戏的类'''
'''
属性:
self.dimension
self.matrix
方法:
judge_gameover(self)
generate_num(self)
left_2048(self)
right_2048(self)
down_2048(self)
up_2048(self)
print_(self)
input_(self)
'''
def __init__(self, dimension=3):
self.dimension = dimension # 维数,决定要构建几维的矩阵
self.matrix = np.zeros((dimension, dimension)) # 创建一个全是0的n(n = dimension)维矩阵
self.matrix2 = np.zeros((dimension, dimension)) # 创建一个全是0的n(n = dimension)维矩阵
def judge_gameover(self): # 判断是否游戏结束,如果游戏结束返回True,未结束则返回False
'''如果水平方向上任意两个相邻的数字有相等的或者有为0的那么游戏未结束'''
for a in range(0, self.dimension):
for b in range(0, self.dimension - 1):
if self.matrix[a][b] == self.matrix[a][b + 1] or self.matrix[a][b] == 0 or self.matrix[a][b + 1] == 0:
return False
'''如果垂直方向上任意两个相邻的数字有相等的或者有为0的那么游戏未结束'''
'''此处有问题,这里转置了全局变量没有转置回去导致错误,故定义两个矩阵存储,互不影响'''
self.matrix2 = np.transpose(self.matrix) # 先转置垂直方向变作水平方向 eg:[[1,2],[3,4]]>>[[1,3],[2,4]]
for a in range(0, self.dimension):
for b in range(0, self.dimension - 1):
if self.matrix2