



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
推箱子游戏楷体,3号字,加粗一、实训任务与目的本实训要求学生对“推箱子游戏”进行分析、设计及编程实现。本实训对实训项目已经作了较为详细的分析及相关知识讲解,通过实训,促使学生专业技能得到综合训练,让学生了解软件开发基本技术和工作过程。同时,本实训中将会让学生了解图形界面设计基本技术。通过本系统的开发,同学门要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养同学们从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。二、 系统开发步骤软件开发一般有以下步骤:1.问题定义2.可行性研究3.需求分析 (需求分析阶段)4.总体设计5.详细设计6.编码及单元测试 7.综合测试 8.软件维护 (安装调试阶段)其中1、2、3步可以整合为调研分析阶段,4、5、6、7步可以整合为项目实施阶段。根据实际本次软件项目实训的实际情况,我们着重进行系统设计和编码实施。该阶段主要工作有:1.系统结构的总体设计 决定系统的总体结构,包括整个系统分哪些部分,各部分之间有什么联系以及已确定的需求对这些组成部分如何分配等方面。2.数据结构定义定义软件处理的对象数据的基本结构、存储技术,定义数据处理流程。3.详细设计对各功能模块的功能定义,说明模块之间的调用关系与接口(参数)。4.编码及调试根据详细设计的要求,按照统一的要求和编码规范,用C语言编码实现,同时负责每个模块的独立调试。5综合测试软件开发的后期是软件装配和综合测试。软件测试一般有专业的测试人员,同时通过发布使用试用版(体验版)等方式让用户体验、测试。在多次测试改进后,才正式发布。三、系统功能需求描述经典的推箱子是一个来自日本的古老游戏,目的是在训练人的逻辑思考能力。在一个狭小的仓库中,要求把木箱从开始位置推放到指定的位置。在仓库有障碍物,稍不小心就会出现箱子无法移动或者通道被堵住的情况,而且箱子只能推,不能拉,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。本游戏一共4关,由易到难,每一关都有初化、按键处理、重置及退出功能。(1)初始化包括屏幕初始化和每一关卡的初始化,屏幕被初始化宽80像素,高25像素。(2)按键处理包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为过关。(3)每一关都可以重置,按空格键可以重置当前关。(4)按Esc键可以在任何时候退出游戏。四、技术要求定义二维数组char status2020,用于记录屏幕一各点的状态。其中,“0”表示什么都没有,“b”表示箱子,“w”表示目的地,“i”表示箱子在目的地。首先将屏幕20*20范围内的状态初始化为0,然后根据具体情况,在画箱子时,将箱子所在点的状态改为“b”;在画墙壁时,将墙壁所在点的状态改为“w”;在画目的地时,将目的地所在点的状态改为“m”;当箱子被推到目的地时,箱子所在点的状态改为“i”,如果每一关中所有目的地的状态都为“i”,则说明该关已完成。定义字符指针char far *printScreen=(char far*)0xB8000000,用于在屏幕上输出字符。彩色显示器的字符缓冲区首地址为0xB8000000,每一个字符占2个字节(第一个字节为ASCII值,第二个字节为颜色值),字符模式下屏幕宽80像素,高25像素,一屏可以写80*25个字符。定义结构体typedef struct winerint x; int y; struct winer *p; winer;定义结构体struct winer用于判断每一关是否已完成。其中x用于存放目的地的横坐标,y用于存放目的地的纵坐标。如果所有表示目的地坐标对应的状态都为“i”,即箱子在目的地,则表示已经过关,可以进入下一关。该结构体的初始化在每一关的初始化时进行。五、系统功能模块划分本程序采用模块化设计,包括5个模块,分别是初始化模块、画图模块、移动箱子模块、移动小人模块和功能控制模块。各个模块的功能描述如下:(1)初始化模块。该模块包括屏幕初始化和游戏第一关的初始化。屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。(2)画图模块。该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。(3)移动箱子模块。该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。(4)移动小人模块。该模块用于控制小人移动,从而推动箱子到目的地。(5)功能控制模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。游戏从第一关开始,按上下左右方向键控制小人移动来推动箱子,可以在游戏中的任何时候按Esc键退出。如果游戏无成功希望,可以按空格键回到当前任务的开始状态;如果成功完成当前关,则进入下一关,如果当前关是最后一关,则显示通关信息,提示游戏结束。六、详细设计及实现宋体,4号字加粗(1)课题中的函数原型及功能说明。1、 putoutChar()函数原型:void putoutChar(int y,int x,char ch,char fc,char bc)putoutChar()函数在屏幕上的指定位置输出指定的字符。其中,x、y指明输出的位置,ch表示输出的字符,fc表示输出的字符颜色,bc 表示背景色。2、 printWall()函数原型:void printWall(int x,int y)printWall()函数用于画墙壁,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画绿色墙,用小方块表示墙(ASCII值为219)。3、 printBox()函数原型:void printBox(int x,int y)printBox()函数用于在非目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景白色箱子,用ASCII值为10的字符表示箱子。4、 printBoxDes()函数原型:void printBoxDes(int x,int y)printBoxDes()函数用于在目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色箱子,仍用ASCII值为10的字符表示箱子。5、 printDestination()函数原型:void printDestination(int x,int y)printDestination()函数用于画目的地,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色目的地,用心型表示(ASCII值为003)。6、 printDestination1()函数原型: void printDestination1(int x,int y,winer *win,winer *pw)printDestination1()函数与printDestination()函数功能基本相同,都是画目的地函数,但是printDestination1()增加了记录每一个目的地位置的功能。其中x、y指明目的地的位置,每一关的所有目的地位置存放在结构体struct winer中,形成一条链表,*winer返回链表的头,*pw则指向链表的尾部。7、 printMan()函数原型: void printMan(int x,int y)printMan()函数用于画小人。X、y指明画的位置。该函数通过软中断来实现,首先设置寄存器AX的高位和低位,设置高位0xa表示在光标位置显示字符;设置低位02(ASCII值),表示输出的字符;然后设置寄存器CX为01,表示重复输出的次数,这里只输出一次;最后产生类型为0x10的中断,表示显示器输出。8、 init()函数原型: void init()init()函数用于初始化屏幕。该函数首先用两个for循环初始化屏幕20*20范围内的状态,初始化为0,以后根据实际情况重新赋值;然后设置屏幕输出状态,设置寄存器AX的高位为0,低位为3,表示以80*25的彩色方式显示;最后移动光标到指定的位置输出操作提示信息以及版权信息。9、 初始化游戏函数原型:winer *initStep1()、winer *initStep2()、winer *initStep3()、winer *initStep4()这几个函数分别初始化游戏的第一关到第四关。这些函数的功能和实现步骤相似。首先根据需要在指定的位置画墙壁和画箱子,在这里可以设置游戏的难度,初始化的墙壁越复杂,箱子越多,则游戏就越难。游戏的第一关至第四关难度依次增加。然后分别调用printDestination1()和printMan()函数画目的地和小人。函数返回包含各个目的地位置的链表。10、 移动箱子函数原型: void moveBoxSpacetoSpace(int x,int y,char a)、void moveBoxDestoSpace(int x,int y, char a)、void moveBoxSpacetoDes(int x,int y,char a)、void moveBoxDestoDes(int x,int y,char a)这几个函数实现的功能分别是人空地移动箱子到空地、从目的地移动箱子到空地、从空地移动箱子到目的地和中从目的地移动箱子到目的地。X、y指明小人当前所处的位置,字符a表示移动的方向,有“u”、“d”、“l”和“r”4个值,分别表示向上、下、左、右移动。这几个函数的实现原理大致相似。对于前面两个函数,首先判断移动的方向,人小人所在的位置沿着移动的方向移动一步画小人,移动两步画箱子(调用printBox()函数),并设置状态为“b”;对于后面两个参数,首先判断移动的方向,从小人所在的位置沿着移动方向移动一步画小人,移动两上在目的地画箱子(调用printBoxDes()函数),并设置状态为“i”,表明箱子在目的地上。11、 judge()函数原型: int judge(int x,int y)judge()根据结构体structxy中存的值来判断该点的状态。12、 move()函数原型: void moid(int x,int y,char a)。Move()函数根据按下的键来处理小人的移动。小人移动的方向有上(“u”)、下(“d”)、左(“l”)、右(“r”)4个,4个方向的处理方式一样。首先判断移动的方向,然后根据小人的当前位置、下一步位置以及下下一步位置所在的状态进行处理。若下一步所在位置的状态为墙壁(“w”),则直接退出,不作任何处理。若下一步所在位置的状态为目的地(“i”)或者什么都没有(“0”),则:若当前位置的状态为目的地,则在当前位置画目的地(调用printDestination()函数)、在下一步位置画小人(调用printMan()函数)。若当前位置的状态为非目的地,则输出空格清空当前位置的小人,并在下一步位置画小人(调用printMan()函数)。若下一步所在位置的状态为箱子(“b”),则: 如果下下一步位置的状态为“0”,则把箱子从空地移动到空地(调用moveBoxSpacetoSpace()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用printDestinanion()函数)。 如果下下一步位置的状态为目的地,则把箱子从空地移动到目的地(调用moveBoxSpacetoDes()函数),然后把光标移动到下一步位置(如果当前位置的状态 为目的地,则应先画目的地(调用printDestination()函数)。 其它情况则直接返回,不作任何处理。若下一步所在位置的状态为箱子在目的地(“i”),则:如果下下一步位置的状态为“0”,则把箱子从目的地移动到空地(调用moveBoxDestoSpace()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用printDestination()函数)。如果下下一步位置的状态为目的地,则把箱子从目的地移动到目的地(调用moveBoxDestoDes()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用printDestination()函数)。其它情况则直接返回,不作任何处理。13、 reset()函数原型:void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装饰水电班组管理办法
- 网格化物资管理办法
- 规范水利项目管理办法
- 专利代理管理办法解析
- 仓库保管丢失管理办法
- 虚拟系统监护管理办法
- 业务平台故障管理办法
- 规范撂荒耕地管理办法
- 营销投资基金管理办法
- 产品售后维修管理办法
- 心脑血管科普知识
- 一例使用胰岛素泵治疗2型糖尿病患者的护理
- 铁路动车组运用维修规程(运规)
- 2025年浙江宁波市演艺集团有限公司招聘笔试参考题库含答案解析
- 2024年儿童保健技能大赛理论考试题库500题(含答案)
- 屋顶拆除施工方案设计
- 实验室用危化品的管理
- 医药代表大客户管理经验分享
- 无人机飞行安全应急预案
- 2024-2025学年中职历史世界历史高教版(2023)教学设计合集
- 辽宁省沈阳市第一三四中学2024-2025学年七年级上学期第一次月考英语试卷
评论
0/150
提交评论