已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西北工业大学课 程 设 计 报 告题 目: 贪吃蛇小游戏摘 要贪吃蛇是一个简单地小游戏,写作贪吃蛇的目的在于以C语言算法思想为基础,通过进一步的改编实现贪吃蛇小游戏,实现其基本游戏功能(显示蛇和老鼠、移动、长大、死亡、十五步内未吃掉则消失、计分、剩余时间)提高自己的对数字电路和相关语言的掌握。 利用DE0板写作,以VHDL语法撰写,并参考实验相关资料文件、网上相关资源以及图书馆相关书籍並,并通过老师的指导和与同学讨论完成写作贪吃蛇游戏。 由于未学习过VHDL和Verilog DHL语言,对DE0板不熟悉,写作过程中遇到了不小麻烦,通过进一步的学习,老师的指导以及参考资料,虽然不能完全实现游戏功能,但是已基本可以实现小游戏。 从一开始的无从下手到最后学会撰写VHDL、游戏显示设计、烧录到板子调试到最后得到成果,使自己一点一点补充不足的知识,对于VHDL硬件与软件间的关系运作也能更加清楚与了解,研究此设计如有机会会再继续完成。 关键词:VHDL, Verilog HDL,DE0目录一、课程设计目的- 3 -二、设计任务与要求- 3 -三、方案设计与论证- 3 -1、VGA显示- 3 -2、键盘控制- 5 -3、蛇的运动与增长- 5 -四、遇到问题的解决方法- 6 -五、存在的问题与不足- 6 -六、总结与体会- 6 -七、参考文献- 7 -八、附录- 8 -贪吃蛇一、课程设计目的1)巩固和加深所学电子技术课程的基本知识, 提高综合运用所学知识的能力;2)培养根据课题需要选用参考书、查阅手册、图表和文献资料的能力,提高学生独立解决工程实际问题的能力3)通过设计方案的分析比较、设计计算、元件选择及电路安装调试等环节初步掌握简单实用电路的工程设计方法。4)提高动手能力掌握常用仪器设备的正确使用方法,学会对简单实用电路的实验调试和对整机指标的测试方法,5)学习VHDL和Verilog HDL语言,熟悉DE0电路板。提高对软件与硬件之间关系的认识与了解二、设计任务与要求设计任务:设计一个贪吃蛇小游戏要求和指标:1. 用PS2键盘作为输入设备,用LCD作为显示器。2. 自定义蛇的图像和老鼠的图像,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,游戏结束。3. 老鼠出现的地方是随机的,在某个地点出现的时间是蛇走15步的时间,如果15步之内没有被吃掉,它就会在其它地方随机出现。;4. 在旁边显示得分情况和游戏的剩余时间。三、方案设计与论证1、VGA显示VGA标准是一种计算机显示标准,最初是由IBM公司在1987 年提出的一种视频传输标准,在彩色显示器领域得到了广泛应用。VGA管脚中,VGA_Hs和VGA_Vs分别是水平扫描信号和竖直扫描信号,VGA_R, VGA_G和VGA_B是颜色控制信号,控制当前显示的像素色彩。利用水平扫描信号和竖直扫描信号实现二维平面的像素扫描显示,程序中中我們利用Cnt_H与Cnt_V信号来控制,以确认程序正确的将色彩输出到屏幕上。将屏幕分成30*40的矩阵,每个矩阵块根据不同的值赋予不同的颜色。屏幕是从最左上角的(4,4)坐标开始扫描更新,可以将屏幕视为x-y 平面來看,根据矩阵点值赋予不同颜色绘制游戏框架并且实时显示蛇与老鼠在做VGA显示前先进行了彩条显示,以确保颜色显示正确,结果如下:根据彩条显示绘制游戏框架,并定义蛇与老鼠的颜色。2、键盘控制键盘控制程序的主要功能,就是读取用户为控制贪吃蛇的移动,而从键盘所输入的上下左右键值 (键盘的键值): 上:00011101 下:00011011 左:00011100 右:00100011 在键盘控制程序里,设定一个Dir和Dirbuff对方向进行控制,为了避免蛇直接向反方向运动,需要对方向的转换进行限制。需要对现行方向和下一步控制方向进行判断,以防止“回头”运动。3、蛇的运动与增长利用一个数组存放蛇的信息,当蛇移动时,将蛇头之后的坐标依次沿蛇身前移,蛇头根据运动控进行移动赋值。老鼠的位置利用时钟产生随机数,利用随机数得到老鼠的坐标,将相应的坐标块赋色。当蛇头坐标与老鼠的坐标重合时表示蛇已经吃到老鼠,此时将蛇尾后一坐标块赋值赋色,蛇的长度加一。当蛇头撞墙或蛇的首位相接,则根据相应的信号量结束程序。四、遇到问题的解决方法问题一、蛇穿墙而出,经过一定时间,从另一方向穿墙而入。解决方案:设置一个标志量S_Lose, 初始化为零。当为零时程序继续运行,如果撞墙或者首尾相接,赋值为1,结束游戏。问题二、蛇静止不动解决方案:语句判断出错,在蛇头位置时判断结束游戏。更改判断语句,使其只有在撞墙和首位相接时结束。问题三、颜色显示不对解决方案:未考虑颜色叠加,需要将背景色改成黑色才能正确显示颜色。五、存在的问题与不足1、由于时间原因,部分游戏功能要求尚未实现,例:得分显示,老鼠十五步内未被吃掉就消失,剩余时间显示。2、老鼠的随机产生可能在蛇身上,此时将会出现冲突,游戏无法继续。3、在蛇吃掉老鼠,蛇身在蛇尾增长时会有断尾延迟4、由于数组有限,当蛇身超过10时,会出现蛇“脱皮”现象。六、总结与体会这次的设计是通过自己在图书馆和网上查阅资料所完成的,课程设计的任务需要综合运用“高频电子线路”课程的知识,通过调查研究、查阅资料、方案设计,调试及分析讨论,结果展示完成设计任务。在这次课程设计中,学会了怎样去根据课题的要求去设计相应的数字电路。动手能力得到很大的提高。从中发现自己并不能很好的熟练去使用所学到的数电知识。在以后学习中要加强对使用电路和相关语言的了解。把过去熟悉的定型分析、定量计算逐步和工程估算、实验调整等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。这对今后从事技术工作无疑是个启蒙训练。通过这种综合训练,可以掌握高频电子线路设计的基本方法,提高动手组织实验的基本技能,培养分析解决电路问题的际本领,为以后毕业设计和从事高频电子线路实验实际工作打下基础。在设计的过程中我遇到很多困难,例如Quartus II 软件的学习,资料的查找,编辑好的文档没有及时保存,以至于从头再来,浪费了很多时间。但吃一堑长一智,现在遇到这些问题,及时解决,以后再做这类事情就会多一点经验,就会少出一些类似问题。在两个星期的课程设计之后,我觉得不仅实际动手能力有所提高,更重要的是懂得设计流程,从开始设计思路,到实现,到纠正完善,再到最后设计论文的撰写,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。经过这次课程设计,让我对前面的路有了更多的信心,因为在这个过程中,我学到了不少实用的东西,对于高频电子电路有了更深层次的掌握,并且提高了独立解决问题的能力。我们在学习理论知识的同时还要努力培养自己的动手操作能力,通过这次课程设计我也看到了自己的差距,今后会努力提高自己的动手操作能力,以求真正领会通信专业里边的各种知识,为将来的工作打下良好的基础。总而言之,通过这次课程设计,我们获得了很多,但学海无涯,我们还得一如既往的努力踏实的学习,只有这样才能成为合格的人才七、参考文献【1】Doouglas L.perry VHDL:Programming By Example (杨承恩 谭克俊 颜德文 译) 电子工业出版社【2】云创工作室 詹仙宁 田耕 VHDL 开发精解与实例剖析 电子工业出版社【3】数字电路实验指导讲义(第二版) (课件)八、附录LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY Snake ISPORT(Clk : IN STD_LOGIC;Start: IN STD_LOGIC;Rst : IN STD_LOGIC;-FOR VGARed : OUT STD_LOGIC;Blue : OUT STD_LOGIC;Green : OUT STD_LOGIC;Red1 : OUT STD_LOGIC;Blue1 : OUT STD_LOGIC;Green1 : OUT STD_LOGIC;Red2 : OUT STD_LOGIC;Blue2 : OUT STD_LOGIC;Green2 : OUT STD_LOGIC;Red3 : OUT STD_LOGIC;Blue3 : OUT STD_LOGIC;Green3 : OUT STD_LOGIC;V_Sync : OUT STD_LOGIC;H_Sync : OUT STD_LOGIC;-FOR KEYBORDPS2_Clk : IN STD_LOGIC;PS2_Data : IN STD_LOGIC);END Snake;ARCHITECTURE BEHAVE OF Snake ISTYPE MATRIX IS ARRAY (0 TO 29, 0 TO 39) OF INTEGER RANGE 0 TO 6;SIGNAL S_Matrix : MATRIX;-VGA CONTROLSIGNAL Cnt_H : INTEGER RANGE 0 TO 799;SIGNAL Cnt_V : INTEGER RANGE 0 TO 524;SIGNAL Row : INTEGER RANGE 0 TO 29;SIGNAL Col : INTEGER RANGE 0 TO 39;SIGNAL Clk_H : STD_LOGIC :=0;SIGNAL Clk_V : STD_LOGIC :=0;SIGNAL ColorBuf : STD_LOGIC_VECTOR(2 DOWNTO 0);-PS2 CONTROLSIGNAL buff : STD_LOGIC_VECTOR(10 DOWNTO 0);SIGNAL pre_clk,now_clk : STD_LOGIC;SIGNAL kbclk : STD_LOGIC :=0;-SIGNAL Data1,Data2,Data3 : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL PScnt : INTEGER RANGE 0 TO 10 := 0;SIGNAL Result : STD_LOGIC_VECTOR(7 DOWNTO 0);-SNAKE CONTROLSIGNAL Dir : STD_LOGIC_VECTOR(1 DOWNTO 0) := 00; -00 L 01 R 10 U 11 DSIGNAL Dirbuff : STD_LOGIC_VECTOR (1 DOWNTO 0):= 00; SIGNAL S_Speed : INTEGER := 12500000;SIGNAL S_Clk : STD_LOGIC :=0;TYPE Snake_element IS RECORDs_row : INTEGER RANGE 4 TO 25;s_col : INTEGER RANGE 4 TO 25;s_use : STD_LOGIC;s_head: STD_LOGIC;END RECORD;TYPE BODYBLOCK IS ARRAY (0 TO 9) OF Snake_element;SIGNAL S_Head : Snake_element;SIGNAL S_Body : BODYBLOCK;SIGNAL S_Len : INTEGER RANGE 1 TO 10;SIGNAL S_Erow : INTEGER RANGE 4 TO 25;-SNAKE ENDSIGNAL S_Ecol : INTEGER RANGE 4 TO 25;-SNAKE ENDSIGNAL S_Eat : STD_LOGIC;SIGNAL S_Lose: STD_LOGIC := 0;-FOODSIGNAL F_cntx : INTEGER RANGE 0 TO 39;SIGNAL F_cnty : INTEGER RANGE 0 TO 42;SIGNAL F_row : INTEGER RANGE 5 TO 24;SIGNAL F_col : INTEGER RANGE 5 TO 24;SIGNAL F_pl : Std_Logic;BEGINRed = ColorBuf(0);Green = ColorBuf(1);Blue = ColorBuf(2);Red1 = ColorBuf(0);Green1 = ColorBuf(1);Blue1 = ColorBuf(2);Red2 = ColorBuf(0);Green2 = ColorBuf(1);Blue2 = ColorBuf(2);Red3 = ColorBuf(0);Green3 = ColorBuf(1);Blue3 = ColorBuf(2);PROCESS(Clk)BEGINif(rising_edge(Clk) thenClk_H = not Clk_H;end if;END PROCESS;-COUNT CNT_HPROCESS(Clk_H,Rst)BEGINif (Rst=1)thenCnt_H=0;Clk_V=1;elsif(rising_edge(Clk_H) thenif(Cnt_H=799) thenCnt_H = 0;elseCnt_H = Cnt_H+1;end if;if(Cnt_H= 399) thenClk_V = 1;elseClk_V = 0;end if;end if;END PROCESS;-COUNT CNT_VPROCESS(Clk_V,Rst)BEGINif(Rst=1) thenCnt_V=0;elsif(rising_edge(Clk_V) thenif(Cnt_V=524) thenCnt_V = 0;elseCnt_V = Cnt_V+1;end if;end if;END PROCESS;- GENERATE H&V SYNCPROCESS(Clk,Rst)BEGINif(Rst=1) thenH_Sync=0;V_Sync=0;elsif(rising_edge(Clk) thenif(Cnt_H = 95) thenH_Sync = 0;elseH_Sync = 1;end if;if(Cnt_V = 1) thenV_Sync = 0;elseV_Sync = 1;end if;end if;END PROCESS;-DISPLAY ON VGAPROCESS(Clk_H,Rst)BEGINif(Rst=1) thenColorBuf= 144) and (Cnt_H =783) thenCol = (Cnt_H-144)/16;elseColorBuf = 35) and (Cnt_V =510) thenRow = (Cnt_V-35)/16;elseColorBuf ColorBuf ColorBuf ColorBuf ColorBuf ColorBuf ColorBuf ColorBuf =000;end case;end if;END PROCESS;-PS2 BLOCK-GENERATE 25MHz CLOCKPROCESS(Clk)BEGINif(Clkevent and clk=1)thenkbclk= not kbclk;end if;END PROCESS;-READ IN KEYBORDPROCESS(kbclk,Rst)BEGINif(Rst=1)thenResult=00000000;elsif kbclkevent and kbclk=1thenpre_clk=now_clk;now_clk now_clk)thenbuff(PScnt)=PS2_Data;if(PScnt=10)thenPScnt=0;Result=buff(8 downto 1);elsePScnt=PScnt + 1;end if;end if;end if;END PROCESS;-ASSIGN DIRECTIONPROCESS(Result,Rst)BEGINif(Rst = 1) thenDirbuff Dirbuff Dirbuff Dirbuff DirbuffDirbuff =Dirbuff;end case;end if;END PROCESS;PROCESS(Dirbuff,Start)BEGINif(Start=0)thenDir=00;elsif (Dir(1)xor Dirbuff(1)=1thenDir=Dirbuff;elseDir=Dir;end if;END PROCESS;-SNAKE CONTROL BLOCK-SET SPEEDPROCESS(Clk)variable S_Clk_Cnt : integer range 0 to 12500000;BEGINif(Clkevent and Clk=1)thenif(Rst=1)thenS_Clk=0;S_Clk_Cnt := 0;elsif(S_Clk_Cnt=12500000)thenS_Clk_Cnt :=0;S_Clk=not S_Clk;elseS_Clk_Cnt:=S_Clk_Cnt+1;end if;end if;END PROCESS;-SNAKE INIT & MOVE & EAT PROCESS(S_Clk,Clk,Start)variable len_cnt : integer;variable len : integer range 1 to 10;BEGINlen_cnt:=0;len := S_Len;if Start=0 thenL1: FOR i IN 0 TO 29 LOOPL2: FOR j IN 0 TO 39 LOOPS_Matrix(i,j) = 0;END LOOP L2;END LOOP L1;- INIT ROWSL3: FOR i IN 4 TO 35 LOOP S_Matrix(4,i) = 1;S_Matrix(25,i) = 1;END LOOP L3;- INIT COLUMNSL4: FOR j IN 5 TO 24 LOOPS_Matrix(j,4) = 1;S_Matrix(j,25) = 1;S_Matrix(j,35) =1;END LOOP L4;S_Matrix(19,19) =2; -headS_Head.s_row = 19;S_Head.s_col = 19;S_Head.s_use=1;S_Head.s_head=1;S_Matrix(19,20) =3; -bodyS_Body(0).s_row = 19;S_Body(0).s_col = 20;S_Body(0).s_use=1;S_Body(0).s_head=0;s_Matrix(19,21) =3;S_Body(1).s_row = 19;S_Body(1).s_col = 21;S_Body(1).s_use=1;S_Body(1).s_head=0;S_Len = 2;S_Eat = 1;S_Lose = 0;elsif(Start=1 and S_Lose=0)thenif(S_Clkevent and S_Clk=1) thenS_Erow = S_Body(len-1).s_row;S_Ecol 1)thenlen_cnt:=0;Smove:FOR N IN 0 TO 9 LOOP -LOOP LEN-1 TIMESS_Body(len-1-len_cnt).s_row=S_Body(len-2-len_cnt).s_row;S_Body(len-1-len_cnt).s_collen-2;END LOOP Smove;end if;S_Body(0).s_row=S_Head.s_row;S_Body(0).s_col=S_Head.s_col;if(Dir=00)thenS_Head.s_col=S_Head.s_col-1;elsif(Dir=01)thenS_Head.s_col=S_Head.s_col+1;elsif(Dir=10)thenS_Head.s_row=S_Head.s_row-1;elsif(Dir=11)thenS_Head.s_row=S_Head.s_row+1;end if;S_Matrix(S_Head.s_row,S_Head.s_col)=2;S_Matrix(S_Body(0).s_row,S_Body(0).s_col)=3;if(S_Matrix(S_Head.s_ro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024届广东肇庆市高三4月质量调研(二模)考试数学试题
- 餐饮店合同补充协议范本
- 财产处份协议书
- 亳州公证处合同公证收费标准
- 北京市租房标准合同
- 山西省2024八年级物理上册第三章物态变化第2节熔化和凝固第2课时熔化和凝固的应用课件新版新人教版
- 设备维修班长述职报告
- 湖南省益阳市赫山区箴言龙光桥学校2024-2025学年四年级上学期期中考试数学试题(无答案)
- 《J类船用筒形观察器》
- 广西柳州市2024-2025学年七年级上学期11月期中考试数学试题(含答案)
- 品质管理与质量控制提升产品品质
- 四川省凉山州西昌市2023-2024学年四年级上学期期末数学试卷
- 康复护理的历史发展
- 烟花爆竹从业人员安全培训试题
- 电梯使用现场类隐患专项排查清单
- Part1-2 Unit3 Internship教案-【中职专用】高一英语精研课堂(高教版2021·基础模块2)
- 一例下肢静脉溃疡患者的个案护理论文
- 年末固定资产盘点计划培训课件
- 危岩稳定性计算表格-滑移式-倾倒式-坠落式-完整版
- 直播运营团队组织架构及岗位职责解析
- 2023锦鲤购销合同鱼苗购销合同书
评论
0/150
提交评论