python game2048
效果图:
源代码:
import random
import math
__mataclass__ = type # 使用新式类
# 此类为地图模块封装的类
class map2048():
# 重新设置游戏数据
def reset(self):
self.__row = 4 # 行数
self.__col = 4 # 列数
self.data = [
[0 for x in range(self.__col)]
for y in range(self.__row)
]
# self.data = [[x + 4 * y for x in range(self.__col)]
# for y in range(self.__row)]
# self.data = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
self.fill2()
self.fill2()
def __init__(self):
self.reset()
# 获取没有数字的位置的个数
def get_space_count(self):
#获取没有数字的方格的数量
count = 0
for r in self.data:
count += r.count(0)
return count
# 获取游戏的得数。
def get_score(self):
s = 0
for r in self.data:
for c in r:
s += 0 if c < 4 else c * int((math.log(c, 2) - 1.0))
return s
# 填充2到空位置,如果填度成功返回True,如果已满,则返回False,
def fill2(self):
blank_count = self.get_space_count()
if 0 == blank_count:
return False
# 生成随机位置
pos = random.randrange(0, blank_count)
offset = 0
for r in self.data:
for ci in range(self.__col):
if 0 == r[ci]:
if offset == pos:
r[ci] = 2
return True
offset += 1
# 判断游戏是否结束
def is_gameover(self):
for r in self.data:
# 如果水平方向还有0,则游戏没有结束
if r.count(0):
return False
# 水平方向如果有两个相邻的元素相同,则没有游戏结束
for i in range(self.__col - 1):
if r[i] == r[i + 1]:
return False
for c in range(self.__col - 1):
# 竖直方向如果有两个相邻的元素相同,则没有游戏结束
for r in range(self.__row - 1):
if self.data[r]