推箱子游戏设计报告书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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指明目的地的位置,每一关的所有

相关文档
最新文档