以 snake 游戏为例,介绍一下在 Python 语言运行环境下,如何实现一个多 stage 的 snake 游戏
-
启动界面
-
难度选择
-
游戏界面
参考数据 | ||||
---|---|---|---|---|
-Os 优化 | -Oz 优化 | 备注 | ||
配置 | 主频 | 80MHz | 80MHz | —— |
优化等级 | -Os -lto | -Oz -lto | —— | |
屏幕尺寸 | 240 * 240 | 240 * 240 | —— | |
PFB 尺寸 | 240 * 4 | 240 * 4 | —— | |
堆 | 0x400 | 0x400 | —— | |
栈 | 0x200 | 0x200 | —— | |
rt heap | 0x6800 | 0x6800 | —— | |
性能 | 启动界面 FPS | —— | —— | 无刷新操作 |
难度选择 FPS | 23:41ms | 20:48ms | 固定刷新区域:160 * 90 | |
游戏界面 FPS | 87:11ms | 77:12ms | —— | |
程序大小 | Code | 150648 | 118912 | Python 虚拟机支持 |
RO-data | 49400 | 49328 | 16x24 字库文件、6x8 字库文件、Python 虚拟机支持 | |
RW-data | 732 | 728 | —— | |
ZI-data | 33668 | 33656 | 包括 LCD buffer、PFB pool、rt heap、rt stack、stack、heap、snake resource 等 |
snake 游戏的源代码位于 pikascript 下的 snake.py。在 Python 运行环境下,可用的图层有:背景颜色图层、基本单元图层、用户单元图层、文本图层、菜单图层、数字列表图层。相对于 C 环境下,少了背景图层,同时,自定义程度相对降低
-
首先,需要初始化事件控制和图像控制
self.evt = TinySquare.EvtKey() self.gfx = TinySquare.Gfx()
-
通过 stage 类来初始化一个 stage,并通过
register_layer
方法来注册图层到 stage 中welcome_stage = TinySquare.Stage() welcome_stage.register_layer(TinySquare.LayerBGCL(TinySquare.BG_CL_NORMAL, self.bg_color, 255, self.screen_region, None, None))
-
用户图层类的初始化也相对来说非常简单,只需要指定宽和高的数量即可,用户图层类的自定义绘制功能,需要一定的 C 语言基础才可以完成。调用
draw_userMap
即可完成对用户图层的绘制welcome_user_layer = TinySquare.LayerUser(self.width_block, self.height_block) welcome_stage.register_layer(welcome_user_layer) welcome_user_layer.draw_userMap(1, 1, 1)
-
文本图层类的初始化与 C 环境下类似,指定字体、颜色、不透明度以及 Region 即可。文本采用类 C 语言的格式化输出
welcome_text_layer = TinySquare.LayerText(TinySquare.TEXT_FONT_6X8, self.txt_color, 255, TinySquare.Region(0, 192, 240, 24)) welcome_stage.register_layer(welcome_text_layer) welcome_text_layer.print_str("%s", "Enter Any Key To Start")
-
当进行 stage 切换时,只需要定义一个 stage 类实例,然后进行切换即可,并可根据实际情况进行刷新操作
setting_stage = TinySquare.Stage() self.gfx.switch_stage() self.gfx.refresh()
-
菜单图层类的自定义选项相对于 C 语言大幅减少,但更加易用
setting_menu_layer = TinySquare.LayerMenu(("Easy", "Normal", "Hard"), TinySquare.TEXT_FONT_16X24, 160, 30, TinySquare.ItemFormat(self.bg_color, self.txt_color, 255), TinySquare.ItemFormat(self.txt_color, self.bg_color, 255)) setting_stage.register_layer(setting_menu_layer) self.gfx.refresh() menu_idx = setting_menu_layer.get_idx()
-
TinySquare 的使用非常简洁易上手,以上基本上涵盖了 TinySquare 在 python 运行环境下的基础功能,更多请查看 API 文档