c语言开发推箱子小游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 开发日志
我们首先选的是推箱子游戏这个编程题,刚开始觉得这个题很简单,一定很好编。可当我们渐渐了解这个程序时,才知道程序的编写并不是很轻松,在程序中,格子和人通过参考其他的游戏还好画,最难的是通过严格的逻辑顺序编写主程序,稍有失误,就会运行错误。在写程序的过程中,小组成员积极讨论开发,认真查找学习所需要的程序。