设为首页|加入收藏|网站地图|繁体|

您所在的位置:老虎机游戏下载>专家分析>谁有彩票网送彩金的,如何用Python实现超级玛丽的界面和状态机?

谁有彩票网送彩金的,如何用Python实现超级玛丽的界面和状态机?

2020-01-11 14:30:164076匿名

谁有彩票网送彩金的,如何用Python实现超级玛丽的界面和状态机?

谁有彩票网送彩金的,作者 | marble_xu

编辑 | 郭芮

来源 | csdn博客

小时候的经典游戏,代码参考了github上的项目mario-level-1(https://github.com/justinmeister/mario-level-1),使用pygame来实现,从中学习到了横版过关游戏实现中的一些处理方法。原项目实现了超级玛丽的第一个小关。

在原项目的基础上,游戏使用json文件来保存每一个关卡的数据,将数据和代码解耦合,目前已开发4个小关,后续关卡的扩展也很方便,只需要添加json文件和地图图片,支持新的怪物就行。游戏还支持进入水管,到新的子地图。

这篇文章是要介绍下游戏中的几个界面显示和界面之间如何转换,所以特意写了一个demo程序,完整的游戏代码在下面的github链接(https://github.com/marblexu/pythonsupermario)中下载。

状态机介绍

状态机的每一个状态至少需要有下面三个操作:

startup:当从其他状态进入这个状态时,需要进行的初始化操作;

update :在这个状态运行时进行的更新操作;

cleanup:当从这个状态退出时,需要进行的清除操作。

状态需要的变量:

next: 表示这个状态退出后要转到的下一个状态;

persist:在状态间转换时需要传递的数据;

done:表示这个状态是否结束,状态机会根据这个值来决定转换状态。

图1

这几个状态的意思比较简单,下面把游戏界面的截图发一下。

图2

load screen:游戏开始前的加载界面。

图3

game run:游戏运行时的状态,在代码实现中是level类。

图4

game over:人物死亡且生命数目为0时到这个状态。

图5

time out:

状态机代码实现

游戏启动代码

load_all_gfx函数查找指定目录下所有符合后缀名的图片,使用pg.image.load函数加载,保存在graphics set中。

gfx 保存在resources/graphics目录找到的所有图片,后面获取各种图形时会用到。

状态类

看一个状态类loadscreen的具体实现,这个状态的显示效果如图3。

startup 函数保存了传入的persist,设置 next 为level 状态类,start_time保存进入这个状态的开始时间。初始化一个info类,这个就是专门用来显示界面信息的。

update 函数根据在这个状态已运行的时间(current_time - self.start_time),决定显示内容和是否结束状态(self.done = true)。

info类

pygame的 blit 函数介绍如下:

看一下create_info_labels函数中其中一个字符串’mario’是如何在界面上显示的。

create_label函数参数 (x, y) 表示字符串在界面上的起始位置,从self.image_dict中根据字符获取对应的surface 对象。

set_label_rects函数会设置字符串中每一个surface 对象 rect 的(x, y)值。

control类

event_loop函数负责监听输入(键盘输入和退出按钮),slef.keys 保存键盘输入。

update函数会检测状态的done值,调用状态的更新函数。如果检测到当前状态结束,就调用flip_state函数进行旧状态的清理操作,并转换到下一个状态。

完整代码

有两个文件constants.py 和 state_demo.py,constants.py 保存了所有的字符串定义和常量。

constants.py

state_demo.py

上面讲的状态类,状态机类都放在这里。

用到的图片

1、item_objects.png

2、level_1.png

3、mario_bros.png

4、text_images.png

5、tile_set.png

6、title_screen.png

编译环境:python3.7 + pygame1.9。

声明:本文为csdn博主「marble_xu」的原创文章。

原文链接:

(*本文为ai科技大本营转载文章,转载请联系原作者)

99真人