推箱子游戏设计报告书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
推箱子游戏设计报告书
需求介绍:
推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带这种游戏。它既能锻炼思维的严密性,又有很多乐趣。本设计将用C语言实现一个简单的推箱子游戏,旨在阐述推箱子游戏的实现方法。
设计目的:
本设计旨在训练开发者的基本编程技巧,其中涉及软中断、二维数组、键盘操作及图形化函数等方面的知识。通过本设计的训练,开发者能基本掌握显示器中断寄存器的设置、二维数组及结构体的定义、键盘上键值的获取、图形方式下光标的显示和定位,以及部分图形函数的使用。
功能描述:
本游戏共有4关,由易到难,每一关都有初始化、按键处理、重置及退出功能。
(1)初始化包括屏幕初始化和每一关关卡的初始化,屏幕被初始化宽80列,高25行。
(2)按键处理包括移动小人和移动箱子,通过移动上下左右键控制小人的移动,从而推动箱子,以把箱子推到指定的目的地
为通关。
(3)每一关都可以重置,按空格键可以重置当前关。
(4)按ESC键可以在任何时候退出游戏。
总体设计:
1.功能模块设计
(1)系统模块图
本设计包括5个模块,分别是初始化模块、图画模块、移动箱子模块、移动小人模块和功能控制模块,如图1所示。各个模块的功能描述如下。
1)初始化模块
该模块包括屏幕初始化和游戏每一关的初始化。屏幕初始化用
于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一
关的关卡。
2)图画模块。
该模块主要是被其他模块调用,用于画墙、在空地画箱子、在
目的地画箱子、画小人和画目的地。
3)移动箱子模块
该模块用于移动箱子,包括目的地之间、空地之间和目的地与
空地之间的箱子移动。
4)移动小人模块
该模块用于控制小人移动,从而推动箱子到目的地。
5)功能控制模块
该模块是几个功能函数的集合,包括屏幕输出功能、指定位置
状态判断功能和关卡重置功能。
图1 系统模块图
(2)任务执行流程图
游戏从第一任务开始(第一关),按上下左右方向键控制小人移动来推动箱子,可以在游戏中的任何时候按Esc键退出。如果游戏无成功希望,可以按空格键回到当前任务的开始状态;如果成功完成当前关,则进入下一关,如果当前关是最后一关,则显示通关信息,提示游戏结束。图2显示了任务执行的流程图。
(3)小人移动流程图
小人移动的方向有四个,move()函数(处理小人移动的函数)对这4个方向移动的处理都一致,只是调用函数时的参数有所不同。首先判断小人移动的方向,然后根据小人所处的当前状态、下一步状态或者下下一步状态进行适当的处理。处理过程如图3所示。
图2 任务执行流程图
图3 小人移动流程图
2.数据结构设计
(1)设置全局变量
定义二维数组char status[20][20],用于记录屏幕上各点的状态。其中,“0”表示什么都没有,“b”表示箱子,“m”表示目的地,“i”
表示箱子在目的地,“w”表示墙壁。首先将屏幕20×20范围内的状态初始化为0,然后根据具体情况,在画箱子时,将箱子所在点的状态改为“w”;在画目的地时,将目的地所在点的状态改为“m”;
当箱子被推到目的地时,箱子所在点的状态为“i”,如果每一关中所有目的地的状态都为“i”,则说明该关已完成。
定义全局变量,char far *printScreen=(char far*)0XB8000000,用于在屏幕上输出字符。彩色显示器的字符缓冲区首地址为0XB8000000,每个字符占2字节(第一个字节为ASCII值,第二个为颜色值),字符模式下屏幕宽80列,高25行,一屏可以写80×
25个字符。
(2)定义结构体
typedef struct winer
{
int x;
int y;
struct winer *p;
}winer;
定义结构体struct winer用于判断每一关是否完成。其中x用于存放目的地的横坐标,y用于存放目的地的纵坐标。如果所有表示目的地的坐标对的状态都为“i”,即箱子在目的地,则表示已经通关,可以进入下一关。该结构体的初始化在每一关的初始化时进行。3.函数功能描述
(1)p utoutChar()
函数原型:void putoutChar(int y,int x, char ch.char fc,char bc))
putoutChar()函数在屏幕上的指定位置输出指定的字符。其
中,x、y指明输出的位置,ch表示输出的字符,fc表示输
出的颜色,bc表示输出的背景颜色。
(2)p rintWall()
函数原型:void printWall(int x,int y)
printWall()函数用于画墙壁,传入参数x、y指明位置。该函
数调用putoutChar()进行输出,以黑色为背景画绿色墙,用
小方块表示墙(ASCII码值为219)
(3)p rintBox()
函数原型:void printBox(int x,int y)
printBox()函数用于在非目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画白色箱子,用ASCII值为10的字符表示箱子。
(4)p rintBoxDes()
函数原型:void printBoxDes(int x, int y)
printBoxDes()函数用于在目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色箱子,仍用ASCII值为10的字符表示箱子。
(5)p rintDestination()
函数原型:printDestination(int x,int y)
printDestination()函数用于画目的地,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色目的地,用心型表示(ASCII值为003)。
(6)p rintDestination1()
函数原型:void printDestination1(int x, int y,winer**win , winer **pw)
printDestination1()函数与printDestination()函数功能基本相同,都是画目的地函数,但是printDestination1()增加了记录每个目的地位置的功能。其中x、y指明目的地的位置,每一关的所有