用Python从0开始写2048小游戏

小小草
小小草 2020年11月21日 08:46 发表
摘要:前段时间一个非常火的一个小游戏,想必玩法就不用介绍了,很简单搞不清楚的同学赶快去体验下就明白了。现在学习python,从网上找了一个教程,一步一步跟着写下来,现在在这里分享给大家,这里实现的是终端下的2048,下面开始正文。

前段时间一个非常火的一个小游戏,想必玩法就不用介绍了,很简单搞不清楚的同学赶快去体验下就明白了。现在学习python,从网上找了一个教程,一步一步跟着写下来,现在在这里分享给大家,这里实现的是终端下的2048,下面开始正文。

有限状态机

首先介绍一个重要的概念:有限状态机。用来描述状态之间相互转换的一个编程模式。

初始状态(Init):从该状态开始并接受用户的输入结束状态(Exit):此状态下结束,不再接受用户的输入输入状态(Game,Win,Gameover):根据用户的的输入进行转换转移状态(Restart, Exit):根据用户的输入内容,将当前状态转移到下一个状态根据上述状态,可想2048小游戏可分为Init, Game, Win, Gameover, Exit, Restart几种不同的状态,对应的我们

设置几种有效输入键,如最常见的 W(上),A(左),S(下),D(右),R(重置),Q(退出)。

curses库

curses库提供了控制字符屏幕的独立于终端的方法。curses 程序将在纯文本系统上、xterm 和其它窗口化控制台会话中运行,这使这些应用程序具有良好的可移植性。我们在程序中用到了curses库中的几个函数。

curses.wrapper(main): 在调用时打开窗口执行main函数,wrapper会将界面变量screen传递给main函数。

stdscr.addstr(): 向屏幕上输出内容。

stdscr.getch(): 获取用户输入内容,返回一个整数,在0到255之间,表示输入字符的ASCII值。

程序主体

根据上面状态机的描述,可想到,状态机会不断的进行循环,直到收到Exit结束状态的情况。

state存储当前的状态,最初状态是Init,state_actions词典中是状态的转换规则,调用GameField会

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

用户输入处理

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

GameField类

调用GameField类会初始化棋盘的参数。设定狂傲等信息。

move方法是当用户进行上下左右移动操作时进行调用的

is_win, is_gameover方法判断是否游戏输赢状态

draw方法会绘制游戏界面,spawn方法会在游戏棋盘内找一个没有数字的框随机生成一个2或者4。

move_is_possible方法判断是否还能移动

运行下看看吧

点赞 0 收藏(0)    分享
相关标签: python
问题没解决?让chatGPT帮你作答 智能助手
0 个评论
  • 消灭零评论