推箱子游戏设计报告书

上传人:pu****.1 文档编号:496654032 上传时间:2023-02-09 格式:DOC 页数:11 大小:389KB
返回 下载 相关 举报
推箱子游戏设计报告书_第1页
第1页 / 共11页
推箱子游戏设计报告书_第2页
第2页 / 共11页
推箱子游戏设计报告书_第3页
第3页 / 共11页
推箱子游戏设计报告书_第4页
第4页 / 共11页
推箱子游戏设计报告书_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《推箱子游戏设计报告书》由会员分享,可在线阅读,更多相关《推箱子游戏设计报告书(11页珍藏版)》请在金锄头文库上搜索。

1、推箱子游戏设计报告书需求介绍:推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带这种游戏。它既能锻炼思维的严密性,又有很多乐趣。本设计将用C语言实现一个简单的推箱子游戏,旨在阐述推箱子游戏的实现方法。设计目的:本设计旨在训练开发者的基本编程技巧,其中涉及软中断、二维数组、键盘操作及图形化函数等方面的知识。通过本设计的训练,开发者能基本掌握显示器中断寄存器的设置、二维数组及结构体的定义、键盘上键值的获取、图形方式下光标的显示和定位,以及部分图形函数的使用。功能描述:本游戏共有4关,由易到难,每一关都有初始化、按键处理、重置及退出功能。(1)初始化包括屏幕初始化和每一关关卡的初始化

2、,屏幕被初始化宽80列,高25行。(2)按键处理包括移动小人和移动箱子,通过移动上下左右键控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为通关。(3)每一关都可以重置,按空格键可以重置当前关。(4)按ESC键可以在任何时候退出游戏。总体设计:1. 功能模块设计(1)系统模块图本设计包括5个模块,分别是初始化模块、图画模块、移动箱子模块、移动小人模块和功能控制模块,如图1所示。各个模块的功能描述如下。1) 初始化模块该模块包括屏幕初始化和游戏每一关的初始化。屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。2) 图画模块。该模块主要是被其他模块调用,用于画墙、在

3、空地画箱子、在目的地画箱子、画小人和画目的地。3) 移动箱子模块该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。4) 移动小人模块该模块用于控制小人移动,从而推动箱子到目的地。5) 功能控制模块该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。图1系统模块图2)任务执行流程图游戏从第一任务开始(第一关),按上下左右方向键控制小人移动来推动箱子,可以在游戏中的任何时候按Esc键退出。如果游戏无成功希望,可以按空格键回到当前任务的开始状态;如果成功完成当前关,则进入下一关,如果当前关是最后一关,则显示通关信息,提示游戏结束。图2显示了任务执

4、行的流程图。3)小人移动流程图小人移动的方向有四个,move()函数(处理小人移动的函数)对这4个方向移动的处理都一致,只是调用函数时的参数有所不同。首先判断小人移动的方向,然后根据小人所处的当前状态、下一步状态或者下下一步状态进行适当的处理。处理过程如图3所示。否是否是否是否成功?是是否是否是第4关?是否继续完成?有无成功希望?显示通关信息提示结束程序按空格键回到任务开始第一任务开始按Esc键退出进入下一任务开始图2任务执行流程图是否是否是否是下下一步状态否.下下一步状态否.为0?为m?是是当前状态为否m?是是.否丕下下一步状态下下一步状态为0?为m?是是否23下一步状态为m/0?当前状态为

5、m?下一步状态为w?下一步状态为b?下一步状态为i?输出空字符、调用PrintDestination()输出空字符、调用PrintMan()moveBoxDestoDes()moveBoxDestoSpace()光标移动下一步处PrintDestination()moveBoxSpacetoSpace()moveBoxSpacetoDes()判断移动方向图3小人移动流程图2. 数据结构设计(1)设置全局变量定义二维数组charstatus2020,用于记录屏幕上各点的状态。其中,“0”表示什么都没有,“b”表示箱子,“m”表示目的地,“i”表示箱子在目的地,“w”表示墙壁。首先将屏幕20X20

6、范围内的状态初始化为0,然后根据具体情况,在画箱子时,将箱子所在点的状态改为“w”;在画目的地时,将目的地所在点的状态改为“m”;当箱子被推到目的地时,箱子所在点的状态为“i”,如果每一关中所有目的地的状态都为“i”,则说明该关已完成。定义全局变量,charfar*printScreen=(charfar*)0XB8000000,用于在屏幕上输出字符。彩色显示器的字符缓冲区首地址为0XB8000000,每个字符占2字节(第一个字节为ASCII值,第二个为颜色值),字符模式下屏幕宽80列,高25行,一屏可以写80X25个字符。(2)定义结构体typedefstructwinerintx;inty

7、;structwiner*p;winer;定义结构体structwiner用于判断每一关是否完成。其中x用于存放目的地的横坐标,y用于存放目的地的纵坐标。如果所有表示目的地的坐标对的状态都为“i”,即箱子在目的地,则表示已经通关,可以进入下一关。该结构体的初始化在每一关的初始化时进行。3. 函数功能描述(1) putoutChar()函数原型:voidputoutChar(inty,intx,charch.charfc,charbe)putoutChar()函数在屏幕上的指定位置输出指定的字符。其中,x、y指明输出的位置,ch表示输出的字符,fc表示输出的颜色,bc表示输出的背景颜色。(2)

8、printWall()函数原型:voidprintWall(intx,inty)printWal1()函数用于画墙壁,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画绿色墙,用小方块表示墙(ASCII码值为219)(3) printBox()函数原型:voidprintBox(intx,inty)printBox()函数用于在非目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画白色箱子,用ASCII值为10的字符表示箱子。(4) printBoxDes()函数原型:voidprintBoxDes(intx,inty

9、)printBoxDes()函数用于在目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色箱子,仍用ASCII值为10的字符表示箱子。(5) printDestination()函数原型:printDestination(intx,inty)printDestination()函数用于画目的地,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色目的地,用心型表示(ASCII值为003)。(6) printDestination1()函数原型:voidprintDestination1(intx,inty,win

10、er*win,winer*pw)printDestination1()函数与printDestination()函数功能基本相同,都是画目的地函数,但是printDestination1()增加了记录每个目的地位置的功能。其中x、y指明目的地的位置,每一关的所有目的地位置存放在结构体structwiner中,形成一条链表,*winer返回链表的头,*pw则指向链表的尾部。(7) printMan()函数原型:voidprintMan(intx,inty)printMan()函数用于画小人。X、y指明画的位置。该函数通过软中断来实现,首先设置寄存器的高位和低位,设置高位0xa表示在光标位置显示字

11、符;设置低位02(ASCII值),表示输出的字符;然后设置寄存器CX为01,表示重复输出的次数,这里只输出一次;最后产生类型为0x10的中断,表示显示器输出。(8) init()函数原型:voidinit()init()函数用于初始化屏幕。该函数首先用两个for循环初始化屏幕20X20范围内的状态,初始化为0,以后根据实际情况重新赋值;然后设置屏幕输出状态,设置寄存器AX的高位为0,低位为3,表示以80X25的彩色方式显示;最后移动光标到指定位置输出屏幕欢迎信息。(9)初始化游戏函数原型:winer*initStep1()、winer*initStep2()、winer*initStep3()

12、、winer*initStep4()这几个函数分别初始化游戏第一关到第四关。这些函数的功能和实现步骤相似。首先根据需要在制定的位置画墙壁和画箱子,在这里可以设置游戏的难度,初始化的墙壁越复杂,箱子越多,则游戏就越难。游戏的第一至第四关难度依次增加。然后分别调用printDestinationl()和printMan()函数画目的地和小人。函数返回包含各个目的地位置的链表。(10)移动箱子函数原型:voidmoveBoxSpacetoSpace(intx,inty,chara)、voidmoveBoxDestoSpace(intx,inty,chara)、voidmoveBoxSpacetoDe

13、s(intx,inty,chara)、voidmoveBoxDestoDes(intx,inty,chara)。这几个函数实现的功能分别是从空地移动箱子到空地、从目的地到空地、从空地到目的地、从目的地到目的地移动箱子。X、y指明小人的当前所处的位置,字符a表示移动的方向,有“u”“d”“r”“i”四个值,分别表示向上、向下、向右、向左移动。这几个函数的实现原理大致相似。对于前面两个函数,首先判断移动的方向,从小人所处的位置沿着移动方向移动一步画小人,移动两步画箱子(11) judge。函数原型:(12) move()(13) 函数原型:judge()(14) reset()函数原型:voidreset(inti)Reset()函数的功能是重置当前关。该函数首先判断当前关是第几关,然后调用init()函数和初始化当前关的函数进行重置。(15)main()主函数首先设置寄存器AX的高位和低位,显示器软中断,进行显示状态的设置,初始化屏幕,初始化第一关,并显示欢迎信息。然后根据按下的键(bioskey(0)函数返回按下的键)进行处理,处理过程由move()函数进行(如果按下ESC键,则退出程序)。对于每一关,如果所有的表示目的地位置的状态都由“m”变为“i”,则表示通过该关,可以进入下一关。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

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