200 行代码实现简易版 2048 游戏

创建游戏文件 2048.py

首先导入需要的包:

主逻辑

用户行为

所有的有效输入都可以转换为”上,下,左,右,游戏重置,退出”这六种行为,用 actions 表示

有效输入键是最常见的 W(上),A(左),S(下),D(右),R(重置),Q(退出),这里要考虑到大写键开启的情况,获得有效键值列表:

将输入与行为进行关联:

状态机

处理游戏主逻辑的时候我们会用到一种十分常用的技术:状态机,或者更准确的说是有限状态机(FSM)

你会发现 2048 游戏很容易就能分解成几种状态的转换。

state 存储当前状态, state_actions 这个词典变量作为状态转换的规则,它的 key 是状态,value 是返回下一个状态的函数:

  • Init: init()
    • Game
  • Game: game()
    • Game
    • Win
    • GameOver
    • Exit
  • Win: lambda: not_game(‘Win’)
    • Init
    • Exit
  • Gameover: lambda: not_game(‘Gameover’)
    • Init
    • Exit
  • Exit: 退出循环

状态机会不断循环,直到达到 Exit 终结状态结束程序。

下面是经过提取的主逻辑的代码,会在后面进行补全:

用户输入处理

阻塞+循环,直到获得用户有效输入才返回对应行为:

矩阵转置与矩阵逆转

加入这两个操作可以大大节省我们的代码量,减少重复劳动,看到后面就知道了。

矩阵转置:

矩阵逆转(不是逆矩阵):

创建棋盘

初始化棋盘的参数,可以指定棋盘的高和宽以及游戏胜利条件,默认是最经典的 4×4~2048。

棋盘操作

随机生成一个 2 或者 4

重置棋盘

一行向左合并

(注:这一操作是在 move 内定义的,拆出来是为了方便阅读)

棋盘走一步

通过对矩阵进行转置与逆转,可以直接从左移得到其余三个方向的移动操作

判断输赢

判断能否移动

绘制游戏界面

完成主逻辑

完成以上工作后,我们就可以补完主逻辑了!

运行

填上最后一行代码:

屏幕快照 2016-04-13 下午4.48.12

完整版代码地址

https://github.com/JLUNeverMore/easy_2048-in-200-lines

1 5 收藏 1 评论

可能感兴趣的话题



直接登录
最新评论
  • 出错了,请问是什么原因

    Traceback (most recent call last):
    File "E:/code/python/2048.py", line 3, in <module>
    import curses
    File "D:\Python27\lib\curses\__init__.py", line 15, in <module>
    from _curses import *
    ImportError: No module named _curses

跳到底部
返回顶部