🍓Arduino游戏项目– Arduino的Flappy Bird复制品
Arduino | 游戏
Last updated
Arduino | 游戏
Last updated
在这个Arduino项目中,我们将使用Arduino和TFT触摸屏制作一个很酷的Arduino游戏,实际上是流行的智能手机Flappy Bird游戏的复制品。
游戏非常简单,但有趣且令人上瘾。使用触摸屏,我们可以控制鸟类,并尽量避免碰到随着我们前进而速度增加的移动支柱。即使拔下电源,游戏也可以存储您的最高分。
我们将使用Henning Karlsen制造的UTFT和URTouch库。 您可以从他的网站下载这些库。 另外,我们将使用EEPROM库将最高分存储在EEPROM中。 EEPROM是即使在电路板关闭时也可以存储数据的存储器。
包含库之后,我们需要创建UTFT和URTouch对象以及定义游戏所需的变量。 在设置部分,我们需要启动显示和触摸,从EEPROM读取最高分,并使用initializeGame()自定义函数启动游戏。
因此,使用initialGame()自定义函数,我们将绘制游戏的初始状态,这是我们将如何做的事情。 首先,我们需要清除屏幕,然后绘制蓝色背景,绘制底部,添加文本并调用drawBird()自定义函数绘制小鸟。 此后,我们需要一个while循环,这将阻止游戏开始,直到我们点击屏幕为止。 因此,当我们处于此状态时,如果我们按右上角,我们可以将最高分数重置为零,并且如果我们按屏幕上的其他任何地方,我们将退出while循环,并进入代码的主循环, 将开始游戏。
在主循环部分,我们有用于绘制支柱的xP变量以及yP变量。 首先,xP变量的值为319,作为屏幕的大小,而yP变量的值为100,即第一支柱的高度。 每次迭代时,xP变量的值都将减小movingRate变量的值,该变量的开头为3,随着游戏的进行,它会增加。
这是游戏的工作原理:我们有50像素宽的支柱,它们从右向左移动,每个下一个支柱都有不同的随机高度。 为了使它们顺理成章地移动,在每次迭代之后,我们需要清除屏幕并重新绘制带有支柱的图形。 但是,由于屏幕刷新率低,我们不能这样做,否则会导致图形闪烁。 为了激活其所有像素,屏幕需要更多时间,因此我们将不得不即兴创作和重绘那些正在移动的事物。
因此,让我们看一下drawPilars()自定义函数将如何做到这一点。 它使用xP和yP变量,并使用它们和fillRect()函数将绘制支柱。 因此,每次迭代都会在柱子的新位置绘制柱子,在柱子的左侧和右侧还有其他蓝色矩形,这些矩形会清除以前绘制的柱子,这样,我们实际上只是重新绘制了移动的柱子即兴创作。 这里的if语句是一种即兴的表现,因为由于某种原因,如果fillRect()函数的“ x2”参数值超出屏幕尺寸,则该函数将无法正常工作。 同样,在此自定义功能的结尾,我们需要打印达到的分数的值。
回到循环部分,我们有了yB变量,它是鸟的y位置,它取决于下降速度,下降速度在每次迭代后都会增加,这样我们就可以得到加速度或重力的影响。 另外,在这里我们检查碰撞并使用if语句限制鸟,以便如果它撞到顶部,地面或柱子,游戏将结束。
接下来是drawBird()自定义函数,让我们看看它是如何工作的。 这只鸟实际上是一张照片,可以使用Henning Karlsen制造的ImageConverter565工具将其转换为位图。 使用该工具创建的“ .c”文件需要包含在目录中,以便在启动草图时加载。 同样,我们必须定义这样的位图,并使用drawBitmap()函数将照片绘制在屏幕上。 鸟具有固定的X –坐标,而yB变量为Y –坐标。 与支柱类似,我们将在鸟的上方和下方绘制两个蓝色矩形,以清除鸟的先前状态。
回到循环中,我们可以看到支柱穿过屏幕后,xP变量将重置为319,yP将针对支柱的高度从20到100获得新的随机值,并且得分将增加一。 在下一个if语句中,我们控制了这只鸟。 如果我们点击屏幕,我们会将下降速度设置为负,这将使鸟跳,而如果仅按住屏幕,则else if语句将不允许发生。 最后的if陈述是为了说明游戏的难度,每增加一个细点,它就会增加支柱的移动速度。
好了,现在剩下的就是看gameOver()自定义函数的工作原理。 延迟一秒钟后,它将清除屏幕,打印分数和一些文本,如果分数高于最高分数,则会将其写到EEPROM中,它将所有变量重置为其初始位置值,并在最后 它将调用initializeGame()自定义函数来重新启动游戏。