Skip to content

Latest commit

 

History

History
178 lines (160 loc) · 6.53 KB

example_snake_cn.md

File metadata and controls

178 lines (160 loc) · 6.53 KB

pikaPython 库使用 - 贪吃蛇

贪吃蛇

以 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 文档