《200行Python代码实现2048》分析

实验地址:https://www.shiyanlou.com/courses/368
实验文档 https://www.shiyanlou.com/courses/368/labs/1172/document
1.有限状态机控制游戏逻辑
利用函数式编程,通过一个字典数据结构建立不同状态和函数之间的映射关系,不同的状态执行不同的函数并且获得新的状态。

    while state != 'Exit':
        state = state_actions[state]()

简要分析游戏运行过程:
程序的入口为
curses.wrapper(main)
然后从main开始执行

state = 'Init'

#状态机开始循环
while state != 'Exit':
    state = state_actions[state]()

因为一开始是state = ‘Init’,所以执行state_actions['Init']() ,获得新state“Game”

def init():
    #重置游戏棋盘
    game_field.reset()
    return 'Game'

然后执行state_actions[ 'Game'](),获得新状态

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'

2.defaultdict数据结构
defaultdict的产生背景是字典不能访问一个不存在的键。
参考:
http://blog.csdn.net/real_ray/article/details/17919289
例如:

separator = defaultdict(lambda: line)

defaultdict有多种初始化的方式,可以以一个匿名函数初始化,匿名函数的内容就是字典value的默认内容。

3.curses库
Linux的curses图形库,Python默认内置
http://www.cnblogs.com/starof/p/4703820.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值