北京邮电大学数字电路实验迷宫游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字电路综合实验报告
学院:信息与通信工程学院
班级:
班内序号:
姓名:
学号:
选作题目:简易迷宫游戏
一、课题的任务要求
1、基本要求:
1)用8×8点阵进行游戏显示。
2)迷宫游戏如下图所示,采用双色点阵显示,其中红色LED为迷宫墙壁,
绿色LED表示人物。通过BTN0~BTN3四个按键控制迷宫中的人物进
行上下左右移动,使人物从起始点出发,走到迷宫的出口,游戏结束。
3)普通计时模式:通过按键BTN7启动游戏,必须在30秒内找到出口,否
则游戏失败,用两个数码管进行倒计时显示。游戏胜利或者失败均要在
8×8点阵上有相应的画面出现。
4)迷宫中的人物在行走过程中,如果碰到墙壁,保持原地不动。
2、提高要求:
1)多种迷宫地图可以选择。
2)在计时的基础上增加计步的功能,每按一次控制按键步数加1,碰壁不计
算步数,计步结果用数码管显示。
3)为游戏增加提示音乐,在不同时间段采用不同频率的信号控制蜂鸣器发
声报警。
4)增加其他游戏模式。
5)自拟其它功能。
二、系统设计(包括设计思路、总体框图、分块设计)
1、整体设计思路:
通过分析迷宫游戏的特点,将迷宫游戏的实现分为三大核心功能模块,一是控制模块controller,是整个游戏的“枢纽”,负责处理玩家的输入信号,控制整个游戏阶段的跳转,游戏胜负的判断,以及输出相应显示模块的控制信号。二是计时兼数码管显示模块timer,负责倒计时以及倒计时的显示,游戏已走步数的显示,并产生蜂鸣器的控制信号。三是点阵显示模块lattice,通过接收控制模块的控制信号,控制不同游戏模式或状态下的点阵输出。其他次要模块主要为:分频模块,防抖模块,蜂鸣器驱动模块。
迷宫游戏的划分方框图如下:
图2.1 迷宫游戏的逻辑划分方框图
2、总体框图:
顶层连接图如下:
图2.2 系统顶层设计图
3、分块设计:
1)控制模块(controller)
通过分析控制模块的随着游戏进程的状态变化,可将控制器分为七个状态,分别是
①WaitMsg:待机状态,等待玩家BTN0(进入游戏)的输入,跳转至
ChoModes。
②ChoModes:选择游戏模式状态,等待玩家BTN0(模式1)或BTN1
(模式2)的输入,跳转至ChoLevel。
③ChoLevle:选择游戏难度状态,等待玩家BTN0(难度1)或BTN1
(难度2)的输入,跳转至ChoMaps。
④ChoMaps:选择游戏地图状态,等待玩家BTN0(地图1)、BTN1
(地图2)、BTN2(地图3)、BTN3(随机选择)其中之一的输入,
跳转至Moving。
⑤Moving:游戏状态,等待玩家BTN0(上)、BTN1(下)、BTN2(右)、
BTN3(左)其中之一的输入,通过判断游戏终止条件,如是否时间
到,步数用尽,或到达终点,来转移状态至Win,或Lose。
⑥Win:游戏胜利状态,玩家在规定时间与步数内到达终点,等待玩
家BTN7(复位键)的输入,跳转至WaitMsg。
⑦Lose:游戏失败状态,时间用尽或步数到达上线,等待玩家BTN7
(复位键)的输入,跳转至WaitMsg。
在任何状态下,只要收到BTN7(复位)的信号,状态都会转移到WaitMsg。
对应的逻辑流程图如下:
图2.3 迷宫游戏控制器逻辑流程图
图2.4 controller模块元件图
2)计时兼数码管显示模块(timer)
timer模块受到controller模块的控制,controller模块将传递游戏状态信号、计时控制信号、游戏难度信号以及已走步数信号给timer。timer 模块利用case选择语句对相应的控制信号做出相应。并利用视觉暂留效应,将时间与已走步数显示在数码管上。
图2.5 timer元件图
以下是控制数码管显示的代码,负责同时显示时间和已走步数:
IF cont_display =4 THEN –模为5的计数器,轮流显示5个数字
cont_display<=0;
ELSE
cont_display<= cont_display+1;
END IF;
CASE cont_display IS –通过选择计数器的状态,来显示相应的数字
WHEN 0 =>
con_nixietube<= "101111";nixietube<=nixietube1; --时间的个位
WHEN 1 =>
con_nixietube<= "011111";nixietube<=nixietube2;--时间的十位
WHEN 2 =>
con_nixietube<= "111110";nixietube<=nixietubex; --已走步数的个位
WHEN 3 =>
con_nixietube<= "111101";nixietube<=nixietubey;--已走步数的十位
WHEN 4 =>
con_nixietube<= "111011";nixietube<=nixietubez;--已走步数的百位
END CASE;
3)点阵显示模块(lattice)
Lattice模块同样也受到controller模块的控制,controller模块将传递游戏状态信号,游戏模式信号,游戏地图信号,根据不同的游戏阶段显示出不同的图案。其中迷雾模式的显示是一个小难点,首先通过判断y的值,给相邻两行赋上地图,其他置零,然后判断x的值给相邻两行中的部分元素置零,最后达到只显示坐标点周围一格内有地图的显示的效果。
图2.6 lattice模块元件图