您的位置:首页 > 其它

贪吃蛇(verilog)终于调试成功

2011-11-01 16:43 246 查看
       今天终于把贪吃蛇的VGA显示调通了,硬件显示蛇和吃食物是正确的,不过还有很多要改进的地方。比如随机产生的食物会和蛇身重叠,未加入碰壁后的GAME
OVER。这些后面改起来就简单了,自己是个懒人不想做了,呵呵。       杭州这地方做硬件的公司很少,做FPGA方面的就更少了,真怕自己以后找不到工作。想想在实验室也没啥项目,就自己瞎调调程序,以后项目拿不出手,说说自己做的小制作也不错。在网上看到有外国人用DE2做的贪吃蛇游戏,我就有了做个贪吃蛇游戏的想法,然后在网上找资料,发现资料还真不多。
       在黑金论坛里看到了有人做的贪吃蛇,发现没有注释,好几个文件,看起来太麻烦。索性自己想如何建模了。使用Modelsim软件仿真,不停的改,最后终于硬件实现了。
现在说说自己的建模思想吧。
      1、使用VGA 640X480图像大小,蛇使用16X16大小的图像块。把现实区域分成40X30的坐标系。我还加入了边框,这样现实区域为38X28。
      2、定义一个reg [12;0] Snake [0:31];寄存器组。这个就是我们要显示的蛇,最多显示32个长度。里面的每个寄存器的高6位存着蛇的X坐标,低6位存着蛇的Y坐标。我把初始蛇头设在Snake[32-Snake_Length],蛇初始长度Snake_Length为3。这样,只要我们右移这个寄存器组,就可以得到移动的蛇。
      3、产生一个蛇移动的时钟,在4个状态(蛇头左移、右移、上移、下移)将蛇头内的高6位或低6位数据进行+1或-1操作,然后寄存器组右移就对应蛇的移动了。
      4、随机食物显示则是定义了一个reg
[5:0] Food_High, Food_Low;(X,Y坐标)其高6位和低6位使用计数器在不同的时钟下计数(随机产生食物的X和Y坐标)。在四个状态下判断蛇吃到食物的话,Snake_Length+1而且reg
[11:0] Food={Food_Hignt,Food_Low};这样蛇吃到食物长长一节,而且产生新的食物。
      5、显示的时候则是显示到40X30坐标系下莫个点(16X16像素块)时,如果有Snake[i] 或是Food对应这个点就把{R,G,B}值赋为{3‘b100}显示蛇(红色)或是{3’b010}食物(绿色)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  游戏 工作