python2048小游戏需求分析_Python实现小游戏--2048

开篇语

今天是笔者奶奶生日,昨天为此准备了不少事情,也因此花费了很多时间,今天上午接待客人,下午送我年迈的姑奶奶回家。等我抽出身来看代码已经是三点的事情了。再加上还有个“问题xx”要教导,真正开始认真看代码,已经是四点咯。然后看到五点多,爸爸叫我吃饭,我去,还没跑步,所以又是一番鸡飞狗跳。跑完回来一边压腿,一边看家人吃饭,也是醉醉的。虽然有点跑题,但是我还是要拿我的跑步的图来放一放~~~

7a3a7545d2fb?appinstall=0@

这是定向越野~地面泥泞,公路上大大小小的石子,跑起来真是百曲千回~

第二天了,继续坚持!yeah!

正文

本次是我对于Python实现2048这个曾经风靡一时的小游戏的代码解读,代码来自实验楼:200行Python代码实现2048

7a3a7545d2fb?appinstall=0@

工作环境

一、主逻辑图

7a3a7545d2fb?appinstall=0@

逻辑图解:黑色是逻辑层,蓝色是外部方法,红色是类内方法,稍后即可知道~

7a3a7545d2fb?appinstall=0@

状态机。。。游戏概念,出自实验楼

下面容我逐行解释主逻辑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=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值