Microptyhon制作小游戏DinoRun

Microptyhon制作小游戏DinoRun

0x00 前言

去年入手了一块M5StickC,然后吃灰了好久。最近有幸把它找了出来,然后复习了一些基本操作。
因为M5StickC自带了按钮和屏幕,所以玩起来要方便很多,不用额外的接线,就可以实现很多有趣的效果。
官方的固件支持Micropython开发,而且集成了屏幕驱动,操作起来十分的方便,只要把它当作一个实体显示的画板即可。

0x01开发思路

之前看了一篇使用Flutter开发DinoRun的文章,那篇文章提到了一个设计原则

1
2
3
while True:
game.update()
game.render()

游戏里的每一个组件必须具备两个基本方法:

updaterender

  • update是对数据进行更新,如物体的状态.速度.位置.
  • render是绘制该组件,使其呈现在画面上

遵循这个思路,那么开发就可以开始了

0x02 开发记录

使用VSCode进行代码编写,然后配合Putty的串口通信功能,最后配合PhotoShop进行测绘。

每次写好代码,就在Putty中Ctrl+E(开启粘贴模式)和右键(粘贴)再Ctrl-D(结束粘贴模式)即可.

大概花了半周的时间,先熟悉了M5StickC的基本Api,然后开始制作。最后完成度还算挺高的(吧?)。这样比较方便调试,写完以后可以使用ampy上传到板子里,这样就不会因为重启丢失脚本了。

游戏里的组件有恐龙,障碍生成器,云朵生成器。

每次update的时候,会将生成的云朵和障碍x坐标减少,当云朵或者障碍离开屏幕的时候就会生成一个新的云朵或障碍。

由于对象x坐标的变化,在绘制的时候就会产生向左移动效果。

对于恐龙,每次update会增加内置计数器的值。我使用这个计数器来进行脚步的切换,从而产生走路的效果。

为了模拟现实当中的重力效果,所以小恐龙上升的过程中,速度越来越小,而下降的过程中,速度越来越大。

0x03 成果展示

视频展示:给自己做个游戏机(吧)

0x04 总结

借助update和render的理念,即可开发出各种小游戏。

在图像更新的时候也学到了一些小技巧,比如每一帧画面并不是完全的刷新,只刷新发生变化的那一块区域。

如果使用全局刷的话,刷新以后还需要重新绘制,这样做会严重浪性能。

以本案例中的云朵为例子,每次更新记录上一帧的坐标,然后在绘制之前先将上一帧绘制的内容清空,在绘制本帧的内容。

0x05 附录

代码地址:GitHub