注:此代码需要在shell下运行
import curses
from itertools import chain
from random import choice, randint
# 创建一个游戏类
class Gamefiled(object):
# 游戏文件的属性
def __init__(self, width=4, height=4, win_value=2048):
self.width = width
self.height = height
self.win_value = win_value
self.score1 = 0
self.score2 = 0
self.file1 = []
self.file2 = []
# 创建数据文件函数<以列表的方式保存>
def recreate_file(self):
self.file1 = [[0 for i in range(self.width)]for j in range(self.height)]
self.file2 = [[0 for i in range(self.width)]for j in range(self.height)]
self.create_random(self.file1)
self.create_random(self.file1)
self.create_random(self.file2)
self.create_random(self.file2)
# 在列表中随即生成数的函数
def create_random(self, filed):
while True:
i, j = choice(range(self.width)), choice(range(self.height))
if filed[i][j] == 0:
filed[i][j] = 4 if randint(1, 100) > 90 else 2
break
# 按格式画棋盘
def draw(self, stdscr):
def draw_sep():
line = '+' + '----+' * self.width
stdscr.addstr(line + '\n')
def draw_row(row): # [2,0,2,0]
draw_one_row = "".join(['|{:^4}'.format(num)
if num != 0 else '| ' for num in row]) + '|'
stdscr.addstr(draw_one_row + '\n')
stdscr.clear() # 清屏
# 打印分数
stdscr.addstr('Player1_Score:' + str(self.score1) + '\n')
# 画棋盘
for row in self.file1:
draw_sep()
draw_row(row)
draw_sep()
stdscr.addstr('Player2_Score:' + str(self.score2)