贪吃蛇课程设计

上传人:xins****2008 文档编号:111147236 上传时间:2019-11-01 格式:DOC 页数:39 大小:1.72MB
返回 下载 相关 举报
贪吃蛇课程设计_第1页
第1页 / 共39页
贪吃蛇课程设计_第2页
第2页 / 共39页
贪吃蛇课程设计_第3页
第3页 / 共39页
贪吃蛇课程设计_第4页
第4页 / 共39页
贪吃蛇课程设计_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《贪吃蛇课程设计》由会员分享,可在线阅读,更多相关《贪吃蛇课程设计(39页珍藏版)》请在金锄头文库上搜索。

1、目录一.绪论21.1 开发背景21.2 开发平台2二功能描述5三基本原理5四系统总体设计64.1 相关初始化64.2 任务设计74.2.1 任务设计要求74.2.2 流程图8五.硬件设计10六.软件设计116.1 移动功能的实现116.2 判断吃否吃到豆子136.3画豆子166.4 声音的播放176.5 数码管的点亮196.6 判断游戏进程206.7 加速,计分,计时功能226.8 监听键盘23七.系统测试247.1 界面247.2 运行结果与不足之处26八.小结27九.参考文献28部分源代码29一.绪论1.1 开发背景 贪吃蛇是一款常见的小游戏,简单有趣,深受人们的喜爱,本项目作为学习软件文

2、档写作和简单游戏编程而提出。希望通过贪吃蛇游戏软件设计开发,了解软件文档的相关标准和编写原则,训练并掌握软件各类文档写作的技巧,同时提高嵌入式设计的能力。1.2 开发平台1.知识储备 嵌入式实时操作系统C/OS-II简介C/OS-II是一个抢占式实时多任务内核。它是用ANSI的C语言编写的,包含一小部分汇编语言代码,使之可以提供给不同架构的微处理器使用。至今,从8位到64位,C/OS-II已经在40多种不同架构的微处理器上使用。使用C/OS的领域包括:照相机行业、航空业、医疗器械、网络设备、自动提款机以及工业机器人等。 C/OS-II全部以源代码的方式提供,大约有5500行。CPU相关的部分使

3、用的是针对Intel80x86微处理器的代码。C/OS-II可以很容易地移植到不同架构的嵌入式微处理器上。C/OS-II的特点: 源代码 可移植 可固化 可裁减 可抢占性 支持多任务 可确定性 任务栈 系统服务 中断管理 稳定性2.ARM简介采用RISC架构的ARM微处理器一般具有如下特点:l 体积小、低功耗、低成本、高性能;l 支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;l 大量使用寄存器,指令执行速度更快;l 大多数数据操作都在寄存器中完成;l 寻址方式灵活简单,执行效率高;l 指令长度固定;l ARM处理器共有37个寄存器,被分为若干个组(BANK)

4、,这些寄存器包括:l 31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。l 6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。l ARM处理器又有7种不同的处理器模式,在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0R14)、一至二个状态寄存器和程序计数器。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。l ARM微处理器的在较新的体系结构中支持两种指令集:ARM指令集和Thumb指令集。其中

5、,ARM指令为32位的长度,Thumb指令为16位长度。Thumb指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省3040以上的存储空间。二功能描述基本功能:开始蛇向右方移动。按键盘上定义的上下左右键,蛇改变游动的方向,可以上下左右游动。蛇不能碰到图中的灰色栅栏,如碰到游戏结束。若蛇碰到图中一粒豆子,则豆子被蛇吃掉,图中的豆子消失,蛇身变长。最终所有的豆子都被吃掉,游戏结束。增强要求:(1) 必须改进游戏的界面,增加显示相关的统计信息。左边的显示区保持不变,右边动态显示积分和总时间统计信息,其中积分栏目显示当前已经吃下的豆子数目,总时间显示本局游戏从开始到现在经过的时间。(2

6、) 优化主程序,注意CPU和内存的使用效率。(3) 考虑一个合理的得分算法,得分值应该取决于吃下去的豆子和游戏持续的时间。(4) 得分可以在发光二极管上显示出来。三基本原理游戏开始后进入游戏界面.首先初始化蛇的坐标,食物的坐标.线程基本流程:判断是否是暂停阶段,是否有有退出按键,游戏是否有结束,如果都没有就执行, 如果游戏结束了就重新游戏或者退出。开启键盘功能,实现通过方向键来控制蛇的移动方向; 开启数码管功能,实现蛇吃到食物后能够更新和显示分数; 利用变量,实现吃了6个食物后,游戏能够结束,并能通过增加蛇的移动速度来增加游戏的难度。贪吃蛇游戏设计最主要在蛇移动的控制,在设计中用数组来存放蛇身

7、的坐标,用数组boolbean003、boolbean011、boolbean101、boolbean111存放豆子,变量mscore记录得分,并利用数码管显示技术实时显示分数,考虑一个合理的得分算法,得分值应该取决于吃下去的豆子和游戏持续的时间。四系统总体设计4.1 相关初始化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_StackSTACKSIZ

8、E= 0, ; /LED闪烁任务堆栈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.任务的创建OSTaskCreate(Main_Task,(void *)0, (OS_STK *)&Main_StackSTACKSIZE*8-1, Main_Task

9、_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, Transmit_Task_Prio);3.初始化蛇身U8 HeadPos2;U8 EndPos2; 4.初始化豆子u8 bean0032 = 2,11, 18,13, 15,20 ;u8 bean0112 = 10,27 ;u8 bean101

10、2 = 38,3 ;u8 bean1112 = 27,38 ;BOOLEAN boolbean003 = TRUE, TRUE, TRUE;BOOLEAN boolbean011 = TRUE ;BOOLEAN boolbean101 = TRUE ;BOOLEAN boolbean111 = TRUE ;4.2 任务设计4.2.1 任务设计要求本设计需要创建三个任务,,任务一Main_Task和任务二Transmit_Task,任务三Led_Flash_Task,任务三为Led显示任务,这里不做详细解释。只对任务一跟任务二详细说明。在系统启动后,同时创建两个任务,任务一和任务二.任务一主要功

11、能是等待键盘消 息,有键盘消息的时候判断是什么键盘,并对相应的变量重新赋值.任务二主要功能是控制 并在屏幕上显示蛇的移动,并完成对分数和其他相关参数的记录和显示.任务 一为主任务,在创建任务的时候,赋给它的优先级别比任务二高,所以任务一优先运行,任 务二处于就绪状态, 因为任务一主要是等待键盘消息, 在无键盘消息的时候, 任务一被挂起, 这时候任务二进入运行状态.4.2.2 流程图1.程序流程图(不包括任务三)图1程序流程图(不包括任务三)2.任务一(主任务)流程图图2任务一(主任务)流程图3.任务二流程图图3任务二流程图五.硬件设计由于本次课程设计在平台上做开发,所以几乎不会涉及到具体的硬件

12、概要设计、详细设计、制作。但对于所用到的驱动,应有所了解。硬件不同,平台就不同,程序的效果也就不同。六.软件设计6.1 移动功能的实现移动功能的实现:通过ChangePointCount记录改变次数,ChangePointPos102记录每次的坐标,没有移动改变的时候,用绘图函数画原先的图,有移动的时候,先画头部,再利用循环画中间,最后画尾部。实现代码:oldendpos0 = EndPos0;/记录蛇的位置 oldendpos1 = EndPos1;/判断snake头部的变化switch (HeadDirect) /根据所按键蛇头向上向下向左向右移动,由于使用switch语句,横纵坐标只能有

13、一个发生变化,且一次只能向一个方向,所以蛇头向上向下向左向右移动。case 1:HeadPos0 = HeadPos0 + m;/蛇头横坐标移动mbreak;case 2:HeadPos0 = HeadPos0 - m;break;case 3:HeadPos1 = HeadPos1 - m; /蛇头纵坐标移动mbreak;case 4:HeadPos1 = HeadPos1 + m;break;/判断snake尾部的变化if (ChangePointCount 0) if ( ( abs(ChangePointPosChangePointCount-10-EndPos0)+abs(ChangePointPosChangePointCount-11-EndPos1) = 0) DelChangePoint(); switch(EndDirect)case 1:EndPos0 = EndPos0 + m; /蛇尾横坐标移动mbreak;case 2:EndPos0 = EndPos0 - m;break;case 3:EndPos1 = EndPos1 - m; /蛇尾纵坐标移动mbreak;case 4:EndPos1 = EndP

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号