欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    推箱子游戏课程设计.docx

    • 资源ID:6572780       资源大小:74.92KB        全文页数:22页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    推箱子游戏课程设计.docx

    1、推箱子游戏课程设计 摘要 前言 功能描述 配置要求 总体设计一、功能模块设计二、数据结构设计三、函数功能描述四、代码实现 参考文献 摘 要推箱子游戏是一款很有趣味的游戏,其开发过程有一定的技巧和方法,其中涉及到软中断、二维数组、键盘操作以及图形化函数等方面的知识。本游戏的开发者需要基本掌握显示器中断寄存器的设置。二维数组及结构体的定义、键盘上键值的获取、图形方式下光标的显示各定位,以及部分图形函数的使用。 前 言 推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带有这种游戏。它既能锻炼思维的严密性,又有很多乐趣。我个人也比较喜欢玩这个游戏,因此,我就借这个机会将这个推箱子游戏用

    2、C语言实现了出来,当然,我也借鉴了前人的一些技巧经验。由于时间仓促和本人水平有限,此游戏的制作显得有些粗糙,希望老师能够谅解,我以后将会再接再厉。 功能描述本游戏一共4关,由易到难,每一关都有初化、按键处理、重置及退出功能。(1)初始化包括屏幕初始化和每一关卡的初始化,屏幕被初始化宽80像素,高25像素。(2)按键处理包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为过关。(3)每一关都可以重置,按空格键可以重置当前关。(4)按Esc键可以在任何时候退出游戏。 配置要求(1) 硬件配置 CPU:Pentium III 600 内存:64MB 硬

    3、盘剩余空间:128MB(2) 软件环境 Turbo C 2.0及其以上版本 总体设计一、功能模块设计1、系统模块图本程序包括5个模块,分别是初始化模块、画图模块、移动箱子模块、移动小人模块和功能控制模块,如图(一)所示。各个模块的功能描述如下:(1)初始化模块。 该模块包括屏幕初始化和游戏第一关的初始化。屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。(2)画图模块。 该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。(3)移动箱子模块。 该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。(4)移动小人模块

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

    5、4个方向移动的处理都一致,只是调用函数时的参数有所不同。首先判断小人移动的方向,然后根据小人所处世的当前状态、下一步状态或者下下一步状态进行适当的处理。处理过程如图(三)所示。 是 否 是 否 否 是 是 否 否 否 是 是 否 是是 否 否 否 是 是图(三) 小人移动流程图 否 是 续图(三) 小人移动流程图二、数据结构设计1、设置全局变量定义二维数组char status2020,用于记录屏幕一各点的状态。其中,“0”表示什么都没有,“b”表示箱子,“w”表示目的地,“i”表示箱子在目的地。首先将屏幕20*20范围内的状态初始化为0,然后根据具体情况,在画箱子时,将箱子所在点的状态改为“

    6、b”;在画墙壁时,将墙壁所在点的状态改为“w”;在画目的地时,将目的地所在点的状态改为“m”;当箱子被推到目的地时,箱子所在点的状态改为“i”,如果每一关中所有目的地的状态都为“i”,则说明该关已完成。定义全局变量,char far *printScreen=(char far*)0xB8000000,用于在屏幕上输出字符。彩色显示器的字符缓冲区首地址为0xB8000000,每一个字符占2个字节(第一个字节为ASCII值,第二个字节为颜色值),字符模式下屏幕宽80像素,高25像素,一屏可以写80*25个字符。2、定义结构体typedef struct winerint x;int y;stru

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

    8、 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

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

    10、(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指明画的位置。该函数通过软中断来实现,首先设置寄存器A

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

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

    13、toSpace(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”、“l”和“r”4个值,分别表示向上、下、左、右移动。这几个函数的实现原理大致相似。对于前面两个函数,首先判断移动的方向,人小人所在的位置沿着移动的方向移动一步画小人,移动两步画箱子(

    14、调用printBox()函数),并设置状态为“b”;对于后面两个参数,首先判断移动的方向,从小人所在的位置沿着移动方向移动一步画小人,移动两上在目的地画箱子(调用printBoxDes()函数),并设置状态为“i”,表明箱子在目的地上。11、 judge()函数原型: int judge(int x,int y)judge()根据结构体structxy中存的值来判断该点的状态。12、 move()函数原型: void moid(int x,int y,char a)Move()函数根据按下的键来处理小人的移动。小人移动的方向有上(“u”)、下(“d”)、左(“l”)、右(“r”)4个,4个方向

    15、的处理方式一样。首先判断移动的方向,然后根据小人的当前位置、下一步位置以及下下一步位置所在的状态进行处理。(1)若下一步所在位置的状态为墙壁(“w”),则直接退出,不作任何处理。(2)若下一步所在位置的状态为目的地(“i”)或者什么都没有(“0”),则:1若当前位置的状态为目的地,则在当前位置画目的地(调用printDestination()函数)、在下一步位置画小人(调用printMan()函数)。2若当前位置的状态为非目的地,则输出空格清空当前位置的小人,并在下一步位置画小人(调用printMan()函数)。(3)若下一步所在位置的状态为箱子(“b”),则: 如果下下一步位置的状态为“0”

    16、,则把箱子从空地移动到空地(调用moveBoxSpacetoSpace()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用printDestinanion()函数)。 如果下下一步位置的状态为目的地,则把箱子从空地移动到目的地(调用moveBoxSpacetoDes()函数),然后把光标移动到下一步位置(如果当前位置的状态 为目的地,则应先画目的地(调用printDestination()函数)。 其它情况则直接返回,不作任何处理。(4)若下一步所在位置的状态为箱子在目的地(“i”),则:1如果下下一步位置的状态为“0”,则把箱子从目的地移动到空地(调用mo

    17、veBoxDestoSpace()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用printDestination()函数)。2如果下下一步位置的状态为目的地,则把箱子从目的地移动到目的地(调用moveBoxDestoDes()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用printDestination()函数)。3其它情况则直接返回,不作任何处理。13、 reset()函数原型:void reset(int i)reset()函数的功能是重置当前关。该函数首先判断当前关是第几关,然后调用init()函数和初始化当前关

    18、的函数进行重置。14、 主函数主函数首先设置寄存器AX的高位和低位,显示器软中断,进行显示状态的设置,初始化屏幕,初始化第一关,并显示操作提示信息和版权信息。然后根据按下的键(bioskey(0)函数返回按下的键值)进行处理,处理过程由move()函数进行(如果按下Esc键,则退出程序)。对于每一关,如果所有的表示目的地的状态都由“m”变成了“i”,则表示通过该关,可以进入下一关。四、代码实现1、程序预处理程序预处理部分包括加载头文件、定义全局变量和定义数据结构,并对它们进行初始化工作。其中加载头文件的代码如下:#include #include #include #include #incl

    19、ude #include 2、初始化模块该模块主要用于对屏幕和关卡的初始化,初始化关卡时是调用画图模块中画图函数。该模块包括以下几个函数。(1)void init(),初始化屏幕的大小、显示方式、显示操作提示信息和版权信息。(2)winer *initStep1(),初始化游戏的第一关。(3)winer *initStep2(),初始化游戏的第二关。(4)winer *initStep3(),初始化游戏的第三关。(5)winer *initStep4(),初始化游戏的第四关。其中初始化屏幕函数的详细代码如下:void init() int i,j; for(i=0;i20;i+) for(j=

    20、0;j20;j+) /*屏幕20*20范围内状态初始化为0,表示什么都没有*/ statusij=0; /*设置寄存器AX低位,80*25彩色方式显示*/_AL=3;/*设置寄存器AX高位*/ _AH=0; geninterrupt(0x10);/*移动光标到指定位置输出屏幕信息*/ gotoxy(41,4); printf( - up); gotoxy(41,6); printf( - down); gotoxy(41,8); printf( - left); gotoxy(41,10); printf( - right); gotoxy(40,12); printf(Space - res

    21、et); gotoxy(40,14); printf(Esc - quit); gotoxy(10,24);printf(CopyRight: 2008 LuoFuxing);gotoxy(38,24);printf(Program Make by HeXueqian); gotoxy(40,4); _CX=01; _AH=0xa; _AL=24; geninterrupt(0x10); gotoxy(40,6); _CX=01; _AH=0xa; _AL=25; geninterrupt(0x10); gotoxy(40,8); _CX=01; _AH=0xa; _AL=27; genint

    22、errupt(0x10); gotoxy(40,10); _CX=01; _AH=0xa; _AL=26; geninterrupt(0x10);3、画图模块该模块主要用于画图操作,包括画墙、画箱子、画目的地和画小人等。该模块包括以下几个函数。(1)void printWall(int x,int y),用于画墙。(2)void printBox(int x,int y),在空白地(非目的地)画箱子。(3)void printBoxDes(int x,int y),在目的地画箱子。(4)void printDestination(int x,int y),画目的地函数。(5)void prin

    23、tDestination1(int x,int y,winer *win,winer *pw),画目的地函数,并记录每个目的地的位置。(6)void printMan(int x,int y),画小人函数。其中画墙函数的代码如下:void printWall(int x,int y) /*以黑色为背景画绿色墙,用小方块表示*/putoutChar(y-1,x-1,219,GREEN,BLACK);/*记录状态为墙*/ statusxy=w; 4、移动箱子模块该模块是实现箱子的移动。根据游戏规则,箱子可以在空地之间、目的地之间、空地和目的地之间来回移动,因此,实现本模块共有以下4个函数。(1)v

    24、oid moveBoxSpacetoSpace(int x,int y,char a),把箱子从空地移动到空地。(2)void moveBoxDestoSpace(int x,int y,char a),把箱子从目的地移动到空地。(3)void moveBoxSpacetoDes(int x,int y,char a),把箱子从空地移动到目的地。(4)void moveBoxDestoDes(int x,int y,char a),把箱子从目的地移动到目的地。其中从空地移动箱子到空地函数的详细代码如下:void moveBoxSpacetoSpace(int x,int y,char a) s

    25、witch(a)/*如果按向上键*/case u:/*重设(x-1),y)位置的状态为0*/statusx-1y=0;/*清空(x,y)处原有的小人*/printf( ); /*在(x-2),y)处重新画箱子*/printBox(x-2,y);/*在(x-1),y)处重新画小人*/printMan(x-1,y); /*重设(x-2),y)位置的状态为箱子*/ statusx-2y=b;break; /*如果按向下键*/ case d: statusx+1y=0; printf( ); printBox(x+2,y); printMan(x+1,y); statusx+2y=b;break;/*

    26、如果按向左键*/ case l: statusxy-1=0; printf( ); printBox(x,y-2); printMan(x,y-1); statusxy-2=b;break;/*如果按向右键*/ case r: statusxy+1=0; printf( ); printBox(x,y+2); printMan(x,y+1); statusxy+2=b; break; default: break; 5、移动小人模块移动小人模块是本程序的核心模块,仅由move()函数来实现。Move()函数控制小人的移动,并调用画图模块、移动箱子模块中的函数来实现箱子的重画、移动等操作。其操作

    27、流程可参见图(三)。部分代码如下:void move(int x,int y,char a) switch(a) /*如果按向上键*/case u:/*如果(x-1,y)即小人的下一步状态为墙*/ if(!judge(x-1,y) /*则跳转到(y,x),并跳出循环*/ gotoxy(y,x); break; /*如果小人的下一步状态为目的地或者什么都没有*/ else if(judge(x-1,y)=1|judge(x-1,y)=3) /*如果当前状态为目的地*/ if(judge(x,y)=3) /*画目的地*/ printDestination(x,y); /*在新位置重新画小人*/ p

    28、rintMan(x-1,y); break; /*如果下一步状态为0*/ else /*输出空字符,覆盖当前状态的小人*/ printf( ); /*在下一步重新画小人*/ printMan(x-1,y); break; /*如果下一步状态是箱子*/ else if(judge(x-1,y)=2) /*如果下下一步为空*/ if(judge(x-2,y)=1) /*则将箱子从空地向上移动到空地*/ moveBoxSpacetoSpace(x,y,u); XX文库 - 让每个人平等地提升自我 /*如果当前状态为目的地*/ if(judge(x,y)=3) /*画目的地*/XX文库 - 让每个人平

    29、等地提升自我 printDestination(x,y); gotoxy(y,x-1); /*如果下下一步为目的地*/ else if(judge(x-2,y)=3) /*则将箱子从空地向上移动到目的地*/ moveBoxSpacetoDes(x,y,u); if(judge(x,y)=3) printDestination(x,y); gotoxy(y,x-1); else gotoxy(y,x); break;6、 功能控制模块功能控制模块包括屏幕输出功能、关卡重置功能和坐标位置状态的判断功能。该模块包括以下几个函数。(1)void putoutChar(int y,int x,char fc,char bc),在屏幕上指定的位置输出指定的字符。(2)int judge(int x,int y),判断位置(x,y)处的状态,状态值可参见“数据结构设计”部分。(3)void reset (int i),重置关卡。其中在屏幕上的指定位置输出指定的字符函数的代码如下:void putoutChar(int y,int


    注意事项

    本文(推箱子游戏课程设计.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开