基于ARM硬件平台的贪吃蛇游戏设计_第1页
基于ARM硬件平台的贪吃蛇游戏设计_第2页
基于ARM硬件平台的贪吃蛇游戏设计_第3页
基于ARM硬件平台的贪吃蛇游戏设计_第4页
基于ARM硬件平台的贪吃蛇游戏设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计报告书基于ARM硬件平台的贪吃蛇游戏一、设计题目贪吃蛇游戏二、设计要求在LCD屏幕上模拟贪吃蛇游戏。1基本要求(1)起初贪吃蛇蛇身为1节,贪吃蛇按照原来的方向行进直到通过按键改变贪吃蛇的行进方向。(2)在教学实验箱上的LCD上绘制贪吃蛇,在他们的四周绘制四面墙,蛇身在行进的过程中不能碰到墙壁,碰到则游戏结束,提示是否重新开始,按确认键重新开始。若能保持不碰墙超过1分钟则完成游戏,提示游戏是否重新开始,按确认键则重新开始。2扩展内容(1)实现贪吃蛇吃食物,食物跟1节蛇身一样大小,其位置随机产生。在行进的过程中遇到产生的食物会将食物吃掉,蛇身便长一节继续行进。当蛇身长到6节便提示游戏完成,屏幕显示祝贺,同时整个过程中8段数码管会显示蛇身的长度。(2)可用键盘按键选择游戏难度,难度通过设定蛇身的行进速度和游戏完成时蛇身的长度确定。三、设计思路(1)验所需硬件EMBEST仿真器,EMBESTS3CEV40实验箱,PC机。(2)本次实验所需用到的硬件模块LCD(用来显示蛇的移动以及吃食物、撞墙等过程);键盘(用来控制贪吃蛇的上下左右移动以及游戏中的难度,蛇游动的快慢和蛇身体长度的设定);LED七段数码管(用于显示现阶段蛇身体的节数,初始为一节)。(3)因为本次实验要使LCD显示,并通过键盘产生中断控制贪吃蛇的运动状态和速度,所以本次实验主要同到的C文件主要是KEYBOARDC、LCDC、8LEDC和MAINC,主要在这几个文件上进行编程。本次实验的关键是如何在LCD中显示蛇并且需要实现蛇的移动,以及蛇吃到食物之后如何实现蛇身增长一段以及如何用键盘产生中断控制蛇的移动方向、速度以及蛇身节数的上限值。四、软件实现本次设计主要是考察我们对于LCD模块以及键盘中断的认识程度,刚开始的设想是本次贪吃蛇的设计需要创建两个流程任务,一个是键盘按下控制蛇的移动另一个是键盘没有按下贪吃蛇按照初始状态移动。任务流程和任务状态切换如下图。具体的任务流程和任务所要完成的功能如下在系统启动后,同时创建两个任务,任务一和任务二。任务一主要功能是等待键盘消息,有键盘消息的时候判断是什么键盘,并对相应的变量重新赋值。是否有键盘消息任务一挂起任务一,任务二就绪任务二挂起任务一运行任务二运行任务二主要功能是控制并在屏幕上显示蛇的移动,并完成对游戏等级和其他相关参数的记录和显示。任务一为主任务,在创建任务的时候,赋给它的优先级别比任务二高,所以任务一优先运行,任务二处于就绪状态,因为任务一主要是等待键盘消息,在无键盘消息的时候,任务一被挂起,这时候任务二进入运行状态。这就是本次设计的主要框架。程序主流程图是否有键盘消息任务一挂起任务一,任务二就绪任务二挂起任务一运行任务二运行主任务流程图主要功能是等待键盘消息,有键盘消息的时候判断是那个键按下来控制方向、难度、重启并对相应的变量重新赋值。等待键盘消息是否有键盘按下判断是哪个按键否上如果蛇现在的方向是左或者右就把方向改成向上下如果蛇现在的方向是左或者右就把方向改成向下左如果蛇现在的方向是上或者下就把方向改成左右如果蛇现在的方向是上或者下就把方向改成右增加贪吃蛇移动速度RESET增加蛇身体长度上限值(初始上限为4节)是任务二流程图主要功能是控制并在屏幕上显示蛇的移动,并完判定蛇是否撞墙或者撞到自身和其他相关参数的记录和显示。初始化游戏是否结束是否调用食物产生程序根据DIRECTION变量移动蛇是否吃到食物否是蛇的节数加1NODE1节数是否到上限是否要产生食物否是是否按下重启键显示结束画面否五、模块功能(1)主函数以及初始化VOIDMAINVOIDSYS_INIT/INITIAL44B0XSINTERRUPT,PORTANDUART/_LINK/PRINTMISCINFO/TEST_KEYBOARD/初始化/LCD_TESTMYSNAKELIFE0/活着/MYSNAKEDIRECTION1/方向往右/MYSNAKEX0100MYSNAKEY0100/蛇头坐标/MYSNAKEX1110MYSNAKEY1100MYSNAKENODE2/蛇身初始为两节/MYFOODX50/食物初始坐标/MYFOODY150DRAWK/开始画面画围墙生成小蛇/GAMEPLAY/玩游戏具体过程/(2)子程序画围墙VOIDDRAWKVOIDLCD_DRAW_BOX10,10,310,230,GREEN/画围墙/(3)游戏过程VOIDGAMEPLAYVOIDWHILE1IFRESET1/设定重启按键/LCD_TESTMYSNAKELIFE0/活着/MYSNAKEDIRECTION1/方向往右/MYSNAKEX0100MYSNAKEY0100/蛇头/MYSNAKEX1110MYSNAKEY1100MYSNAKENODE2MYFOODX50MYFOODY150RESET0FLAG0DRAWK/开始画面画围墙生成小蛇/WHILEFLAG/在没有按键的情况下,蛇自己移动身体/IFMYSNAKELIFE1/以上两种判断以后,如果蛇死就跳出内循环,重新开始/BREAKIFMYFOODYES1/需要出现新食物/MYFOODXRANDOMNUMBER25010MYFOODYRANDOMNUMBER18010WHILEMYFOODX100/食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到/MYFOODXWHILEMYFOODY100MYFOODYMYFOODYES0/画面上有食物了/IFMYFOODYES0/画面上有食物了就要显示/LCD_DRAW_BOXMYFOODX,MYFOODY,MYFOODX10,MYFOODY10,REDIFMYSNAKENODE2DIGIT_LED_TESTFORIMYSNAKENODE1I0I/蛇的每个环节往前移动,也就是贪吃蛇的关键算法/MYSNAKEXIMYSNAKEXI1MYSNAKEYIMYSNAKEYI1/1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头/SWITCHMYSNAKEDIRECTIONCASE1MYSNAKEX010BREAKCASE2MYSNAKEX010BREAKCASE3MYSNAKEY010BREAKCASE4MYSNAKEY010BREAK/从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来/FORI3I300|MYSNAKEY0220/蛇是否撞到墙壁/GAMEOVER/本次游戏结束/MYSNAKELIFE1/蛇死/IFMYSNAKELIFE1/以上两种判断以后,如果蛇死就跳出内循环,重新开始/BREAKIFMYSNAKEX0MYFOODX/消除食物MYSNAKEXMYSNAKENODE20MYSNAKEYMYSNAKENODE20/新的一节先放在看不见的位置,下次循环就取前一节的位置/MYSNAKENODE/蛇的身体长一节/MYFOODYES1/画面上需要出现新的食物/DIGIT_LED_TEST/LED灯显示蛇身节数/实现贪吃蛇的身体增加/LCD_DRAW_BOXMYSNAKEXMYSNAKENODE1,MYSNAKEYMYSNAKENODE1,MYSNAKEXMYSNAKENODE110,MYSNAKEYMYSNAKENODE110,WHITEFORI0IL/控制蛇身长度上限/CONGRAMYSNAKELIFE1SWITCHCON/控制运动方向/CASE3/上IFMYSNAKEDIRECTION4/判断是否往相反的方向移动/MYSNAKEDIRECTION3BREAKCASE1/左IFMYSNAKEDIRECTION2MYSNAKEDIRECTION1BREAKCASE2/右IFMYSNAKEDIRECTION1MYSNAKEDIRECTION2BREAKCASE4/下IFMYSNAKEDIRECTION3MYSNAKEDIRECTION4BREAK(4)游戏结束模块VOIDGAMEOVERVOIDLCD_CLR/清屏/LCD_DSPASCII8X16140,120,GREEN55,“GAMEOVER“/显示/IFCON0XF/判断是否按下重启键/RETURN0(5)游戏胜利模块VOIDCONGRAVOIDMYSNAKELIFE1/蛇死/LCD_CLR/清屏/LCD_DSPASCII8X16140,120,GREEN55,“WIN“/显示/(6)延时程序INTII,JJIFMS0I/蛇的每个环节往前移动,也就是贪吃蛇的关键算法/MYSNAKEXIMYSNAKEXI1/把前一点的坐标给后一点/MYSNAKEYIMYSNAKEYI1/1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头/SWITCHMYSNAKEDIRECTIONCASE1MYSNAKEX010BREAKCASE2MYSNAKEX010BREAKCASE3MYSNAKEY010BREAKCASE4MYSNAKEY010BREAK擦除蛇尾LCD_DRAW_BOXMYSNAKEXMYSNAKENODE1,MYSNAKEYMYSNAKENODE1,MYSNAKEXMYSNAKENODE110,MYSNAKEYMYSNAKENODE110,WHITE增长蛇身FORI0I300|MYSNAKEY0220/蛇是否撞到墙壁/GAMEOVER/本次游戏结束/MYSNAKELIFE1/蛇死/5、监听键盘动作任务通过等待消息而处于挂起状态,当任务接到消息以后,则处于就绪状态,然后开始判断所接受到的这个消息是不是需要处理,如果是执行相应的处理函数,最后,删除所接收到的消息,继续挂起等待下一条消息。SWITCHMYSNAKEDIRECTIONCASE1MYSNAKEX010BREAKCASE2MYSNAKEX010BREAKCASE3MYSNAKEY010BREAKCASE4MYSNAKEY010BREAKSWITCHCON/控制运动方向/CASE3/上IFMYSNAKEDIRECTION4/判断是否往相反的方向移动/MYSNAKEDIRECTION3BREAKCASE1/左IFMYSNAKEDIRECTION2MYSNAKEDIRECTION1BREAKCASE2/右IFMYSNAKEDIRECTION1MYSNAKEDIRECTION2BREAKCASE4/下IFMYSNAKEDIRECTION3MYSNAKEDIRECTION4BREAK六、软件的调试修改过程出现的问题及解决方法在一开始,我对于一个整体工程的概念还不是很清晰,只有一个大概的了解和初步的构思。当我通过老师给的一个实例工程之后,我尝试将自己之前编写的一段程序放到MAINC中运行,但是有100多个报错。让自己非常灰心。解决方法通过老师的指导我学会了通过一步一步来,先不把所有程序都写出来而是分块,一块一块的完成,先画出围墙,再画出蛇,然后再实现蛇身的移动,再产生食物等等,通过这个一个个步骤完成了程序的初步构架。在调用按键中断时,因为一开始不知道怎么使用,导致思路混乱,中断进入后无发转换。解决方法用KEYBOARDC中的一个标志FLAG来监控我的按键是否按下,FLAG为0时,没有键按下,为1时,有键按下。KEYREAD中选中我需要的按键,在按键中附一个变量来控制方向、速度、难度以及重启。在各文件中,没有分清全局变量和局部变量,及全局子函数的调用,乱定义,导致了一大串的语法错误。解决方法通过查书,并认真分清各变量,重新整理定义。七、设计总结软件演示的操作方法首先打开EMBESTIDE软件,打开我编制的工程KEYBOARD_TEST。编译连接,下载,并运行,观看LCD屏幕,开始可以看到我这次要演示的课题,几秒钟后显示我的学号、姓名和班级,最后跳入演示界面。用实验箱上的键盘控制贪吃蛇的运动状态和速度以及控制蛇身节数的上限值。按第1行第3个键,蛇向上移动;按第2行第2个键,蛇向右运动;按第2行第4个键,蛇向左运动;按第3行第3个键,蛇向下运动;按第4行第1个键,游戏重新启动;按第4行第2个键,增加蛇身节数的上限值(初始上限为4);按第4行第4个键,控制蛇移动的速度依次增快(达到最快之后再按键复位到开始速度)。设计缺点贪吃蛇还是过于生硬,不太形象,如果使用画圆的方法画出来的贪吃蛇可能效果会更好。达到的设计要求点1、起初贪吃蛇蛇身为1节,贪吃蛇按照原来的方向行进直到通过按键改变贪吃蛇的行进方向。2、在教学实验箱上的LCD上绘制贪吃蛇,在他们的四周绘制四面墙,蛇身在行进的过程中不能碰到墙壁,碰到则游戏结束,提示是否重新开始,按确认键重新开始。若能保持不碰墙超过1分钟则完成游戏,提示游戏是否重新开始,按确认键则重新开始。3、实现贪吃蛇吃食物,食物跟1节蛇身一样大小,其位置随

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论