欢迎来到人人文库网! | 帮助中心 人人文档renrendoc.com美如初恋!
人人文库网
全部分类
  • 图纸下载>
  • 教育资料>
  • 专业文献>
  • 应用文书>
  • 行业资料>
  • 生活休闲>
  • 办公材料>
  • 毕业设计>
  • ImageVerifierCode 换一换
    首页 人人文库网 > 资源分类 > DOC文档下载  

    基于μCOS系统ARM9硬件平台的贪吃蛇C语言游戏设计.doc

    • 资源ID:138535       资源大小:126KB        全文页数:18页
    • 资源格式: DOC        下载积分:9积分
    扫码快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
    二维码
    微信扫一扫登录

    手机扫码下载

    请使用微信 或支付宝 扫码支付

    • 扫码支付后即可登录下载文档,同时代表您同意《人人文库网用户协议》

    • 扫码过程中请勿刷新、关闭本页面,否则会导致文档资源下载失败

    • 支付成功后,可再次使用当前微信或支付宝扫码免费下载本资源,无需再次付费

    账号:
    密码:
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源(1积分=1元)下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于μCOS系统ARM9硬件平台的贪吃蛇C语言游戏设计.doc

    1基于C/OS系统、ARM9硬件平台的贪吃蛇游戏设计摘要程序核心思想:游戏开始后进入游戏界面。首先初始化蛇的坐标,食物的坐标。线程基本流程:判断是否是暂停阶段,是否有有退出按键,游戏是否有结束,如果都没有就执行,如果游戏结束了就重新游戏或者退出。设计要求;1、能够通过方向键来控制蛇的移动方向;2、蛇吃到食物后能够重新出现食物;并且能够更新和显示分数;3、游戏开始的时候能通过手动进行游戏级别的调整;4、每吃到5个食物后,游戏能够自动进入下一关,并能通过增加蛇的移动速度来增加游戏的难度;5、游戏开始的时候能够手动对游戏级别进行调整;开发平台信息一、C/OS操作系统C/OS和C/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。C/OS-II中最多可以支持64个任务,分别对应优先级063,其中0为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个,每个任务都有不同的优先级,用户在创建任务的时候定义该任务的优先级。uC/OS操作系统中每个任务可以有5种状态:休眠态、就绪态、运行态、等待或挂起状态、中断态,在任一个时候,任务的状态一定是这5种状态之一。任务在等待消息、邮箱或者信号量等事件的到来的时候会进入挂起状态,当任务接到消息以后,则处于就绪状态。二、试验箱基本硬件信息1)CPU:S3C44B0X,ARM7TDMI,工作在60MHz2)BIOS:2M,NORFLASH3)内存:8MSDRAM4)海量存储器:16M,NANDFlash5)键盘:17键数字小键盘6)显示器:320×24016级灰度的LCD(可选256彩色LCD),四线电阻式触摸屏7)USB接口:1.1标准8)串行口:两个,最高波特率115200kb9)网络接口:10M以太网10)CAN接口:125Kb,250Kb,500Kb,1Mb11)调试接口:JTAG,14针,20针12)电机:直流电机(有刷),步进电机(带1/64减速器)13)A/D:8路10位,满量程2.5V,已用前4路14)D/A:10位,满量程4.096V15)LED:8个,共阴极216)音频输出:44.1KHz17)FPGA(可选):ACEX1K系列,扩展输出100I/O,与S3C44B0X外部总线直接相连18)扩展口:2个二、开发集成环境ARMSDT2.5集成开发环境ARMSDT2.5集成开发环境(ARMProjectManager)是ARM公司(为方便用户在ARM芯片上进行应用软件开发而推出的一整套集成开发工具。ARMSDT可在Windows95、98、NT以及Solaris2.5/2.6、HP-UX10上运行,支持最高到ARM9(含ARM9)的所有ARM处理器芯片的开发,包括StrongARM。ARMSDT包括一套完整的应用软件开发工具:1、*armccARM的C编译器,具有优化功能,兼容于ANSIC。2、*tccTHUMB的C编译器,同样具有优化功能,兼容于ANSIC。3、*armasm支持ARM和THUMB的汇编器。4、*armlinkARM连接器,连接一个和多个目标文件,最终生成ELF格式的可执行映像文件。5、*armsdARM和THUMB的符号调试器。详细设计一、属性解释贪吃蛇游戏设计最主要在于蛇移动的控制,在设计中分别用两组一维数组snake.U16x100和snake.U16x100来分别0存放蛇身的坐标,x100代表横坐标,y100代表纵坐标。蛇的宽度设置为10个像素点。变量direction为移动方向,foodx,foody为食物的坐标。function.stop为判定是否是要结束退出游戏,function.restar用来在游戏结束后重新开始游戏。1000/snake.level为蛇的移动速度(在程序中用1000/snake.level作为每次循环的延迟时间),当snake.level的记录的等级越高的话,蛇的移动速度会越快(因为延迟时间越小),难度越高。snake.life用来判定游戏是否结束,snake.life=1代表蛇已死,游戏结束。游戏的其他相关变量还有snake.node,用来记录蛇的节数;snake.score用来记录游戏得分;snake.level用来记录游戏的等级。二、相关初始化过程:1、堆栈大小定义、任务优先级定义:OS_STKMain_StackSTACKSIZE*8=0,;VoidMain_Task(void*Id);#defineMain_Task_Prio12OS_STKControl_StackSTACKSIZE*8=0,;voidControl(void*Id);#defineControl_Prio152、任务的创建:OSTaskCreate(Main_Task,(void*)0,(OS_STK*)&Main_StackSTACKSIZE-1,Main_Task_Prio);OSTaskCreate(Control,(void*)0,(OS_STK*)&Control_StackSTACKSIZE*8-1,Control_Prio);3、初始化画笔宽度:SetPenWidth(pdc,10);/初始化画笔宽度为10个像素点4、初始化蛇的节数:snake.node=5;/游戏开始时蛇有5节35、初始蛇尾巴的坐标:snake.x0=10;snake.y0=10;初始化蛇各节的坐标:for(i=0;i<=snake.node-1;i+)snake.xi+1=snake.xi+10;snake.yi+1=snake.yi;6、蛇相关参数的初始化:初始化移动方向为向右:snake.direction=6;7、游戏相关参数的初始化:初始化分数:snake.score=0;初始化等级:snake.level=1;三、程序流程:本设计需要创建两个任务,任务流程和任务状态切换如下图。具体的任务流程和任务所要完成的功能如下:在系统启动后,同时创建两个任务,任务一和任务二。任务一主要功能是等待键盘消息,有键盘消息的时候判断是什么键盘,并对相应的变量重新赋值。任务二主要功能是控制并在屏幕上显示蛇的移动,并完成对分数、游戏等级、和其他相关参数的记录和显示。任务一为主任务,在创建任务的时候,赋给它的优先级别比任务二高,所以任务一优先运行,任务二处于就绪状态,因为任务一主要是等待键盘消息,在无键盘消息的时候,任务一被挂起,这时候任务二进入运行状态。1、程序主流程图:是否有键盘消息任务一挂起任务一,任务二就绪任务二挂起任务一运行任务二运行是否42、主任务流程图:主要功能是等待键盘消息,有键盘消息的时候判断是什么键盘,并对相应的变量重新赋值。3、任务二流程图:主要功能是控制并在屏幕上显示蛇的移动,并完成对分数、游戏等级、和其他相关参数的记录和显示。是等待键盘消息是否有键盘按下判断是哪个按键否8如果蛇现在的方向是左或者右就把方向改成向上2如果蛇现在的方向是左或者右就把方向改成向下4如果蛇现在的方向是上或者下就把方向改成左6如果蛇现在的方向是上或者下就把方向改成右*发出退出游戏的信息发出重新开始游戏的信息/+对游戏的等级加1(只在游戏开始前有效)-对游戏的等级减1(只在游戏开始前有效)/n车确定等级选择,开始游戏5四、具体功能实现:1、移动功能的实现:这部分功能是游戏的主体,实现蛇移动的方式是首先擦除蛇尾,擦除的方发是用白色的画笔覆盖画上蛇尾,蛇尾就变成白色底色不可见,然后从蛇尾开始,依次将蛇每一的坐标给下一节。例如刚开始蛇是5节,这时候依次把第2四节的坐标给第1节;把第3节(即蛇头)的坐标给第2节;把第4四节的坐标给第3节;把第4节(即蛇头)的坐标给第3节;把第5节(即蛇头)的坐标给第4节。擦除蛇尾和转移坐标这两个顺序不能颠倒。这时候蛇头的初始化游戏是否结束是否调用食物产生程序根据direction变量移动蛇是否吃到食物否是蛇的节数加1分数加1加快蛇的移动速度是否要产生食物否是是否有返回按键显示结束画面否6坐标和第4节的坐标是一样的,这时候需要判断变量snake.direction的值,根据snake.direction的值补画上蛇头。首先,擦除蛇尾SetPenColor(pdc,0xffffffff);MoveTo(pdc,snake.x0,snake.y0);LineTo(pdc,snake.x0,snake.y0);然后,蛇的每个环节坐标给下一节;For(i=0;i<=snake.node-1;i+)snake.xi=snake.xi+1;snake.yi=snake.yi+1;判断snake.direction的方向:Switch(snake.direction)case6:snake.xsnake.node+=10;break;/6表示右,通过这个判断来移动蛇头case2:snake.ysnake.node+=10;break;/8表示上,通过这个判断来移动蛇头case4:snake.xsnake.node-=10;break;/4表示左,通过这个判断来移动蛇头case8:snake.ysnake.node-=10;break;/2表示下,通过这个判断来移动蛇头最后,补画上蛇头的那一节:SetPenColor(pdc,0);MoveTo(pdc,snake.xsnake.node,snake.ysnake.node);LineTo(pdc,snake.xsnake.node,snake.ysnake.node);2、食物的产生:食物的产生主要要注意食物产生之前,我们必须要判断画面上面是已经存在食物,如有已经存在食物了,就不再产生食物,如果食物被蛇吃到了,那就要重新画上食物。本设计是中设置了变量eye,在每次循环都判断依次eye的值,通过eye的值来判断要不要画出食物。eye的值为0表示要画食物,为1表示已经存在食物。在蛇吃到食物后eye的值要被赋值0,画完食物后重新赋值1。另外还要保证食物不能超出蛇的活动界面,并要保证食物能被蛇吃到,所以需要指定食物坐标的范围,被通过舍去食物坐标个位的方法保证食物坐标是整十,这样就能被蛇吃到。本设计用一个矩形方框来代表食物,所以通过上面介绍的方法产生食物坐标后,对应在该坐标的位置画上一个矩形方框。If(eye=0)a=rand()%620+10;b=rand()%415+45;food.foodx=a/10*10;food.foody=b/10*10;SetPenColor(pdc,0);MoveTo(pdc,food.foodx,food.foody);LineTo(pdc,food.foodx,food.foody);eye=1;73、判断蛇是否吃到食物:判断蛇是否吃到食物的方法比较简单,只要判断蛇头的X、Y坐标是否同时和食物的坐标的X、Y一样。吃到食物后改变响应的游戏参数,并要让蛇的节数多一节,这时候要让变量snake.node加1,并且还要对蛇补画上一节,本设计采用补上蛇头的方法,要注意根据此时蛇的运动方向来确定新蛇头的坐标。另外,要注意,蛇吃完食物后,要把变量eye赋值0,以后食物产生子程序能够判断食物已经被蛇“吃到”了,要重新产生食物。if(snake.xsnake.node=food.foodx&&snake.ysnake.node=food.foody)snake.score+;snake.node+;然后判断此时蛇的运动方向,补上新蛇头的坐标switch(snake.direction)Case6:snake.xsnake.node=snake.xsnake.node-1+10;snake.ysnake.node=snake.ysnake.node-1;break;Case2:snake.ysnake.node=snake.ysnake.node-1+10;snake.xsnake.node=snake.xsnake.node-1;break;case4:snake.xsnake.node=snake.xsnake.node-1-10;snake.ysnake.node=snake.ysnake.node-1;break;case8:snake.ysnake.node=snake.ysnake.node-1-10;snake.xsnake.node=snake.xsnake.node-1;break;接下来根据新蛇头的坐标,画上新蛇头MoveTo(pdc,snake.xsnake.node,snake.ysnake.node);LineTo(pdc,snake.xsnake.node,snake.ysnake.node);eye=0;4、判断游戏是否结束的功能实现有两种情况,游戏将结束(1)蛇头撞到蛇身判断蛇是否撞到蛇身的方法可以从蛇头开始依次开始判断蛇头的X、Y轴坐标是不是同时和蛇身的坐标相等,但是其实因为从第四节开始蛇身才有可能被蛇头碰到,为了减轻硬件资源开销,只需要从snake.node-3的那一节开始,逐次逐节开始判断蛇身的X、Y坐标是否同时和蛇头的X、Y坐标一样,一样的话即表明蛇撞到蛇身了,此时游戏结束。例如,游戏刚开始蛇有5节,只要判断第5节坐标(即蛇头)是不是和蛇身第2节坐标相等,相等的话,游戏结束;不相等再判断第5节坐标(即蛇头)是不是和蛇身第1节坐标相等。For(i=snake.node-3;i>=0;i-)if(snake.xi=snake.xsnake.node&&snake.yi=snake.ysnake.node)snake.life=1;break;elsecontinue;8(2)蛇头撞到游戏界面边框判断蛇是否撞到边框的方法,只要比较蛇头的X、Y坐标是不是同时和边框的X、Y坐标一样,一样的话,即表明蛇撞到边框,游戏结束。例如:本设计中以(10,45)为坐标原点的情况下,只要保证蛇头的X坐标在0620之间(像素点为单位),蛇头Y坐标在0415之间(像素点为单位),即表示蛇没有撞到边框。if(snake.xsnake.node=0|snake.xsnake.node>=620|snake.ysnake.node=0|nake.ysnake.node>=415)snake.life=1;5、监听键盘动作:任务通过等待消息而处于挂起状态,当任务接到消息以后,则处于就绪状态,然后开始判断所接受到的这个消息是不是需要处理,如果是执行相应的处理函数,最后,删除所接收到的消息,继续挂起等待下一条消息。VoidMain_Task(void*Id)/Main_Test_TaskU8xiaoxi;POSMSGpMsg=0;for(;)pMsg=WaitMessage(0);switch(pMsg->Message)caseOSM_KEY:xiaoxi=onKey(pMsg->WParam,pMsg->LParam);if(xiaoxi=default:break;OSTimeDly(200);DeleteMessage(pMsg);U8onKey(intnkey,intfnkey)switch(nkey)Casereturndefault:returnFALSE;9程序下载与调试1、把程序下载到试验箱中:(1)执行菜单Project|Make对工程进行编译连接。在出现的错误/警告窗口中选择某错误/警告信息,ADS会自动打开相应源文件并用箭头指向出错的文本行。如果某个源文件被修改,重新编译时ADS会自动同步各文件的日期信息。(2)在ADS中执行菜单Project|Debug启动ADS1.2的调试工具AXD。(3)在AXD中执行菜单Options|ConfigureTarget对AXD进行设置。选择ADP即远程调试,点Configure按钮进一步设置具体参数。(4)点Select按钮选择远程连接为ARMethernetdriver,点Configure按钮输入仿真器的IP地址。如果用户使用的是并行口仿真器,请输入127.0.0.1即可。(5)等待程序装载完毕以后,通过Execute|Go菜单以及Execute|Stop(或者工具栏中的相应按钮)运行或暂停程序。程序暂停后在窗口中将显示出程序暂停的位置。(6)通过Execute|Step菜单(或者工具栏中的相应按钮)可以单步运行程序。也可以使用StepIn、StepOut菜单命令进入或者跳出函数的调用。RunToCursor命令运行到光标位置。(7)程序停止后可以通过ProcessorViews|Sources菜单查看源文件,并可在适当位置按F9设置端点。(8)使用在ProcessorView菜单下的Registers、Variables和Memory命令可以查看工作寄存器或者内存变量。读者可以逐一地尝试,为以后调试程序打下基础。注意:在进行调试时在ADS中必须选择当前工程的Debug版本,如果选择Release版本则无法正常调试程序。但在调试通过后就必须选择Release版本进行编译连接并将生产的system.bin文件复制到开发板的Flash中。将开发板上的Flash激活并使Windows认其为一个2、运行结果与不足:本程序能够完成设计目的的所有基本要求;(1)能够通过方向键来控制蛇的移动方向;(2)蛇吃到食物后能够重新出现食物;并且能够更新和显示分数;(3)每吃到5个食物后,游戏能够自动进入下一关,并能通过增加蛇的移动速度来增加游戏的难度;(4)能够通过按键随便退出游戏,并能通过按键重新进入游戏;未能实现的功能;本程序设计时预想在游戏开始前能够停留在游戏界别设置画面,并能通过手动进行游戏级别的调整,“+”按键用来增加游戏级别,“-”按键用来减少游戏级别,并能在屏幕上显示游戏灌输,等到有确认信息,游戏才开始。但是此部功能没有实现,实验的时候程序能够进入级别调整画面,并等待用户对游戏等级进行调整,但是“+”、“-”按键和确认按键无效,没办法对游戏级别进行调整。由于调试时间有限,最后删掉次部分功能。不足之处:(1)方向按键按下后,要有一定的延迟蛇才能对按键作出反应,这个延迟不是很明显,但是刚开始游戏的时候,总感觉不能刚好控制蛇吃到食物,需要稍微提早一些时间按下按键才能让蛇延目标方向移动。这个不足的原理是因为每次按键按下,要等到下一次循环,蛇才能响应方向改变,而蛇

    注意事项

    本文(基于μCOS系统ARM9硬件平台的贪吃蛇C语言游戏设计.doc)为本站会员(2****)主动上传,人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知人人文库网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    网站客服QQ:2881952447     

    copyright@ 2020-2024  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

    备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!