100小时从零开始:用FPGA造一个游戏机

作者:品客 来源:PYNQ开源社区微信公众号

本次暑期学校,有许多优秀作品都与游戏有关。接下来,就让我们一起来看看这些有趣的“小游戏”吧!所有项目均已开源,github链接已经附上。只要根据要求设置环境,你也可以尝试这些游戏!感兴趣的读者们一定要试试哟!

经典游戏:躲避车

项目介绍:

经典之所以为经典,就是因为他永远不会过时。我们的日常生活中并不一定有那么多新颖的发现和发明,有时候复现经典也是很好的选择。我们小组决定做一个经典游戏复现,相信游戏“躲避车”是很多人的童年回忆。我们基于现有的知识水平基础上争取实现“躲避车”功能的小项目,复现经典。

通过SEA上两个key按键控制进行车辆的显示区域变更,达到左右位置变化的效果,由此躲避障碍物。通过伪随机数序列和计数变量来生成障碍物的纵坐标位置,并使其显示区域不断往左移动直到车的左边后消失,达到我们所控制的车在往右行驶的感觉。最后通过判断车与障碍物的位置来判定是否发生碰撞,发生碰撞即结束游戏,再按一次key即可重新开始游戏。其中还利用了一些标志变量。

通过图片和软件来生成coe文件,使用rom,来调用,车与障碍物通过miniHDMI接口来外接显示屏进行显示。

github链接:https://github.com/JackHong813/game1.git

Catmario

项目介绍:

我们借鉴了猫里奥经典游戏——参考设计了Catmario。想通过这次项目回顾童年经典游戏,希望能探索其中的代码设计,提升自我水平。

考虑到游戏的实时性,以及游戏中对状态机的大量应用,利用FPGA并行模式的优势实现游戏Catmario在SEA上的复现。Catmario游戏中的主角是猫里奥,可以左右移动以及跳跃,在路途中越过障碍,掉入空隙就会死亡,到达目的地即成功。我们通过Verilog语言编写Catmario的代码,并下载到SEA上,结合适当的外部连接设备实现游戏的正常显示和运行。

github链接:https://github.com/06a17301/sea_catmario#sea_catmario

贪吃蛇

项目介绍:

贪吃蛇游戏是一款休闲益智类游戏,既简单又耐玩。该游戏通过控制蛇头方向吃苹果,从而使得蛇变得越来越长。一旦蛇头碰到墙壁或自己身体,则游戏介绍。我们基于SEA开发板设计了一款简易的贪吃蛇游戏,有简单模式和疯狂模式,两种模式蛇运动的速度不一样,对应难度也不一样。

我们的特色是可以用两种方式进行游戏。分别是SEA的拓展游戏手柄上的按键控制;以及手机App通过蓝牙远程控制。

在项目过程中,我们学习了贪吃蛇游戏的算法,以及如何用硬件编程语言去描述。学习了HDMI屏幕如何显示字符、色块,以及读取coe文件显示图片。也学习了状态机的设计,URAT通信原理及实现。

github链接:https://github.com/xexewhy/sea-Greedy-Snake

经典游戏复现_flappy bird

项目介绍:

我们小组选择了经典游戏复现项目,并选择了经典游戏flappy bird作为具体实现目标,我们希望能够实现通过按键控制小鸟上升飞翔,产生随机高度开口的柱子让小鸟通过,并能够实现计分,根据计分的分数,通过不断增快小鸟下坠的速度和柱子运动的速度来增大难度,并在游戏结束后能够在屏幕上显示得分。在实现这些功能的过程中,我们学习了实验指导书上实验十:HDMI视频传输这一节的内容,理解了其中ip核的作用,和matlab生成.coe文件这段命令的含义,能够生成任意尺寸的.coe文件,不再局限于100x100像素的图片。同时,我们理解了实验十中图像显示或上色的模块。并且借鉴数码管的原理,通过case语句实现了类似的数字显示功能。在整个项目实验过程中,我们还写了其他许多的模块来完善功能,复习强化了Verilog语言语法,例如对随机函数$random%有了更深入的了解。我们期待我们的这个项目设计最终能够复现童年时代风靡的小霸王游戏机,能够内置很多游戏,并通过手柄来控制玩耍。

gihub链接:https://github.com/Cococopyer/FPGA_game

各个项目的视频介绍请点击PYNQ开源社区微信公众号查看

最新文章