当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]这款主机通过ProtoStax模块构建了一个便携式游戏开发环境,配备16x2字符LCD显示屏、两个控制按钮以及两个压电扬声器,用于播放背景音乐和音效。整个设备集成在一个轻巧的外壳中,便于携带。

这款主机通过ProtoStax模块构建了一个便携式游戏开发环境,配备16x2字符LCD显示屏、两个控制按钮以及两个压电扬声器,用于播放背景音乐和音效。整个设备集成在一个轻巧的外壳中,便于携带。

当然,如果一个便携式游戏主机没有一些演示游戏,那它又有什么用呢?:-) 我们首先从一款森林主题的“无限跑酷”游戏开始,包含背景音乐和音效。游戏中,一位类似哈利·波特风格的“魔法师”手持魔杖,需要跳跃越过障碍物(树木)以尽可能多地收集分数。这款游戏是在现有Arduino版“无限跑酷”基础上进行升级,使游戏体验更接近街机风格——加入背景音乐、音效、高分记录等功能。你还可以轻松切换成哈利·波特、《权力的游戏》或《塞尔达传说》主题(甚至可以自己设计主题)。

在本篇文章中,我们将展示第二款演示游戏——蛇类游戏。

如果你还没见过这款在旧款(非智能)翻页手机上广泛流行过的蛇类游戏,那么游戏的目标就是避开障碍物并吃掉苹果。每当蛇吃掉一个苹果,它的长度就会增加1,游戏速度也会略微加快!同时,蛇不能撞到自己(当蛇变长时,这会成为危险因素)。

按下按钮1或按钮2即可开始游戏。游戏过程中,按按钮1可使蛇向左(逆时针)转弯,按按钮2则使其向右(顺时针)转弯。

当蛇撞到障碍物时游戏结束——无论是碰到四个边缘/墙壁中的任意一个,还是撞到自身。得分根据蛇的长度来计算。

游戏中包含多种音效:蛇转向时、吃苹果时、撞到障碍物或游戏结束时都会发出声音。当你达到高分时,还会播放庆祝音乐!游戏还会显示你失败的原因以及可供挑战的最高分!

本游戏基于SadaleNet开发的“Arduino 1602 蛇类游戏”(原始代码链接请见下方署名)。

准备便携式游戏主机

第二步:准备软件

您可以使用GitHub页面(下方链接)中的示例代码ProtoStaxSnakeGame,该代码也包含运行说明。

此代码使用了以下库:

- ProtoStax_MmlMusicPlayer

- MmlMusic(ProtoStax_MmlMusicPlayer继承自MmlMusic库,因此需要先安装基础库)

- LiquidCrystal_I2C(用于LCD显示屏)

您还需要按照README文件中的说明安装上述库。

第三步:运行程序

编译并上传代码到您的便携式Arduino游戏控制台。

在播放简短的开场音乐(致敬《吃豆人》!)后,按下按钮1(靠近您的按钮,连接至Arduino的引脚2),或按钮2(远离您的按钮,连接至Arduino的引脚3)来开始游戏。

游戏进行时,按按钮1可使蛇向左或逆时针方向转弯;按按钮2则使蛇向右或顺时针方向转弯。

当蛇转弯时(因此你也会听到提示音,知道哪个按钮对应什么),或当蛇撞到障碍物(如边缘/墙壁,或碰到自己/吃掉自己)时,会有不同的音效。每吃掉一个苹果,蛇的长度就会增加1,游戏速度也会略微加快。

游戏将持续到蛇碰到障碍物为止。得分根据蛇的长度计算,游戏开始时会显示最高分。如果在游戏结束时你超过了上次记录的最高分,还会播放一段庆祝音乐(致敬Mappy!)。

对SadaleNet的Arduino 1602蛇形游戏引擎的修改

虽然我保留了原始代码中的基本游戏引擎,但对其进行了大量修改。

代码已调整为使用ProtoStax LCD套件V2中的LiquidCrystal_I2C显示屏。按钮连接至引脚2和3,与ProtoStax便携式Arduino游戏控制台的电路图一致。

此外,控制台还连接了两个压电扬声器至数字引脚10和13,并使用ProtoStax_MmlMusicPlayer库来播放音乐和音效。在游戏过程中,适当位置插入了播放这些音效的调用。

我还添加了游戏运行时的背景音乐:游戏开始时的引导音乐、蛇向左或向右转弯时的音效,以及碰到障碍物时的音效;当打破最高分时,还会播放庆祝音乐,所有功能均通过ProtoStax_MmlMusicPlayer库和压电扬声器实现。当播放开场音乐和庆祝音乐时,控制台输入会被阻断,类似于街机游戏,玩家需要等待简短的音乐片段结束后才能继续操作。添加音乐和音效使游戏在听觉反馈方面更加沉浸。

我会记录最高分,并在游戏结束时将最高分显示在屏幕上。同时,我还会记录游戏结束的原因(如撞到障碍物或蛇头相撞),并以消息形式向玩家提示,让失败原因一目了然——这对新手玩家来说尤其有用。

关于精灵的运作方式

需要注意的一个细节是精灵——蛇和苹果。

在LCD屏幕上,字符以8x5的单元格显示。除了常规的ASCII字符外,你还可以自定义显示字符,该字符将被存储在内存中(createChar函数的第一个参数指定字符应存储在内存中的哪个位置)。

之后,你可以直接使用该内存位置来显示笑脸符号,具体方法如下:

你只能定义8个这样的自定义字符——createChar函数的第一个参数是用于存储内存中其中一个自定义字符的索引(0到7)。

在蛇类游戏中,为了增加可移动位置的数量,每个蛇段和苹果只占用8x5字符区域的一半(实际上少于一半,因为精灵本身只有3x5大小,中间留出第四行为空白)。

在graphic_generate_characters()函数中,根据自定义字符上半部分是否为空白、蛇段或苹果,以及下半部分是否为空白(0)、蛇段(S)或苹果(A)的不同排列方式,共定义了8个自定义字符:

0: 0 A

1: 0 S

2: A 0

3: A A

4: A S

5: S 0

6: S A

7: S S

仅看代码可能有点难以理解,希望这个解释能帮到你!如果你愿意,可以修改这些精灵图像——最简单的方法就是直接更新代码中的方块和苹果字节数组(如上图所示)。

继续前进

一如既往,我想以分享如何通过添加自己的内容来推进这个项目作为结尾。一旦你熟悉了代码示例并理解了代码,尝试通过更多实践来拓展学习成果总是很有帮助的。

以下是一些关于如何推进该项目的建议:

使用LCD自定义字符生成器创建自己的精灵,以制作游戏的个性化版本。需要注意的是,由于每条蛇或苹果精灵仅占用半个字符,因此总共可以创建8个自定义字符,每个字符中可包含蛇、苹果,或空位,以应对蛇在上方、下方,或上下同时出现(例如旋转时)等不同情况。由于LCD最多只能创建8个自定义字符,这限制了可用的特殊精灵数量。例如,希望蛇头、身体和尾巴看起来各不相同,可能需要动态创建自定义字符,这还可能影响游戏的运行性能。

通过编写自己的MML字符串,创作专属的开场音乐、庆祝音乐和音效。

当玩家获得高分时,允许其输入自己的姓名,并建立一个高分及对应玩家姓名的列表。

使用按钮1/按钮2在游戏开始前切换设置/高分菜单界面——用户可通过该设置界面选择背景音乐和音效设置等。

代码已自带按钮去抖功能。你可以用 JC_Button 等库来替代这一部分,这些库除了去抖外,还能轻松处理短按、长按或两个按钮同时按下等情况。例如,可以将两个按钮同时被按住的长按行为视为重置游戏高分(或者只是再次播放令人愉悦的吃豆人开场音乐,而无需真正重置高分记录)!

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭