嵌入式课程设计-游蛇吃豆游戏设计_第1页
嵌入式课程设计-游蛇吃豆游戏设计_第2页
嵌入式课程设计-游蛇吃豆游戏设计_第3页
嵌入式课程设计-游蛇吃豆游戏设计_第4页
嵌入式课程设计-游蛇吃豆游戏设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、存档资料 成绩: 此页无需打印,需使用统一购买的封皮。华 东 交 通 大 学课 程 设 计 报 告 书所属课程名称 嵌入式系统设计 题 目 游蛇吃豆游戏设计 院 (系) 信息工程学院 班 级 物联网 学号 学生姓名 指导教师 辅导教师 2016年 6 月 20 日 华东交通大学课程设计报告课程设计(论文)任务书 信息工程 学院物联网 专业 2013-2 班 一、课程设计(论文)题目游蛇吃豆游戏设计 二、课程设计(论文)工作自 2016 年 06 月 20 日起至 2016 年 06 月 24 日止。三、课程设计(论文) 地点: 嵌入式系统实验室 四、课程设计(论文)内容要求:1本课程设计的目的

2、(1)使学生掌握嵌入式开发板(实验箱)各功能模块的基本工作原理; (2)培养嵌入式系统的应用能力及嵌入式软件的开发能力; (3)使学生较熟练地应用嵌入式操作系统及其API开发嵌入式应用软件;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。 2课程设计的任务及要求1)基本要求:(1)分析所设计嵌入式软件系统中各功能模块的实现机制;(2)选用合适嵌入式操作系统及其API;(3)编码实现最终的嵌入式软件系统; (4)在实验箱上调试、测试并获得最终结果。2)创新要求: 在基本要求达到后,可进行创新设计,如改善嵌入式软件实时性能;扩展嵌入式软件功能及改善其图形用户界面。3)课程设计

3、论文编写要求(1)要按照书稿的规格打印誊写课程设计论文。(2)论文包括目录、正文、小结、参考文献、谢辞、附录等(以上可作微调)。(3)课程设计论文装订按学校的统一要求完成。4) 课程设计评分标准: (1)学习态度:20分;(2)回答问题及系统演示:30分(3)课程设计报告书论文质量:50分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。5)参考文献:(1)罗蕾.嵌入式实时操作系统及应用开发北京航空航天大学出版社 (2)Jean J.Labrosse. 嵌入式实时操作系统uC/OS-II北京航空航天大学出版社(3)王田苗.嵌入式设计与开发实例.北京航空航天大学出版社(4)北

4、京博创科技公司. 嵌入式系统实验指导书6) 课程设计进度安排(1)准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料。(2)嵌入式软件设计分析阶段(4学时):程序总体设计、详细设计。(3)嵌入式软件代码编写调试阶段(8学时):程序模块代码编写、调试、测试。(4)撰写论文阶段(4学时):总结课程设计任务和设计内容,撰写课程设计论文。7) 课程设计题目具体要求:本题的具体任务是设计多任务的嵌入式软件游蛇吃豆游戏,基本要求:(1)键盘控制改变游蛇运动方向;(2)碰到边框或栅栏游戏结束;(3)吃掉豆子蛇身变长;(4)豆子全部吃光,游戏结束。提高要求(选做):(1)改进游戏界面,增加相关统

5、计信息;(2)考虑一合理的得分方法,得分值取决于吃下去的豆子和游戏完成时间等等。学生签名: 2016 年 6 月20 日课程设计(论文)评审意见(1)考勤(10分): 优()、良()、中()、一般()、差(); (2)系统设计(20分):优( )、良()、中()、一般()、差(); (3)编程调试(10分):优()、良()、中()、一般()、差();(4)回答问题(15分):优()、良()、中()、一般()、差();(5)论文撰写(35分):优()、良()、中()、一般()、差();(6)创新思想(10分):优()、良()、中()、一般()、差();综合评定等级:评阅人: 职称: 副教授 20

6、16 年6 月 24日目录 TOC o 1-3 h z u HYPERLINK l _Toc182973578 一、课设目的及内容 PAGEREF _Toc182973578 h 1 HYPERLINK l _Toc182973579 二、设计的原理 PAGEREF _Toc182973579 h 2 HYPERLINK l _Toc182973580 三、环境搭建及开发步骤 PAGEREF _Toc182973580 h 3 HYPERLINK l _Toc182973581 四、主要程序代码设计6 HYPERLINK l _Toc182973582 五、运行测试结果14 HYPERLINK

7、 l _Toc182973583 六、心得体会及自己所做的亮点工作的特别说明15 HYPERLINK l _Toc182973584 七、参考文献16第13页 第1页 共1页一、课设目的及内容目的:(1)使学生掌握嵌入式开发板(实验箱)各功能模块的基本工作原理; (2)培养嵌入式系统的应用能力及嵌入式软件的开发能力; (3)使学生较熟练地应用嵌入式操作系统及其API开发嵌入式应用软件;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。 内容:本题的具体任务是设计多任务的嵌入式软件游蛇吃豆游戏,内容如下:键盘控制改变游蛇运动方向;碰到边框或栅栏游戏结束;吃掉豆子蛇身变长;豆子

8、全部吃光,游戏结束。同组人员和分工信息:小组成员:小组分工:在本次课程设计中我主要负责:游蛇算法设计和代码实现二、设计的原理游蛇吃豆的关键是表示蛇的图形以及移动。在本系统中,我们用小方块来表示蛇的一节身体,身体每长一节,增加一个小方块。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这是由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来多一节

9、身体,所以将蛇的最后一节用背景色覆盖。游戏中的豆子是通过API函数中的Circle函数绘制而成。蛇的不停移动,就是蛇的下一节取代前一节的位置,在计算机中就是蛇下一节的位置坐标变成前一节的位置坐标。蛇的不停移动,就是蛇的下一节取代前一节的位置,在计算机中就是蛇下一 节的位置坐标变成前一节的位置坐标。在上文中,已定义蛇的位置坐标为数组类 型,一组坐标对应一节的位置,假设有 i+1 节, 由 0 到 i 节,第 i 节的坐标取第 i-1 节的坐标,第 i-1 节的坐标取第 i-2 节的坐标直到第 1 节取第 0 节的坐 标。而第 0 节的坐标,即蛇头的坐标要往某个方向变化,变化量为蛇每节的长度。三、

10、环境搭建及开发步骤1、嵌入式实时操作系统C/OS-II简介uC/OS II(Micro Control Operation System Two)是一个可以基于 HYPERLINK /view/15546.htm t _blank ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于 HYPERLINK /view/1125.htm t _blank 微处理器和控制器,适合很多商业操作系统性能相当的实时操作系统(RTOS)。为了提供最好的移植性能,uC/OS II最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU

11、(包括DSP)。 uC/OS II可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和 HYPERLINK /view/1462677.htm t _blank 多任务操作系统相关的系统服务,如信号量、邮箱等。其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。内核属于抢占式,最多可以管理60个任务。从1992年开始,由于高度可靠性、鲁棒性和安全性,uC/OS II已经广泛使用在从照相机到航空电子产品的各种应用中。2、任务设计要求游蛇吃豆游戏需要创建三个任务,第一个任务是Main_Task,第二个任务是Transmit_Task,第三个任

12、务是Led_Flash_Task。下面对这三个任务作详细说明。任务一负责程序开始运行时的整个游戏环境的绘制,接着进入死循环等待键盘消息,当有键盘触发时,程序执行onKey()函数判断是哪一个按键,从而执行相应的操作,然后对相应的变量重新赋值。任务二主要负责Snake在屏幕上的位置移动。其中,蛇的身体由draw_rect()函数动态绘制,通过动态的绘制,从而在屏幕上显示出游动的效果。任务二在负责绘制Snake的同时也完成对分数和其他相关参数的记录和显示。任务三负责LED灯的闪烁,用来指示RTOS处于正常工作状态。在上面三个任务中,任务一的优先级是12,任务二的优先级是20,任务三的优先级是60,

13、。所以任务一是主任务,在创建任务后,任务一优先运行,任务二处于就绪状态,但是又因为任务一是等待键盘消息,在没有键盘触发的时候,任务一被挂起,这时候任务二就进入了运行状态。流程图图一、任务一流程图图二、任务二流程图图三、任务之间的协调关系四、主要程序代码设计1、任务划分和优先级定义OS_STK Main_StackSTACKSIZE*8=0, ; /Main_Test_Task堆栈void Main_Task(void *Id); /Main_Test_Task#define Main_Task_Prio 12OS_STK Led_Flash_StackSTACKSIZE= 0, ; /LED闪

14、烁任务堆栈void Led_Flash_Task(void *Id); /LED闪烁任务#define Led_Flash_Prio 60OS_STK Transmit_Task_StackSTACKSIZE*8=0, ; /Transmit_Task堆栈void Transmit_Task(void *Id); /Transmit_Task#define Transmit_Task_Prio 202、初始化LCDLCD_Init(); /初始化LCD模块LCD_printf(LCD initialization is OKn);LCD_printf(240 x 128 Text Moden)

15、; initOSGUI();LoadFont();LoadConfigSys();3、创建任务OSTaskCreate(Main_Task,(void *)0, (OS_STK *)&Main_StackSTACKSIZE*8-1, Main_Task_Prio);OSTaskCreate(Led_Flash_Task,(void*)0,(OS_STK*)&Led_Flash_StackSTACKSIZE-1, Led_Flash_Prio);OSTaskCreate(Transmit_Task,(void*)0,(OS_STK*)&Transmit_Task_StackSTACKSIZE-1

16、, Transmit_Task_Prio);4、初始化蛇身U8 HeadPos2;/the position of the head of the snakeU8 EndPos2; /the position of the end of the snake5、初始化豆子u8 bean0032 = 2,11, 18,13, 15,20 ;u8 bean0112 = 10,27 ;u8 bean1012 = 38,3 ;u8 bean1112 = 27,38 ;BOOLEAN boolbean003 = TRUE, TRUE, TRUE;BOOLEAN boolbean011 = TRUE ;BO

17、OLEAN boolbean101 = TRUE ;BOOLEAN boolbean111 = TRUE ;6、移动功能的实现蛇的移动功能是游戏的主体部分。要求蛇可以根据按键控制方向进行转弯和移动。当蛇头撞到边界或者自身时,界面显示游戏结束。当蛇吃掉食物后,蛇的身体增长一个矩形的长度,同时显示新的食物。蛇身起始为3节。首先要判断按键所控制的方向,进而根据按键控制让蛇在一定方向上游动,在显示蛇游动的过程中,要根据需求计算蛇头的下一个位置,然后将蛇身中每一节的当前坐标给它的后一节,即蛇身的每一块移动到其前一块的位置,接着把新蛇显示在液晶上。当蛇头撞墙或者撞自身时,将蛇移动任务挂起;执行死亡任务时在

18、液晶上显示Game Overed;蛇每次吃到食物后,蛇的长度增加1,将蛇尾的坐标保留,传给新增的那一节,显示新的食物。通过ChangePointCount记录改变次数,ChangePointPos102记录每一次的坐标,没有移动改变的时候,用绘图函数画原先的图,有移动的时候,先画头部,再利用循环画中间,最后画尾部。主要代码如下:oldendpos0 = EndPos0;oldendpos1 = EndPos1;/判断snake头部的变化switch (HeadDirect)case 1:HeadPos0 = HeadPos0 + 1;break;case 2:HeadPos0 = HeadPo

19、s0 - 1;break;case 3:HeadPos1 = HeadPos1 - 1;break;case 4:HeadPos1 = HeadPos1 + 1;break;/判断snake尾部的变化if (ChangePointCount 0)if( ( abs(ChangePointPosChangePointCount-10-EndPos0)+abs(ChangePointPosChangePointCount-11-EndPos1) = 0)DelChangePoint();switch(EndDirect)case 1:EndPos0 = EndPos0 + 1;break;case

20、 2:EndPos0 = EndPos0 - 1;break;case 3:EndPos1 = EndPos1 - 1;break;case 4:EndPos1 = EndPos1 + 1;break;/绘制SnakeFillRect2(pdc, pbarRect1, GRAPH_MODE_NORMAL, RGB(0, 0, 255);FillRect2(pdc, pbarRect2, GRAPH_MODE_NORMAL, RGB(0, 0, 255);if (ChangePointCount=0)draw_rect(HeadPos0,HeadPos1, EndPos0, EndPos1);e

21、lsedraw_rect(HeadPos0,HeadPos1,ChangePointPos00,ChangePointPos01);for(i=1; iChangePointCount; i+)draw_rect(ChangePointPosi-10,ChangePointPosi-11,ChangePointPosi0, ChangePointPosi1);draw_rect(ChangePointPosi-10,ChangePointPosi-11,EndPos0,EndPos1);7、判断能否吃到豆子判断蛇能否吃到豆子的方法比较简单,只要判断蛇头的X,Y坐标是否同时和食物的坐标X,Y一样

22、,吃到食物后,改变响应游戏参数,这时候要让变量addcount加1,要注意根据此时蛇的运动方向来确定新蛇头的坐标。另外,要注意,蛇吃完食物后,要把变量boolbean00i,bean010,bean100,bean110赋值FALSE,食物产生子程序能够判断食物已经被蛇“吃到”了。代码如下:u8 bean0032 = 2,11, 18,13, 15,20 ;u8 bean0112 = 10,27 ;u8 bean1012 = 38,3 ;u8 bean1112 = 27,38 ;if (HeadPos0 = 20)if (HeadPos1 =20)for (i=0;i3;i+)if (bool

23、bean00i = TRUE)if ( (bean00i0 = HeadPos0) & (bean00i1 = HeadPos1) )catch = TRUE;boolbean00i = FALSE;addcount = 2;return;elseif (boolbean010 = TRUE)if ( (bean0100 = HeadPos0) & (bean0101 = HeadPos1) ) catch = TRUE;boolbean010 = FALSE;addcount = 2;return;elseif (HeadPos1 =20)if (boolbean100 = TRUE)if ( (bean1000 = HeadPos0) & (bean1001 = HeadPos1) ) catch = TRUE;boolbean100 = FALSE;addcount = 2;return;elseif (boolbean110 = TRUE)if ( (bean1100 = HeadPos0) & (bean1101 = HeadPos1) ) catch = TRUE;boolbean110 = FALSE;addcount = 2;return;8、画豆子画豆子时,通过判断豆子有没有被吃掉决定要不要画,如果已经被蛇吃掉,就不要画,没有吃掉就画,通过数组的值是TR

温馨提示

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

评论

0/150

提交评论