@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府
相信2048这个游戏对大家来说一定不陌生,下面这篇文章就主要给大家介绍了怎么用Python实现2048小游戏,文中通过注释与示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友们一起来看看吧。
前言
2048游戏规则:简单的移动方向键让数字叠加,并且获得这些数字每次叠加后的得分,当出现2048这个数字时游戏胜利。同时每次移动方向键时,都会在这个4*4的方格矩阵的空白区域随机产生一个数字2或者4,如果方格被数字填满了,那么就GameOver了。
主逻辑图
逻辑图解:黑色是逻辑层,蓝色是外部方法,红色是类内方法,稍后即可知道~
下面容我逐行解释主逻辑main()函数,并且在其中穿叉外部定义的函数与类。
主逻辑代码解读(完整代码见文末)
主逻辑main如下,之后的是对主函数中的一些方法的解读:
def main(stdscr):
def init():
#重置游戏棋盘
game_field.reset()
return 'Game'
def not_game(state):
#画出 GameOver 或者 Win 的界面
game_field.draw(stdscr)
#读取用户输入得到action,判断是重启游戏还是结束游戏
action = get_user_action(stdscr)
responses = defaultdict(lambda: state) #默认是当前状态,没有行为就会一直在当前界面循环
responses['Restart'], responses['Exit'] = 'Init', 'Exit' #对应不同的行为转换到不同的状态
return responses[action]
def game():
#画出当前棋盘状态
game_field.draw(stdscr)
#读取用户输入得到action
action = get_user_action(stdscr)
if action == 'Restart':
return 'Init'
if action == 'Exit':
return 'Exit'
if game_field.move(action): # move successful
if game_field.is_win():
return 'Win'
if game_field.is_gameover():
return 'Gameover'
return 'Game'
state_actions = {
'Init': init,
'Win': lambda: not_game('Win'),
'Gameover': lambda: not_game('Gameover'),
'Game': game
}
curses.use_default_colors()
game_field = GameField(win=32)
state = 'Init'
#状态机开始循环
while state != 'Exit':
state = state_actions[state]()
逐条解读(代码框内会标注是来自外部,无标注则是来自内部):定义主函数
def main(stdscr):
def init():
#重置游戏棋盘
game_field.reset()
reset出自外部定义的类,game_field=GameField的一个方法reset:
外部:
def reset(self):
if self.score > self.highscore:
self.highscore = self.score
self.score = 0
self.field = [[0 for i in range(self.width)] for j in range(self.height)]
self.spawn()
self.spawn()
#其中highscore为程序初始化过程中定义的一个变量。记录你win游戏的最高分数记录。