数电实验报告-贪吃蛇-北邮

合集下载

北邮计算机实习贪吃蛇游戏编写报告

北邮计算机实习贪吃蛇游戏编写报告

北邮计算机实习贪吃蛇游戏编写报告计算机实习报告姓名:班级:学号:⼩班序号:指导⽼师:题⽬:贪吃蛇⼩游戏邮箱:贪吃蛇⼩游戏实验报告⼀.功能说明1.1总体功能说明该软件主要实现的是贪吃蛇的基本功能,达到简单的娱乐效果。

⾸先,完成的是贪吃蛇的移动和转弯,通过上下左右四个按键来实现蛇的移动和转弯。

其次还能实现蛇的吃⾷过程,游戏过程中会在游戏区域内随即产⽣⼀个⾷物,玩家通过控制蛇的移动使蛇的头部通过⾷物,则完成进⾷过程,⾷物消失,蛇的⾝体增长⼀截,并在此随机产⽣新的⾷物。

最后还可以完成蛇的死亡过程,即游戏结束的控制过程,如果蛇的头部碰到了墙壁或是⾃⼰的⾝体就会死亡,游戏结束。

此外还在游戏中加了⾳效,使得玩家玩游戏的过程中能够更加放松。

具有操作简单,易于控制,易学易玩的特点。

1.2⽤户界⾯本图为游戏的主界⾯,其中外⾯的⼀圈紫⾊“■”为边界,边界内连成⼀串的“■”是蛇的⾝体,“●”形状的图标即为⾷物。

该界⾯⽤于玩家与计算机的交流,使玩家能够通过图形界⾯来控制蛇的⾏为,进⽽实现游戏过程。

1.3使⽤⽅法分别使⽤“↑↓←→”四个按键来实现对蛇的上下左右的控制,随着蛇的长度的增加,虽然蛇移动的速度没有变化,但是由于空间⼤⼩有限,⽽蛇的长度在逐渐增加,故使得游戏的难度组建增⼤。

⼆.程序设计说明2.1 总体设计框架int main(){ 播放声⾳定义数组记录蛇的横纵坐标定义变量记录蛇的长度定义变量记录⾷物⽬标的位置定义变量判定游戏是否结束init(snakeLocation_x,snakeLocation_y,snakeLength); createObject(object_x,object_y); //初始化while(select为真){ switch(choice){case KEY_UP:do {将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_DOWN:{将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_RIGHT:{将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_LEFT:{将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_ESC :程序将会停⽌}}}2.2 关键算法描述算法1:voidinit(int* snakeLocation_x,int* snakeLocation_y,int&snakeLength)该算法的功能是⽤来进⾏初始化实现,实现游戏边界的设计、贪吃蛇⾝体的初始化、贪吃蛇⾝体长度的初始化、在⽆输⼊的情况下蛇的移动。

操作系统实验报告(贪吃蛇游戏)

操作系统实验报告(贪吃蛇游戏)

南通大学计算机科学与技术学院操作系统试验报告书试验题目贪吃蛇游戏专业班级XXXXXX学生姓名XXXXX指导教师XXXX日期2017年6月主要内容(一)设计内容:在Windows 9x/2000/XP/ME操作系统下,使用VC、VB、Java或C等编程语言,采用多道程序设计技术编写一个游戏软件或解决一个简单的实际问题,要求设计一个两道以上的程序,可以是固定的2道程序、也可以是灵活的多道模式。

设计的内容可以是下面任选其一:(1)用多道程序技术实现一个游戏程序。

如大炮打飞机、赛车比赛等。

(2)用多道程序技术模拟客观世界中一个多任务实际问题的解决。

(二)设计要求:(1)本程序可运行在Windows 9x/2000/XP/ME操作系统下,可安装到任意路径下。

(2)采用多进程或多线程方式运行,尽量体现进程间的同步和互斥关系。

(3)经调试后程序能够正常运行,并体现多道程序的特点。

(三)实验目的:1.掌握进程和线程的概念。

2.掌握进程控制原语或进程控制系统调用的使用3.掌握多道程序设计的基本理论、方法和技术。

4.掌握相关语言进程控制的API函数的使用。

5.培养学生多道程序设计的能力。

6.培养学生团队合作的能力。

(四)实验的选择:用多道程序技术实现一个游戏程序。

游戏:《贪吃蛇》实验思想:1.首先制作游戏的窗体布局。

其中包括窗体的大小,位置,添加按钮组件,在窗体上面划定游戏区域等。

2.为按钮添加监听器,为开始按钮,结束按钮,键盘,还有游戏结束的时候的确定按钮.3.单击开始按钮,看到的效果是在游戏区域里面看到一个随机产生的食物,和蛇体。

产生随见事物使用Random类,随机定位一个游戏区域里面的方块,然后使用Graphrics可以定位到这个方块的坐标图上颜色,这样就产生了肉眼可见的食物。

关于蛇体,我们将蛇体的每个方块添加到集合里面,使用的是List,为什么不用数组,原因是数组的长度总是有限的,你不知道蛇体里面最终存放多少方格,而且数组比较繁琐。

贪吃蛇编程实验报告

贪吃蛇编程实验报告

计算机实习报告:班级: 07班学号小班序号:11题目:贪吃蛇邮箱:小游戏“贪吃蛇”实验报告一.功能说明1.1总体功能说明贪吃蛇的小游戏,控制蛇来吃苹果;随着吃掉的苹果个数的增加分数会增加,但蛇身也会变长;如果蛇撞到墙壁或者自己的话就会死掉结束游戏。

1.2用户界面选择游戏等级,等级越高速度越快;游戏界面;死后选择是否继续游戏;1.3使用方法进入先选择游戏等级,1-9个等级对应的速度依次增大并且获得的分也依次增大。

通过上下左右控制蛇的运动方向,可选择1-9共9个等级,蛇会有不同的速度和分数递加。

死亡后按Y或N来继续或结束游戏二.程序设计说明2.1 总体设计框架2.2 关键算法描述1.蛇的运动算法:将蛇的前一节坐标赋给后一节,最后一节消去前一节。

textout(handle,x[lenth-1],y[lenth-1],wColors,1," ");for(int n=lenth-1;n>0;n--){x[n]=x[n-1];y[n]=y[n-1];}y[0]++;textout(handle,x[1],y[1],wColors,1,"●");textout(handle,x[0],y[0],wColors,1,"◆");2.蛇的死亡算法:即蛇头不与任何一个蛇身坐标相重合int right=0;for(int i=1;i<lenth;i++) //判断是否死掉right=(right||(x[i]==x[0]&&y[i]==y[0])); //若蛇头与任意一节不重合则right值为0;3.蛇头坐标不与边框重合即撞墙的判断。

4转弯算法:Int ch;ch=_getch();switch(ch){case 72:case 80:case 75:case 77:default:;2.3 程序设计的难点和关键点1.蛇的运动算法2.蛇不能反向运动3.音乐和音效的插入2.4 调试的方法1.采用坐标赋值运算,将前一个坐标的值赋给后一个,实现传递textout(handle,x[lenth-1],y[lenth-1],wColors,1," ");for(int n=lenth-1;n>0;n--){x[n]=x[n-1];y[n]=y[n-1];}y[0]++;textout(handle,x[1],y[1],wColors,1,"●");textout(handle,x[0],y[0],wColors,1,"◆");2.加入俩次判断:每次用一个临时变量来记录之前的按键再用SWITCH语句来判断是否方向相反。

VHDL 贪吃蛇游戏实验报告

VHDL 贪吃蛇游戏实验报告

1 / 22贪吃蛇游戏摘要:本实验以设计贪吃蛇游戏为课题。

最终结果是以8*8点阵作为本游戏的显示界面,通过按键BTN1,BTN2,BTN3,BTN4分别控制蛇的运动方向,分别为“上下左右”。

蛇的长度为六个点阵,另外以一点表示老鼠,当蛇头吃到老鼠时,老鼠则在点阵上改变位置,也就是说通过一个伪随机函数在点阵上产生老鼠的位置,每当蛇头吃到老鼠时,就自动加一分,并在数码管显示。

每隔五分钟,在蛇没有吃到老鼠的前提下,老鼠就自动在点阵上改变位置,这样就增加了游戏的趣味性和难度性。

关键字:8*8点阵,贪吃蛇,数码管,EPM7128SLC8—15数电实验开发板课题设计任务及要求:简要说明:用一个8×8 点阵作为基本显示屏,六个连续移动的的发光点表示一条蛇,用任意出现的一个亮点表示老鼠,用4 个排成一条线的发光点表示“墙”,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,则游戏结束。

1. 老鼠出现的地方是随机的,在某个地点出现的时间是5 秒钟,如果5 秒钟之内没有被吃掉,它就会在其它地方出现;2. 用数码管显示得分情况和游戏的剩余时间,每吃掉一只老鼠就加一分;3. 游戏时间和速度可以手动设置。

4. 选做:增加游戏难度或自拟其它功能。

设计思路:当开启电源时,初始化EPM7128SLC8—15数电实验开发板。

8*8点阵也初始化,每来一个时钟脉冲就对8*8点阵进行一次扫描,并依次点亮六个蛇身和一个老鼠所对应的点,由于扫描频率是1MHz (远远超出人眼所能分辨的范围),故人眼看来蛇身是连续的。

用BTN1,BTN2,BTN3,BTN4键分别控制蛇的运动方向“上下左右”,每次按键时通过和蛇原来的运动方向进行比较来控制蛇接下来的运动方向。

在七段数码管上显示得分情况,每当蛇吃到一个老鼠时则自动加一分,并在数码管上显示出当前得分。

设置一个控件SW1来对得分进行复位,即每当SW1有效时,则得分清零。

嵌入式课设实验报告——贪吃蛇

嵌入式课设实验报告——贪吃蛇

题目:贪吃蛇游戏设计专业:电子信息工程班级:姓名:、成绩:导师签字:年月日任务书题目:贪吃蛇游戏设计参数:供电电源电压3.3V矩形墙壁的位置坐标(20,20)(200,200)蛇的初始位置坐标(40,20)(30,20)(20,20)蛇的每一节为边长为10的矩形要求:利用嵌入式开发系统设计一个贪吃蛇的小游戏。

开始显示为初始界面,然后开始进行游戏。

游戏开始出现3节的蛇,一个食物,右边显示得分。

当进入游戏后,蛇自动向右前行。

通过按键上下左右来控制蛇前行的方向,当蛇吃到食物后,得分加100分,蛇身体变长一节。

当蛇在游行过程中撞到墙壁或者自身则游戏结束。

日程安排:6月30日:选择课设题目、查阅资料、完成第一步。

7月1、2日:完成方案设计。

即提出设计思路与软硬件的设计方案。

7月3、4日:学习硬件原理7月7、8、9日:根据软件设计方案做软件。

7月10日:测试7月11日:完成论文目录第一章课题研究······························· 1.1研究目的······································ 1.2研究背景······································ 1.3主要研究内容··································第二章设计思路及方案设计····················· 2.1设计思路······································ 2.1.1实现功能································· 2.1.2各功能的实现方法························· 2.1.3硬件说明································· 2.1.4软件说明································· 2.2硬件设计······································ 2.3软件设计······································第三章硬件设计······························· 3.1处理器最小系统································ 3.2硬件基本电路··································3.2.1按键····································· 3.2.2 LCD····································· 3.2.3 USB接口与电源···························第四章软件设计·······························第五章调试与测试·····························5.1调试··········································5.2测试··········································第六章结论···································参考文献······································第一章课题研究1.1研究目的为了巩固所学嵌入式系统的基础知识,加强实际应用和动手实践能力,开始为期2周的课程设计。

北京邮电大学小学期贪食蛇计算机实习报告

北京邮电大学小学期贪食蛇计算机实习报告

计算机实习报告姓名:班级:学号:小班序号:指导老师:夏海轮题目:贪吃蛇游戏邮箱:贪吃蛇游戏实验报告一.功能说明1.1总体功能说明贪吃蛇游戏主要实现的功能是蛇的移动,转向。

产生水果,吃水果增加蛇身的长度。

撞到自己,墙壁,障碍死亡,另外还有暂停,音乐和排除错误按键干扰等功能。

1.2用户界面一、游戏的主界面:进入游戏首先进入游戏的主界面。

上面有游戏说明,然后会有1,2,3三个选项。

分别用于选择游戏的难度。

按其他键默认选择容易级别。

二、游戏界面:游戏界面下方会及时显示游戏难度、得分和吃水果数。

三、死亡界面:此界面给出重新玩游戏或者结束游戏的选择。

1.3使用方法控制游戏的按键为:上:↑下:↓左:←右:→按空格键暂停,然后按空格键开始。

在游戏过程中按其他键无效。

游戏有三种等级可以选。

易,中,难。

区别是蛇的移动速度的不同。

二.程序设计说明2.1 总体设计框架游戏开始界面选择难度易中难游戏界面选择重新开始死亡游戏结束,退出与增长产生置是否正确移动产生水果2.2 关键算法描述算法:算法输入参数和输出参数,算法功能,使用什么存储结构,在主程序中起什么作用,可以使用框图或伪代码表示。

算法1:if(ch1==224)//按了方向键{int ch2=_getch();//从缓冲区再获得一个字符if (ch2==72)//向上{if(coordinate[(hx-2)/2][hy]==2)//不能反向地走,忽略,继续自动走{Automatic( );//使用自动移动的函数}else{coordinate[(hx-2)/2][hy]=1;//留下移动方向的标记,让身体能够跟上蛇头的轨迹hy=hy-1;//蛇头高度减一//判断有没有撞墙if(coordinate[(hx-2)/2][hy]>0)// 撞到了自身或者栅栏{textout(handle,35,17,head,1, " Game Over!");//输出break;}else if(coordinate[(hx-2)/2][hy]<0)//吃到水果{marks=marks+600/speed;//加分fs=0;//标志重置tailFlag = false;/***/coordinate[(hx-2)/2][hy]=1;//留下标记textout(handle,hx,hy,head,1, "■");//输出fruiteat(handle);//使用吃到水果后的函数}else if(coordinate[(hx-2)/2][hy]==0)//走到空地上{coordinate[(hx-2)/2][hy]=1;//留下标记textout(handle,hx,hy,head,1, "■");//输出}}}实现的是按键之后的变化。

计算机实习报告(贪吃蛇游戏编程)

计算机实习报告(贪吃蛇游戏编程)

计算机实习报告题目:贪吃蛇实验报告邮箱:yych2009@贪吃蛇实验报告一.功能说明1.1总体功能说明游戏分单人和双人两种。

单人游戏中有一条小蛇,不停地在屏幕上游走,“吃”掉界面上随即出现的果子,每吃一个果子,蛇的身体长度就增长一个单位。

当吃下的果子积累到一定程度时,蛇的运动速度会相应地增加,等级也提高了。

随着蛇的长度的增长,游戏界面会出现随机产生的毒刺“★”,毒刺固定不动。

只要蛇头碰到屏幕四周,或者碰到自己的身子,或者碰到毒刺,活着小蛇就立即毙命,游戏结束。

在双人游戏中,有两条蛇头分别为红色和黄色的小蛇,争吃果子,比比谁吃的果子多。

只要任意一条蛇的蛇头碰到屏幕四周,或者碰到自己的身子(碰到对方的身体没关系),或者任一条蛇碰到毒刺,游戏就会结束。

该游戏的特色是:一、添加了障碍“毒刺”,同时增加游戏等级这一项,让蛇的运动速度随分数的增加而适当增加,相比传统的贪吃蛇游戏增加了难度;二、增加双人游戏,使其具有竞赛性,让玩家在与他人竞赛中获得乐趣。

三、游戏的背景画面更为细腻。

1.2用户界面游戏开始和退出菜单选择单人、双人游戏的菜单1.3使用方法在单人游戏中,用小写的w、s、a、d四个按键分别控制蛇头上下左右四个方向的转向。

双人游戏中,w、s、a、d按键控制红蛇的方向,上下左右四个方向键控制黄蛇的方向。

二.程序设计说明2.1 总体设计框架[包括程序执行流程,模块划分等,需要有文字说明和框图表示]2.2 关键算法描述算法1:[算法输入参数和输出参数,算法功能,使用什么存储结构,在主程序中起什么作用,可以使用框图或伪代码表示。

算法1:蛇身运动函数算法1:if(snake.direct[0]==97){textout(handle,--(--snake.s_x[0]),snake.s_y[0],wColors+10,1,"◆");Sleep(speed);PRODUCT_FRUIT(snake.s_x,snake.s_y,&snake.length,&fruit.f_x,&fruit.f_ y,wColors,handle);MOVE(snake.s_x,snake.s_y,snake.length,wColors+2,handle);这是蛇的运动算法,以单人游戏中的向上运动为例。

贪吃蛇游戏课程设计实验报告

贪吃蛇游戏课程设计实验报告

辽宁科技大学课程设计说明书设计题目:基于C#的贪吃蛇游戏学院、系:装备制造学院专业班级:计算机科学与技术学生姓名:叶佳佳指导教师:丁宁成绩:2015年12月12日目录一、概述 (1)1、用C#实现该设计的方法 (1)2、贪吃蛇游戏说明 (1)二、实验目的及设计要求 (1)1、实验目的 (1)2、实验要求 (2)三、课程设计具体实现 (2)1、概要设计 (2)1.1、设计思想 (2)1.2、主模块实现 (2)1.3、主函数流程图 (4)2、详细设计 (5)2.1、设计思想 (5)2.2、具体模块实现: (5)四、调试过程及运行结果 (10)1、调试过程 (10)2、实验结果 (11)五、实验心得 (12)六、参考资料 (13)七、附录:源代码 (13)一、概述1、用C#实现该设计的方法首先应该了解设计要求,然后按照功能设计出实际模块,每个模块都要完成特定的功能,要实现模块间的高内聚,低耦合。

设计模块是一个相当重要的环节,模块的数量不宜太多,也不宜太少,要是每个模块都能比较简单的转换成流程图。

模块设计完成后,就该给每个模块绘制流程图。

流程图要尽可能的简单且容易理解,多使用中文,补一些过长的代码,增加理解难度。

此外,流程图应容易转换成代码。

根据流程图编写好代码后在WindowsXP操作系统,2008开发环境下进行运行测试,检查错误,最终设计出可行的程序。

2、贪吃蛇游戏说明游戏操作要尽可能的简单,界面要尽可能的美观。

编写程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己的身体),则游戏结束。

游戏结束时输出相应得分。

具体要求有以下几点:(1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;(2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面;(3)说明书、流程图要清楚;二、实验目的及设计要求1、实验目的.NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对VC#.NET技术的理解和掌握;提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质;培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新月异的发展形势;本次课程设计是以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,做出设计报告。

贪吃蛇游戏设计报告

贪吃蛇游戏设计报告

贪吃蛇游戏设计班级:13级7班学号:姓名:一、实验目的1.熟练掌握 C6713 的中断结构和对中断的处理过程。

2.熟练掌握 C6713 定时器的控制和使用方法。

3.熟练掌握键盘的使用原理及编程方法。

4.熟练掌握使用C6713DSP的扩展空间控制外围设备信息的方法;掌握蜂鸣器发声原理和音乐发生方法;掌握液晶显示器的显示控制原理及编程方法。

5.掌握C6713的系统自启动设计方法。

6.熟练掌握C语言开发DSP程序的流程及调试方法。

二、实验设备计算机,ICETEK-C6713-EDU 实验箱,示波器。

三、实验内容(*号为选做内容)1、在液晶屏上显示游戏背景、初始蛇身及运动、随机产生食物。

2、可以用键盘控制蛇身运动、暂停游戏。

3、游戏烧写到FLASH内,可以上电自启动运行。

四、设计原理贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个按键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体叉蛇头撞倒自己身体游戏结束。

要想实现贪吃蛇功能,需要应用到键盘,按键中断,和液晶显示。

想要正常使用按键,就要调用包含于有文件"ICETEK-C6713-A.h"中的init_emif();和 InitCTR();程序用来初始化emif和ICETEK-CTR。

中断原理:dsp有三种类型的中断cpu的TMS320C6000:重置、可屏蔽的、不可屏敝的复位中断优先级最高,对应于复位信号。

不可屏蔽中断优先级最高,对应于第二敝中断信号。

最低优先级中断中断4−15对应INT4−INT15信号。

重置,敝中断,一些INT4−INT15信号映射到C6000设备上的别针。

一些INT4−INT15中断信号是内部使用的外设和一些可能不可用或在软件的控制下可以使用。

外中断区别于计时器等片内设备中断,它来源于 DSP 片外,属于硬件中断。

贪吃蛇实验报告实验心得(3篇)

贪吃蛇实验报告实验心得(3篇)

第1篇一、实验背景随着科技的不断发展,计算机编程已成为现代教育的重要组成部分。

贪吃蛇游戏作为一款经典的编程学习项目,不仅能够帮助学生掌握编程基础,还能提高学生的逻辑思维能力和编程实践能力。

本次实验,我选择了使用C语言编写贪吃蛇游戏,通过实验过程,我收获颇丰。

二、实验目的1. 熟悉C语言编程环境,掌握基本的语法和编程技巧。

2. 学习并应用数组和结构体等数据结构,提高编程能力。

3. 理解并实现贪吃蛇游戏的算法,提高逻辑思维能力。

4. 掌握游戏开发的基本流程,提高编程实践能力。

三、实验过程1. 需求分析:在实验开始前,我首先对贪吃蛇游戏进行了需求分析,明确了游戏的基本规则和功能。

游戏规则包括:蛇的移动、食物的生成、蛇的吃食、蛇的生长、游戏结束等。

2. 设计思路:根据需求分析,我制定了以下设计思路:- 使用二维数组表示游戏界面,数组中的每个元素代表一个格子,蛇、食物、墙壁等都在数组中用特定的值表示。

- 使用结构体表示蛇的各个部分,包括蛇头的位置、方向、长度等。

- 通过键盘输入控制蛇的移动方向。

- 使用循环和条件语句实现蛇的移动、食物的生成、蛇的吃食、蛇的生长等功能。

- 判断游戏结束的条件,如蛇头撞墙、撞到自己等。

3. 编程实现:在确定了设计思路后,我开始编写代码。

首先,我定义了二维数组表示游戏界面,并初始化蛇和食物的位置。

然后,编写了蛇的移动、食物的生成、蛇的吃食、蛇的生长等功能。

最后,编写了游戏结束的判断条件。

4. 调试与优化:在编程过程中,我遇到了一些问题,如数组越界、蛇头移动方向错误等。

通过查阅资料和调试,我逐步解决了这些问题。

在实验过程中,我还对代码进行了优化,提高了程序的运行效率。

四、实验心得1. 编程基础的重要性:通过本次实验,我深刻体会到编程基础的重要性。

只有掌握了基本的语法和编程技巧,才能在编程过程中游刃有余。

2. 逻辑思维能力:在编写贪吃蛇游戏的过程中,我需要不断思考如何实现游戏的各个功能,这锻炼了我的逻辑思维能力。

北邮数电实验报告

北邮数电实验报告

数字电路与逻辑设计实验报告一、要求要求:设计制作一个简易计算器,实现最大输入两位十进制数字的加减乘运算。

基本要求:1、实现最大输入两位十进制数字的加减乘运算;八个拨码开关按两位8421bcd码输入。

2、能够实现多次连算(无优先级,从左到右计算结果),如12+34×56-78=2498。

3、最大长度以数码管最大个数为限,溢出报警。

提高要求:1、有正负数区分。

2、实现除法(不能整除时小数保留2位有效数字)。

3、其它扩展功能。

二、系统设计:设计思路:1、将该程序进行分模块设计。

可以将程序分为:主程序、译码模块和防抖模块。

其中,主程序负责将输入的数据进行存储,对数据进行运算,将数据输出到数码上等;防抖模块负责对按键输入的数防抖;译码模块负责对输入的数据进行译码(由8421bcd码转化为十进制的编码)。

2、分模块进行相应模块的编写。

3、对编好的模块进行测试。

4、编写主程序并进行调试。

总体框图:流程图:分块设计:(按实际操作的分块)输入模块:由符号开关和拨码开关构成。

采用序列存储的方式存储相应的输入。

输入译码模块:将输入的符号序列转化成先用状态,以便选取对应的计算方法;将输入的8421bcd码转化成相应的两位十进制数。

数码显示模块:将寄存器内的数进行输出到数码管上。

显示所输入的第一个数以及最后的结果。

计算模块:调用相应的计算方式,对所输入的数进行计算。

防抖模块:在用按键输入时,所得到的信号可能会有抖动,因此加入此抖动电路。

三、仿真波形及波形分析:分析(波形仿真时,为了方便观察,将8421bcd码输入方式,该为了十进制的直接输入方式,并将输出,有原来的数码管显示改成了直接数字显示)由图中可以看出,当输入12 ,按下“确定”,数字就输入到了寄存器中,输入“+”号(对应仿真中的fuhao“100000”),在输入一个数35,按下“确定”,该计算器就件寄存器中的数与第二次输入的数进行相加,得到结果47。

此时该结果又被直接保存到了寄存器中,继续输入运算符“-”(对应仿真中得fuhao“010000”),输入第三个数18,按下“确定”,计算器对其做减法运算,得到结果29,该结果又在寄存器中存储着。

(完整word版)贪吃蛇实验报告

(完整word版)贪吃蛇实验报告

《计算机程序设计》课程设计报告课题名称贪吃蛇游戏_____________ 班级_________________学号__________________姓名______________指导教师 ______________设计时间 _________ 至_______设计地点 __________________常熟理工学院计算机科学与工程学院常熟理工学院计算机科学与工程学院目录1需求分析 (1)2系统分析和设计 (1)2.1数据结构的设计和选择的理由 (1)2.2系统模块划分和模块结构 (2)2.3流程图 (2)2.4数据类型、全局变量和函数说明 (3)3程序测试和运行结果 (4)4课程报告小结 (5)4.1分数重叠显示 (5)4.2速度太快 (5)4.3食物可能出现在蛇身上 (5)附录A :程序源代码 (6)« C程序设计》课程设计1需求分析【阐述课程设计应该完成的功能】使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。

2系统分析和设计2.1数据结构的设计和选择的理由本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。

2.1.1从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。

为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。

下面以数组方式为例:struct Point {int x, y;}struct Poi nt n odes[MAX_LENGTH]; // 蛇身数组,MAX_LENGTH 为最大蛇长贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点:1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用int direction;表示)2. 运动时,蛇身后面一节移动到前面一节的位置。

当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处…。

数电综合实验报告-贪吃蛇

数电综合实验报告-贪吃蛇

北 京 邮 电 大 学数电综合实验报告实验名称:简易贪吃蛇游戏机学姓 班 学院:名: 级:号:信息与通信工程班内序号:一.设计课题的任务要求用一个8×8点阵作为基本显示屏,4个连续移动的的发光点表示一条蛇,用任意出现的一个亮点表示老鼠,用4个排成一条线的发光点表示“墙”,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,则游戏结束。

(1). 老鼠出现的地方是随机的,在某个地点出现的时间是5秒钟,如果5秒钟之内没有被吃掉,它就会在其它地方随机出现;(2). 用数码管显示得分情况和游戏的剩余时间,每吃掉一只老鼠就加一分。

二.系统设计1.设计思路采取模块化的设计思想,主要分为控制和显示模块,控制模块主要针对各种控制信号进行控制处理,比如蛇的移动,倒计时,方向控制等,而进行控制时,控制图形的变化的信号有很多,有外部按键输入,内部时钟驱动,判断的状态也比较多,蛇的位置,老鼠的位置,墙的位置等,在设计过程中将操作“串行化”,即利用高速时钟将判断和操作过程分为多个周期完成,简化设计。

而显示模块主要完成鼠,蛇,墙以及分数,剩余时间的显示,而此模块要独立于显示内容,其内容与控制模块进行修改,这样使两个模块可以独立地进行工作,具有很好的扩展性和实现性。

2.总体框图(1)系统机构图(2)逻辑流程图流程图:否5 秒时 间到Start/pause 是否按下是否是60 秒时 间到否是按下一次再次按下是吃鼠撞墙是撞边是撞蛇是否否否计时、计分开始,墙初始化鼠初始化位置并显示蛇身移动鼠位置重置上 下 左 右蛇初始化位置并显示否分数增加 长度增加等待按键ResetStart/pauseMDS 图:WaitstartChange key downdirectionEating mouseMovingtimeouNew mouseTimeoutReset downMoving into SnakeRestartMoving into boundary(3)功能模块图:CP显示存储器控制器 方向控制模块计时器计分器分频器点阵显示Start/pause 控制模块Reset 控制 模块3.模块设计(1)分频模块:由于实验板上的时钟频率为50MHZ,相对于电路延时时间来说,频率太高,故需要分频将频率降低来适应器件的反应时间要求;同时用来扫描点阵和数码管的频率与用来控制的时钟信号频率是不同的,相对而言用来扫描显示的频率要相对低一些,用来扫描按键和控制的时钟频率要低一些,所以此处将50MHZ 的频率分为1MHZ和2KHZ,1MHZ的频率用来扫描按键和进行信号控制,2KHZ用于扫描显示,在控制模块中,又进行了二次分频,用来控制蛇的移动,鼠步的减少,倒计时时间等,不选择直接在分频模块中将所有的所需时钟频率全部分出的原因是在不同的进程中可能会对同一控制信号进行修改,所以这样就会出现多重驱动的问题,然而在进程内部进行二次分频就可以避免出现这种情况。

贪吃蛇实验报告

贪吃蛇实验报告

黄淮学院嵌入式系统课程设计报告学院:信息工程学院班级:计科1301B学号:1334110124姓名:张硕时间:12.28.2015目录1 项目概述 (1)1.1 引言 (1)1.1.1开发背景 (1)1.1.2开发目的及意义 (1)1.1.3 开发平台的搭建 (1)1.2 功能简述 (1)1.3 进度安排 (3)1.4 风险预估 (3)2 系统分析与设计 (4)3 系统实现 (6)4 总结与展望 (10)5 参考文献 (10)1 项目概述1.1 引言1.1.1开发背景Android 一词的本义指“机器人”,同时Android 也是Google 于2007年11月5日宣布的基于linux 平台开源手机操作系统名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。

2008年9月22日,美国运营商T-Mobile USA 在纽约正式发布第一款基于Android 的手机——T-Mobile G1。

该款手机为宏达电制造,是世界上第一部使用Android 操作系统的手机,支持WCDMA/HSPA 网络,理论下载速率7.2Mbps ,并支持 Wi-Fi 。

在随后的几个月越来越多的厂商也开始宣布将提供Android 手机。

1.1.2开发目的及意义本课程的课程设计实际是重在提升学生对程序的理解力和游戏界面的设计能力,进行的一次全面的综合训练,其目的在于加深动手能力以及对游戏设计思想的理解,掌握运用Java 开发应用程序的基本方法及基本技巧。

1.1.3 Android 开发平台的搭建(一)1、下载并安装JDK 组件,注意分辨所要安装的计算机操作位数。

本次使用的是Windows7 64位操作系统,下载地址:/technetwork/java/javase/downloads/index.html般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等。

贪吃蛇游戏实验报告

贪吃蛇游戏实验报告
1.2 用户界面 [关键游戏界面,并且要说明该界面完成的功能,不用把所有界面都显示出来] 游戏开始界面:选择游戏的难度
游戏过程界面:进行游戏
2008 年 8 月 22 日 2
2008 年计算机实习报告
游戏结束界面:选择是否重新游戏
1.3 使用方法 [比如:可以是什么键控制游戏?是否可以划分那难度?游戏是否可配置,界面风格是 否可选等等] 用方向键控制蛇的移动,输入 1,2,3,选择难度,游戏中按除方向键其他键暂停,结束 界面 y 重新游戏,n 退出游戏
一个元素取代前一个位置,蛇头向前移动一,如有按键,则跳出内循环,根据按键寻则蛇的 运动
伪代码: while 循环 检测是否有按键,若有,进入相应循环 休眠 原来蛇位置变为空白 蛇身数组后一个元素取代前一个元素位置 根据按键改变蛇头位置 显示蛇身 若有按键,跳出内循环
算法 2:水果的产生 使用结构表示水果,当水果被蛇吃掉后,随机产生一个水果 伪代码:if 蛇头位置与水果位置重合
While 循环 随机产生水果的坐标 If 坐标在框图内 { If 水果坐标不与蛇每一个坐标重合 跳出循环 } 算法 3:判断蛇的死亡 While a=0 For 取遍蛇身每一个元素 { If 蛇头出了框图或蛇头与蛇身重合 a=1 }(a=1 则循环停止) 2.3 程序设计的难点和关键点 :1 随机产生水果的位置,要保证水果在框图内且水果与蛇身不重和, 2,判断蛇的死亡 3,控制蛇的颜色变换 4,对于分数的储存和导入 2.4 调试的方法
2008 年 8 月 22 日 3
2008 年计算机实习报告
二.程序设计说明
2.1 总体设计框架 [包括程序执行流程,模块划分等,需要有文字说明和框图表示] 开始
界面 界面
选择难度

贪吃蛇游戏实验报告

贪吃蛇游戏实验报告

*****************实验报告实验名称: 网络编程基础实训教程(贪吃蛇)指导教师:姓名:学号:班级:提交日期:1.实验目的通过开发一款贪吃蛇游戏程序, 熟练掌握C#编程语言、和面向对象程序设计方法, 独立完成一个游戏程序的开发。

2.实验题目使用C#编程语言, 开发一款贪吃蛇游戏, 如下图所示。

3.功能描述a)游戏场地是一片矩形区域的草坪。

b)一条蛇由蛇头和蛇身组成。

c)当游戏开始之后, 草坪中出现一颗豆和一条蛇, 并且蛇不停地移动, 蛇移动方向与蛇头一致。

d)当游戏暂停之后, 蛇停止移动。

e)当蛇移动时, 玩家使用“↑”、“↓”、“←”和“→”四个键控制蛇的移动方向。

f)当蛇头与豆的位置重合时, 豆被蛇吃掉, 同时在草坪中再生成一颗新的豆, 蛇身增加一节。

当蛇头碰到蛇身时, 则咬断蛇身, 后半部分的蛇身消失。

当蛇头碰到草坪四周时, 蛇立即毙命, 游戏结束。

4.需求分析根据功能描述可知, 贪吃蛇游戏的系统结构图如下所示。

1)定义数据字典如下:2)草坪(Lawn): 草坪是贪吃蛇游戏的场地。

豆和蛇只能存在于草坪范围之内。

草坪具有大小和颜色等属性。

蛇(Snake):在贪吃蛇游戏中, 蛇由若干节组成, 其中第一节是蛇头, 其余是蛇身。

在游戏过程中, 有且仅有一条蛇, 并且蛇在不停地移动。

如果蛇吃了豆, 则蛇生长一节。

如果蛇头碰到蛇身, 则咬断蛇身, 后半部分的蛇身消失。

如果蛇头离开草坪, 则蛇死亡游戏结束。

蛇具有长度、颜色、运动方向、每一节的位置等属性。

豆(Bean):在贪吃蛇游戏中, 豆是蛇的食物。

在游戏过程中, 有且仅有一颗豆。

如果蛇吃了豆, 则重新生成一颗豆。

豆具有位置、大小和颜色等属性。

5.设计说明根据需求分析可知, Snake的每一节都有位置和大小等属性。

而Bean也具有这两个属性。

抽象出二者的共同特征, 抽象出一般类Block, 用于描述一个块。

Block派生出Bean和SnakeBlock两个类, 其中SnakeBlock类用于描述蛇的一节。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 / 13简易贪食蛇游戏机学院:信息与通信工程专业:班级:姓名:学号:班内序号:简易贪食蛇游戏机一.设计课题的任务要求基本任务:用一个 8×8 点阵做为基本显示屏,4 个连续移动的的发光点表示一条蛇,用任意出现的一个亮点表示老鼠,用4 个排成一条线的发光点表示“墙”,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,则游戏结束。

1. 老鼠出现的地方是随机的,在某个地点出现的时间是5 秒钟,如果5 秒钟之内没有被吃掉,它就会在其它地方出现;2. 用数码管显示得分情况和游戏的剩余时间,每吃掉一只老鼠就加一分;提高要求:1. 游戏时间和速度可以手动设置。

2. 增加游戏难度或自拟其它功能。

二.系统设计1.设计思路当复位键置为1时, 8*8点阵也初始化为全不亮,每来一个时钟脉冲就对8*8点阵进行一次扫描,并依次点亮四个蛇身点、一个老鼠点、四个墙点,由于扫描频率远远超出人眼所能分辨的范围,故人眼看来蛇身是连续的。

在数码管上显示得分与倒计时情况。

用四个按键分别控制蛇的运动方向“上下左右”,每次按键时通过和蛇原来的运动方向进行比较来控制蛇接下来的运动方向。

当蛇撞墙、出界、游戏时间到时游戏结束,点阵全亮。

每当蛇吃到一个老鼠时则自动加一分并重设老鼠位置。

老鼠存活5秒钟时重设老鼠位置。

用M序列发生器实现老鼠位置的随机变化。

2.总体框架图:复位开关方向输入按键3.逻辑划分框图4.6.分块电路设计⑴点阵显示模块此模块采用频率为1Mhz的时钟clk3。

每来一个时钟就对整个8*8点阵全部扫描一次,当某个点的行为低电平,列为高电平时被点亮。

由于蛇身有4个移动的点,墙有4个固定的点以及一个老鼠的亮点,那么一共有9个点需要在8*8点阵上显示。

所以我将时钟用point分成9个周期,每个周期扫描一个点。

clk3频率很高,虽然是逐点扫描,但由于视觉暂留我们看到的是9个点同时亮。

当复位信号clear置为1时,点阵全不亮。

当结束信号over置为1时,点阵全亮。

⑵数码管显示模块当一个数码管要稳定显示需要频率不小于50hz,总共4个数码管,需要采用500hz 的时钟clk2.用cat信号对数码管进行片选,用seven信号储存7个管脚的电平。

共有4个数字需要显示,用数组shownum储存分数与游戏时间。

用state变量将时钟clk2分成4个周期,每个周期显示state对应的shounum(state)。

复位信号clear置为1时,数码管全不亮。

⑶控制器倒记时和老鼠5秒换位置要分频出1赫兹的一个clk1。

并且1赫兹的频率十分适合蛇的移动,所以我将clk1信号作为了蛇移动的触发信号。

复位信号clear=1将蛇的位置、方向、老鼠位置、墙的位置、游戏时间、分数等初始化。

①蛇身的移动。

用4个点表示蛇,从蛇尾开始,依次等于前一个蛇身点坐标。

②蛇头的移动按照状态转移图编写程序。

实际编写时我将对出界情况的判断加了进去。

给定dir时,若出界,游戏结束。

若否,当蛇头方向direction不和输入值dir正好相反时,蛇头步进,将dir的值赋给蛇头当前方向direction;当蛇头方向direction和输入值dir正好相反时,若蛇头出界,游戏结束,若不出界,蛇头按照原来的direction方向步进。

③重设老鼠位置设置一个重设老鼠标志setrat。

当老鼠存活时间满5s或蛇吃到老鼠时,将setrat标志置为1,否则为0.当setrat=1时,用M序列发生器随机重设老鼠位置。

当重设后的老鼠和墙的位置重合时,修改老鼠位置。

⑷分频器和外界输入方向寄存器EPM1270T144C5数电实验开发板的时钟clk频率为50Mhz。

控制器需要一个频率为1hz的时钟clk1,数码管显示需要一个频率为500hz的时钟clk2,点阵显示需要一个频率为1Mhz的时钟clk3.由于游戏结束时只有数码管需要保持显示结束时的时间和分数,所以当over置为1时,clk1和clk3的分频器停止,只有clk2的分频器继续工作。

外界输入的方向用key表示,key值为“1000”、“0100”、“0010”、“0001”时分别表示上、下、左、右。

将输入的方向值赋给dir。

dir设置为两位二进制变量:“00”表示“上”,“01”表示“下”,“10”表示“左”,“11”表示“右”。

三.仿真波形及波形分析为方便仿真,将时钟clk改为1Mhz,将clk3改为100khz,将点阵显示、数码管显示的时钟频率都改为clk,将控制模块显示的时钟改为clk3。

1.点阵显示仿真:如图所示,当clear=1时,点阵的行都为高电平,列都为低电平,点阵全不亮。

从clear 置为0后clk的第一个上升沿开始,点阵扫描显示蛇、鼠、墙。

先显示前四个蛇点(蛇点初始位置:行为0,1,2,3;列为1),然后显示鼠,接着显示四个墙点(行为3,4,5,6;列为4)。

然后重新扫描蛇、鼠、墙。

如上图,over=1时,点阵行都变成低电平,列都变成高电平,点阵全亮。

2.数码管显示仿真如图,clear=1时数码管全不亮。

clear置为0后,数码管轮流开始显示shounum数组中的元素。

当cat=011111和101111时,分别显示得分的十位和个位。

由于得分为0,所以这两个数码管的管脚电平为1111110,即都显示为0. 此时时间为59,当cat=111101时显示游戏时间的十位,所以该数码管的seven值为1011011,即显示为5.当cat=111110时,显示游戏时间的个位9,该数码管的seven值为1111011,即显示为9。

从图中可以看出,当游戏时间为58时,显示游戏时间的个位的cat=111110的数码管对应的seven值变为1111110,即显示为8.3.控制模块仿真从图中可以看到,clear置为1时,蛇的位置被初始化。

时间初始化为59。

clear=0后,每个clk3的上升沿,蛇头移动一步,蛇身分别跟着前一个点移动。

当游戏进行了5秒时,蛇头到达点阵最上边,这时由于对方向输入键key的设置,蛇开始向右走。

当倒计时为49s 时,蛇头到达点阵最右边。

此时蛇继续向右走,出界,over置为1,游戏结束。

从图中可以看出,老鼠每5秒重置一次位置。

四.源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity tanshishe isport(clk,clear:in std_logic; --时钟、复位/开始开关key:in std_logic_vector(3 downto 0); --方向控制键seven:out std_logic_vector(6 downto 0); --七位数码管的7根二极管cat:out std_logic_vector(5 downto 0); --控制数码管显示row,col:out std_logic_vector(7 downto 0)); --点阵行、列坐标end tanshishe;architecture game of tanshishe issignal setrat,over:std_logic; -- 重设老鼠、游戏结束信号signal ratr,ratc,rat:integer range 0 to 7; --老鼠行、列坐标signal t: std_logic_vector(2 downto 0);signal rattime:integer range 0 to 4; --老鼠出现时间type dots is array (integer range <>) of integer range 0 to 7;signal snaker,snakec:dots(3 downto 0); --蛇行、列坐标constant wallr:dots(3 downto 0):=(6,5,4,3);--墙的行坐标(常数)constant wallc:dots(3 downto 0):=(4,4,4,4);--强的列坐标(常数)signal clk1,clk2,clk3: std_logic;--clk1:1秒 clk2:500hz时钟signal tmp1:integer range 0 to 49999999; --分频1signal tmp2:integer range 0 to 99999; --分频2signal tmp3:integer range 0 to 49; --分频3signal dir:std_logic_vector(1 downto 0); --保存下一时刻方向signal direction:integer range 0 to 3; --当前蛇方向:0->上,1->下,2->左,3->右signal point:integer range 0 to 8; --当前点阵上显示的点type figure is array (integer range <>) of integer range 0 to 9;signal shownum:figure(3 downto 0); --shownum(3)和shownum(2)分别为得分的高位和地位,shownum(1)和shownum(0)分别为剩余时间的高位和地位beginp1:process(clk,over,clear) --分频同时保存下一时刻蛇的移动方向beginif clear='1' thendir<="00";tmp1<=0;tmp2<=0;elsif clk'event and clk='1' thenif (tmp2=99999) thentmp2<=0;clk2<='1';elsetmp2<=tmp2+1;clk2<='0';end if;if over/='1' thenif (tmp1=49999999) thentmp1<=0;clk1<='1';elsetmp1<=tmp1+1;clk1<='0';end if;if (tmp3=49) thentmp3<=0;clk3<='1';elsetmp3<=tmp3+1;clk3<='0';end if;case key iswhen "1000"=> dir<="00";when "0100"=> dir<="01";when "0010"=> dir<="10";when "0001"=> dir<="11";when others=> null;end case;end if;end if;end process;p2:process(clear,clk3,over) --点阵显示模块beginif clear='1' thenrow<="11111111";col<="00000000";point<=0;elseif (over='1')then--游戏结束col<="11111111";row<="00000000";elseif clk3'event and clk3='1' thencol<="00000000";row<="11111111";if point=8 thenpoint<=0;else point<=point+1;end if;case point iswhen 0|1|2|3=> row(snaker(point))<='0';col(snakec(point))<='1';when 4=> row(ratr)<='0';col(ratc)<='1';when 5|6|7|8=> row(wallr(point-5))<='0';col(wallc(point-5))<='1';when others=>col<="00000000";row<="11111111";end case;end if;end if;end if;end process;p3:process(clear,clk1,shownum(0),dir) --控制模块variable ratr1,ratc1:integer range 0 to 7;beginif clear='1' then --复位snaker<=(3,2,1,0);snakec<=(1,1,1,1);direction<=0;over<='0';shownum(3)<=0;shownum(2)<=0;shownum(1)<=5;shownum(0)<=9;setrat<='1';elseif clk1'event and clk1='1' thenif rattime=4 then rattime<=0; --老鼠出现时间else rattime<=rattime+1;end if;if shownum(0)=0 then --剩余时间shownum(0)<=9;shownum(1)<=shownum(1)-1;elseshownum(0)<=shownum(0)-1;end if;for i in 0 to 2 loop --the snake moves --蛇的步进snaker(i)<=snaker(i+1);snakec(i)<=snakec(i+1);end loop;case dir iswhen "00"=> if snaker(3)=7 then--向上出界游戏结束over<='1';elsif direction/=1 then--蛇头向上步进(蛇头方向不和输入值相反时)snaker(3)<=snaker(3)+1;snakec(3)<=snakec(3);direction<=0;elseif snaker(3)=0 then--蛇头方向和输入值相反,若蛇头向下出界,游戏结束over<='1';elsesnaker(3)<=snaker(3)-1;--蛇头向下未出界,向下步进snakec(3)<=snakec(3);end if;end if;when "01"=> if snaker(3)=0 then--若蛇头向下出界,游戏结束over<='1';elsif direction/=0 then--蛇头方向不和输入值相反,向下步进snaker(3)<=snaker(3)-1;snakec(3)<=snakec(3);direction<=1;elsif snaker(3)=7 then--蛇头方向和输入值相反,若蛇头向上出界游戏结束over<='1';elsesnaker(3)<=snaker(3)+1;--蛇头向上未出界,向上步进snakec(3)<=snakec(3);end if;when "10"=> if snakec(3)=0 then--左over<='1';elsif direction/=3 thensnakec(3)<=snakec(3)-1;snaker(3)<=snaker(3);direction<=2;elsif snakec(3)=7 thenover<='1';elsesnakec(3)<=snakec(3)+1;snaker(3)<=snaker(3);end if;when "11"=> if snakec(3)=7 then--右over<='1';elsif direction/=2 thensnakec(3)<=snakec(3)+1;snaker(3)<=snaker(3);direction<=3;elsif snakec(3)=0 thenover<='1';elsesnakec(3)<=snakec(3)-1;snaker(3)<=snaker(3);end if;end case;if setrat='1' then --重设老鼠位置ratr1:=rat;ratc1:=rat+2;for i in 0 to 3 loopif ratr1=wallr(i) and ratc1=wallc(i) thenratr1:=ratr1+1;ratc1:=ratc1+1;exit;end if;end loop;ratr<=ratr1;ratc<=ratc1;rattime<=0;setrat<='0';end if;if (shownum(1)=0 and shownum(0)=0) then --游戏时间到over<='1';elseif rattime=4 then setrat<='1'; --重设老鼠位置end if;if snaker(3)=ratr and snakec(3)=ratc then --吃到老鼠setrat<='1';if shownum(2)=9 then--加一分shownum(2)<=0;shownum(3)<=shownum(3)+1;elseshownum(2)<=shownum(2)+1;end if;elsefor i in 0 to 3 loopif snaker(3)=wallr(i) and snakec(3)=wallc(i) then --蛇撞墙over<='1';exit;end if;end loop;end if;end if;end if;end if;end process;p4:process(clear,clk2) --在数码管上显示得分和剩余时间variable state:integer range 0 to 3:=0;beginif clear='1' then cat<="111111";elsif clk2'event and clk2='1' thenstate:=state+1;case state iswhen 3=>cat<="011111";when 2=>cat<="101111";when 1=>cat<="111101";when 0=>cat<="111110";end case;case shownum(state) iswhen 0=>seven<="1111110";when 1=>seven<="0110000";when 2=>seven<="1101101";when 3=>seven<="1111001";when 4=>seven<="0110011";when 5=>seven<="1011011";when 6=>seven<="1011111";when 7=>seven<="1110000";when 8=>seven<="1111111";when 9=>seven<="1111011";when others=>seven<="0000000";end case;end if;end process;p5:process(clk1,t) --M序列发生器beginif t="000" then t<="001";elsif clk1'event and clk1='1' thent(0)<=t(0) xor t(2);t(1)<=t(0);t(2)<=t(1);end if;case t iswhen"000"=>rat<=0;when"001"=>rat<=1;when"010"=>rat<=2;when"011"=>rat<=3;when"100"=>rat<=4;when"101"=>rat<=5;when"110"=>rat<=6;when"111"=>rat<=7;end case;end process;end game;五、功能说明用一个 8×8 点阵做为基本显示屏,4 个连续移动的的发光点表示一条蛇,用任意出现的一个亮点表示老鼠,用4 个排成一条线的发光点表示“墙”,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,则游戏结束。

相关文档
最新文档