【友晶科技】基于FPGA的贪吃蛇游戏设计(四)——VGA驱动模块色块显示

12 篇文章 1 订阅
12 篇文章 2 订阅

在实现VGA色块显示之前读者需要先了解VGA显示原理和ADV7123的控制,有了这些基础之后再去贪吃蛇游戏里面实现色块显示就非常简单了。

VGA显示原理及VGA驱动模块

请参考这篇文章:

【友晶科技】基于权电阻网络的VGA彩条显示(DE0-CV、DE10-Lite)-CSDN博客

AVD7123芯片的控制

请参考这篇文章:

【友晶科技】基于FPGA和ADV7123的VGA彩条显示(DE10-Standard、DE1-SOC、DE2-115)-CSDN博客

VGA像素坐标的生成

跟之前彩条显示不同的是,这个游戏要在VGA显示器不同的地方显示色块。为了方便定位色块位置,这里引入像素坐标。

像素坐标的生成很简单,这里以VGA扫描到该像素时的行周期计数值作为横坐标,场周期计数值作为纵坐标:

VGA显示器显示分数

在贪吃蛇游戏结束的时候,VGA显示器会显示当前累计的分数。如下图所示:

这个是怎么实现的呢?

其实就是将VGA显示器划分成几个区域,然后对某些区域输出对应的颜色。

这个游戏当中定义了蛇头,蛇身以及食物都用一个长宽各是16个像素的块(block)作为基本单元,蛇头占一个blcok,食物占一个block,蛇身是若干block组成。

为了方便计算,这里的VGA分数显示也用一个block作为基本单元。

假设要在VGA显示器上做出3个“数码管”显示的效果,每个“数码管”7个段,每个段是8个block长,2个block宽 。画出效果如下图:

如果要显示0,那就是“数码管”0、1、2、3、4、5段输出蓝色,第6段为背景色黑色。

这样划分以后,代码这样对应:

(下面是右边第一个数码管显示0的代码,也就是分数的个位数。十位数和百位数的显示以此类推。)

case (bcd_data[3:0])    //个位数
        4'd0:begin    //显示0
            if(pos_x[9:4] >= 26 && pos_x[9:4] < 34 && pos_y[9:4] >= 8 && pos_y[9:4] < 10)
                vga_rgb = 24'h80ffff;//第0段输出蓝色
            else if(pos_x[9:4] >= 26 && pos_x[9:4] < 34 && pos_y[9:4] >= 20 && pos_y[9:4] < 22)
                vga_rgb = 24'h80ffff;//第3段输出蓝色
            else if(pos_x[9:4] >= 26 && pos_x[9:4] < 28 && pos_y[9:4] >= 8 && pos_y[9:4] < 16)
                vga_rgb = 24'h80ffff;//第5段输出蓝色
            else if(pos_x[9:4] >= 32 && pos_x[9:4] < 34 && pos_y[9:4] >= 8 && pos_y[9:4] < 16)
                vga_rgb = 24'h80ffff;//第1段输出蓝色
            else if(pos_x[9:4] >= 26 && pos_x[9:4] < 28 && pos_y[9:4] >= 14 && pos_y[9:4] < 22)
                vga_rgb = 24'h80ffff;//第4段输出蓝色
            else if(pos_x[9:4] >= 32 && pos_x[9:4] < 34 && pos_y[9:4] >= 14 && pos_y[9:4] < 22)
                vga_rgb = 24'h80ffff;//第2段输出蓝色
            else 
                vga_rgb = 24'h000000;//否则输出黑色
        end

(pos_x,pos_y)是像素坐标,这里代码在判断的时候只取pos_y[9:4],为什么呢?

因为每个方块16*16(256)个像素,如果以方块的左上角像素坐标作为方块的坐标 :

那么每个方块坐标的pos_x[3:0]和pos_y[3:0]都为0,所以代码里面只需要看pos_x[9:4]和pos_y[9:4]。比如一整个VGA界面,第一个橙色方块的坐标pos_x[9:4]和pos_y[9:4]是[0,0], 第二个蓝色方块的坐标是[1,0],其他以此类推:

到此,VGA显示分数的色块功能就完成了,因为每个数码管要做到能显示0-9是个数字,代码比较多,在此就不贴源代码,感兴趣的下载工程查看。

贪吃蛇系列连载文章:

  ​
1. 基于FPGA的贪吃蛇游戏设计(一)

2. 基于FPGA的贪吃蛇游戏设计(二)——数码管驱动模块

3. 基于FPGA的贪吃蛇游戏设计(三)——计分模块

4. 基于FPGA的贪吃蛇游戏设计(四)——VGA驱动模块色块显示

5. 基于FPGA的贪吃蛇游戏设计(五)——VGA驱动模块字符显示

6. 基于FPGA的贪吃蛇游戏设计(六)——VGA驱动模块图片显示

7. 基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生

8. 基于FPGA的贪吃蛇游戏设计(八)——状态机设计

9. 基于FPGA的贪吃蛇游戏设计(九)——蛇身控制

关注“友晶Terasic”公众号可获取源码下载地址。

移植到DE1-SOC、DE2-115时代码无需改变,只需修改引脚分配即可。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值