python能编游戏吗_用Python从0开始写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结束状态的情况。

u=3667095666,4065584059&fm=173&app=49&f=JPEG?w=640&h=668&s=921531CCD3A6936E00DEE5050200F0CB

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

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

用户输入处理

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

u=4018445331,87607178&fm=173&app=49&f=JPEG?w=384&h=94&s=5A3531C0CBA5BA514CDEC50D0200A08B

GameField类

u=847732391,4080567296&fm=173&app=49&f=JPEG?w=640&h=256&s=1AC5B1449FE0B7705C5AC4870200A0CB

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

u=3433672586,2899909946&fm=173&app=49&f=JPEG?w=640&h=796&s=12C5B14CDAE6B64F1C52C003020060CB

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

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

u=2873097672,2478259026&fm=173&app=49&f=JPEG?w=640&h=480&s=1285B14CD3F7B26D4256E0070200A0CB

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

u=3957955044,2468483538&fm=173&app=49&f=JPEG?w=640&h=386&s=12C5B14C13F4B3685657C887020060CB

move_is_possible方法判断是否还能移动

运行下看看吧

u=2336738936,895356911&fm=173&app=49&f=JPEG?w=385&h=277&s=BA81E14C5AE4BA4D4E4D540E0000E0C0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值