c语言开发推箱子小游戏

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1 摘要.............................................................. .. (3)

1.1设计题目............................................. (3)

1.2设计内容.............................................. .. (3)

1.3开发工具........................................................ . (3)

1.4应用平台....................................................... .. (3)

2 详细设计 (3)

2.1程序结构...................................................... (3)

2.2主要功能..................................................... (4)

2.3函数实现..................................................... .. (4)

2.4开发日志.................................................... (5)

3 程序调试及运行 (5)

3.1程序运行结果............................................... .. (6)

3.2程序使用说明............................................. . (6)

3.3程序开发总结.............................................. (7)

4 附件(源程序)........................................... . (7)

1 摘要

1.1 设计题目

推箱子游戏

1.2 设计内容

推箱子是一款经典的益智小游戏,目的是在训练人的逻辑思考能力。在一个狭小的空间中,要求把木箱从起始位置处推放到指定位置。在空间中有地方限制,稍不小心就会出现箱子无法移动或者通道被堵住的情况,而且箱子只能推不能拉,所以需要玩家巧妙的利用有限的空间和通道,合理的移动次序和位置,才能完成任务。本游戏一共分5关,由易到难,每一关都有按键处理,以及推出功能。(1)按键处理包括小人的移动和箱子的移动,通过上下左右移动来控制小人,从而推动箱子,以把箱子推到指定的目的地。(2)按Esc键可以在任何时候退出游戏。

1.3 开发工具

TurboC 2.0

1.4 应用平台

DOS Windows 2000/XP

2 详细设计

2.1 程序结构

2.2主要功能

程序:推箱子游戏是一个简单有趣的小游戏;

推箱子游戏:

本程序采用模块化设计,包括四个模块,分别是画图模块、移动箱子模块、移动小人模块和功能键模块

各个模块的描述如下:

(1)画图模块。该模块主要是被其他模块调用。用于画墙、在空地画箱子、画目的地、画小人。

(2)移动箱子模块。该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。(3)移动小人模块。该模块用于控制小人移动,从而推动箱子到达目的地。

(4)功能键控制模块.该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能。

2.3 函数实现

(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()

函数原型: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指明画的位置。该函数通过软中断来实现,首先设置寄存器的高位和低位,设置高位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”“r”

“l”四个值,分别表示向上、向下、向右、向左移动。这几个函数的实现原理大致相似。对于前面两个函数,首先判断移动的方向,从小人所处的位置沿着移动方向移动一步画小人,移动两步画箱子

2.4 开发日志

我们首先选的是推箱子游戏这个编程题,刚开始觉得这个题很简单,一定很好编。可当我们渐渐了解这个程序时,才知道程序的编写并不是很轻松,在程序中,格子和人通过参考其他的游戏还好画,最难的是通过严格的逻辑顺序编写主程序,稍有失误,就会运行错误。在写程序的过程中,小组成员积极讨论开发,认真查找学习所需要的程序。

相关文档
最新文档