"""
bll.py
游戏核心逻辑控制器
"""import random
from model import LocationModel
classGameCoreController:def__init__(self):
self.__list_merge =None
self.__map =[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],]
self.__list_empty_location =[]@propertydefmap(self):return self.__map
def__zero_to_end(self):"""
零元素移动到末尾
"""for i inrange(len(self.__list_merge)-1,-1,-1):if self.__list_merge[i]==0:del self.__list_merge[i]
self.__list_merge.append(0)def__merge(self):"""
合并数据
"""
self.__zero_to_end()for i inrange(len(self.__list_merge)-1):if self.__list_merge[i]== self.__list_merge[i +1]:
self.__list_merge[i]+= self.__list_merge[i +1]del self.__list_merge[i +1]
self.__list_merge.append(0)defmove_left(self):"""
向左移动
"""for line in self.map:
self.__list_merge = line
self.__merge()defmove_right(self):"""
向右移动
"""for line in self.map:
self.__list_merge = line[::-1]
self.__merge()
line[::-1]= self.__list_merge
def__square_matrix_tranpose(self):for c inrange(len(self.map)-1):for r inrange(c +1,len(self.map)):
self.map[r][c], self.map[c][r]= self.map[c][r], self.map[r][c]defmove_up(self):"""
向上移动
"""
self.__square_matrix_tranpose()
self.move_left()
self.__square_matrix_tranpose()defmove_down(self):"""
向下移动
"""
self.__square_matrix_tranpose()
self.move_right()
self.__square_matrix_tranpose()defgenerate_new_number(self):
self.__calculate_empty_location()iflen(self.__list_empty_location)==0:return
loc = random.choice(self.__list_empty_location)# self.map[loc[0]][loc[1]] = self.__select_random_number()
self.map[loc.r][loc.c]= self.__select_random_number()def__select_random_number(self):return4if random.randint(1,10)==1else2def__calculate_empty_location(self):
self.__list_empty_location.clear()for r inrange(len(self.map)):for c inrange(len(self.map[r])):if self.map[r][c]==0:# self.__list_empty_location.append((r, c))
self.__list_empty_location.append(LocationModel(r, c))defis_game_over(self):iflen(self.__list_empty_location)>0:returnFalsefor r inrange(len(self.map)):for c inrange(len(self.map[r])-1):if self.map[r][c]== self.map[r][c +1]or self.map[c][r]== self.map[c +1][r]:returnFalsereturnTrue# for r in range(len(self.map)):# for c in range(len(self.map[r])-1):# if self.map[r][c] == self.map[r][c+1]:# return False## for c in range(len(self.map)):# for r in range(len(self.map)-1):# if self.map[r][c] == self.map[r+1][c]:# return Falseif __name__ =='__main__':
controller = GameCoreController()
controller.generate_new_number()
controller.generate_new_number()
controller.move_down()print(controller.map)
"""
model.py
"""classLocationModel:"""
位置模型
"""def__init__(self,r,c):
self.r = r
self.c = c
"""
usl.py
游戏界面逻辑模块
"""import os
from bll import GameCoreController
classGameConsoleView:"""
控制台界面类
"""def__init__(self):
self.__controller = GameCoreController()def__start(self):
self.__controller.generate_new_number()
self.__controller.generate_new_number()
self.__draw_map()def__update(self):whileTrue:
self.__move_map_for_input()
self.__controller.generate_new_number()
self.__draw_map()if self.__controller.is_game_over():print("游戏结束")def__move_map_for_input(self):dir=input("请输入方向:")ifdir=="w":
self.__controller.move_up()elifdir=="s":
self.__controller.move_down()elifdir=="a":
self.__controller.move_left()elifdir=="d":
self.__controller.move_right()defmain(self):
self.__start()
self.__update()def__draw_map(self):
os.system("clear")for line in self.__controller.map:for item in line:print(item,end ="\t")print()