具体代码在下面:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# 作者:魏明泽
# 参考网址: http://2048game.com/
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