北邮打地鼠的游戏设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数电实验报告
题目:打地鼠的游戏设计与实现
姓名:
学号:
班级:
学院: 电子工程学院
2015年 11 月 8日
一、 任务要求
基本要求
1、设计一个挑战反应速度的“打地鼠”游戏,采用用 8×8双色点阵显示游戏界面,其中游戏边界采用绿色 LED 显示,随机出现的地鼠采用红色 LED 显示,游戏有 16个洞穴,如图 1所示。
2、游戏洞穴
每次随机出现一个地鼠,
每个地鼠的最长保持时间为 2 秒,2 秒后随机出现下一个地鼠。以 4×4键盘的按键代表锤子,16个洞穴与 16个按键一一对应,一旦锤子在 2秒内击中地鼠,地鼠消失,数码管计分器分数加 1分;若锤子一直没有击中地鼠,2秒后该地鼠消失。用两个数码管显示游戏成绩,当游戏成绩达到 10分时游戏结束,点阵显示字符“V”。 3、用两个数码管对整个游戏进行倒计时,当游戏时间超过 59秒而成绩未达到 10分时,游戏失败,点阵显示字符“X”。 4、按复位键重新开始游戏,并开始倒计时。 提高要求:
1、增加游戏难关,在边界内每次随机出现两个地鼠,两个地鼠的最长保持时间均为2秒,2
秒后随机出现下两个地鼠,锤子击中一个地
鼠加1分,当游戏成绩达到20分而且游戏时间未超过59秒时,游戏结束,显示字符“V”,否则显示字符“X”。
2、自拟其他功能。
二、系统设计
设计思路:
1、将该程序进行分模块设计。可以将程序分为:分频模块、随机数产生模块、比较模块、键盘电路、显示模块、计时模块、游戏结束模块。
2、分模块进行相应模块的编写。
3、对编好的模块进行测试。
4、编写主程序并进行调试。
总体框图:
分块设计:
1、分频模块
将50MHz的信号源分别分频为各难度所需频率的时钟信号。
2、随机数产生模块
本实验采用伪随机数产生方法,即在ROM中存入随机表中的数据,游戏开始后采用一个计数器不断从其中读取数据。
3、比较模块
判断选手得分或失分主要是由一个比较器完成的,将系统传给LED灯的信号与选手输入的信号作比较,相同则加分,否则扣分,这两个信号分别传给计分模块,从而完成系统判定得分的工作。
4、键盘电路
主要通过产生行扫描,来识别用户的按键,电路中已经对按键进行了消抖。其提供给控制器按键的编码。
5、显示模块
显示模块分为两部分,一为60s的倒计时,另一个为从0到10的记分模块,游戏开始时计时模块和比较模块分别将信号传递给显示模块,用来将BCD码转化为可以在七段数码管中显示的。
6、计时模块
在此模块中集合开始键,复位键。当复位键等于0,开始键等于1时,游戏开始。倒计时模块预置值为60,开始信号给出后,开始60s倒计时。
7、记分模块
计分模块接受来自比较模块的信号控制分数的加减,同时将当前的分数BCD码以电信号传递给显示模块显示分数,每一次加分时,判断当前分数是否超过10分,同时当前时间是否小于0。
8、游戏结束模块
接收来自计分模块的信号,判断是否结束,保存当前分数,时间通过显示模块显示。
三、仿真波形及波形分析:
一、随机数仿真波形
在等级为1的情况下产生0---16随机数,产生时间不定,根据当前数字,对应与点阵中的16个LED灯,同时点亮该点。
二、键盘输入(“锤子”仿真波形)
通过消抖,提高了键盘反应,当点阵数列和键盘相同时,判断为1,表示为加分信号
三、计时器
出始时刻设为60S, 通过频率为1Hz的时钟,每一次在时钟上升沿到来时,时间减一。
四、最高分保存模块
最高分保存模块和计分模块倒计时模块相连,当倒计时显示为0,分数小于10时保存,或者当分数等于10,倒计时小于60保存,其余情况下均输出0,该模块不工作。
五、比较计分模块波形
当计分信号显示为1时,分数u1加一,时钟频率为0.5Hz,在每一个时钟周期内为1,加一否则保持不变。
六、等级判断模块
四、源程序:
一、分频器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY fenpinqi IS
PORT(clk_f,clear_f: IN STD_LOGIC;
clk_f_out10k, clk_f_out100, clk_f_out1, clk_f_out1d2: OUT STD_LOGIC);
END fenpinqi;
ARCHITECTURE a OF fenpinqi IS
SIGNAL tmp1: INTEGER RANGE 0 TO 24999; --50000分频
SIGNAL tmp2: INTEGER RANGE 0 TO 4;
SIGNAL tmp3: INTEGER RANGE 0 TO 49; --100分频
SIGNAL tmp4: INTEGER RANGE 0 TO 99; --200分频
SIGNAL clktmp1: STD_LOGIC;
SIGNAL clktmp2: STD_LOGIC;
SIGNAL clktmp3: STD_LOGIC;
SIGNAL clktmp4: STD_LOGIC;
BEGIN
P1: PROCESS(clear_f, clk_f)
BEGIN
IF clear_f = '1' THEN
tmp1<=0;
ELSIF clk_f'event AND clk_f='1' THEN
IF tmp1=24999 THEN
tmp1<=0;
clktmp1<=not clktmp1; -- 50000fenpin
ELSE