




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计课程设计报告书学生:孟祥煜指导老师:曾宇容课程设计名称:推箱子小游戏班级:软件11401一、设计任务介绍推箱子游戏的实现方法,并逐步介绍c语言图形编程的方法和技巧。在c语言编写软件WIN-TC上,涉及软中断、二维数组、键盘操作及图形化函数等方法,显示器中断寄存器的设置、二维数组的定义、键盘上键值的获取、图形方式下光标的显示和定位,以及部分图形函数的使用实现了一个完整的推箱子游戏界面,界面清晰可见。二、设计目的训练学生掌握C的数据结构和综合编程能力和游戏开发技巧等应用能力。初步设想推箱子是一款经典的益智小游戏,目的是在训练人的逻辑思考能力。在一个狭小的空间中,要求把木箱从起始位置处推放到
2、指定位置。在空间中有地方限制,稍不小心就会出现箱子无法移动或者通道被堵住的情况,而且箱子只能推不能拉,所以需要玩家巧妙的利用有限的空间和通道,合理的移动次序和位置,才能完成任务。本游戏一共分14关,由易到难,每一关都随着关数的增加_来增加难度,从而达到吸引游戏玩家的目的。二功能1 、菜单功能,玩家通过看目录按对应的键可以进入对应的功能菜单,其中1进入游戏,2选择游戏关卡,3游戏帮助指南,4退出游戏。2 游戏功能:玩家可以通过操纵键盘中的上下左右键进入游戏进行各种操作来完成游戏。3循环功能:当玩家正在游戏的时候如果某一步走错了,导致游戏无法完成,可以随时重新开始游戏来完成关卡,游戏过程中可以随时
3、按Ctrl+V退出游戏。4顺序功能:当玩家完成了某一关之后,随着进入下一关门可以按顺序进入下一关,继续开始更有挑战的关卡,如果该关是最后一关,则显示通关完成。三、总体设计1、功能模块设计函数功能描述本程序包括5个模块,分别是初始化模块、画图模块、移动箱子模块、移动小人模块和功能控制模块。各个模块功能的功能描述如下:(1)初始化模块。该模块包括屏幕初始化和游戏第一关到第最后一关的初始化。屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。(2)画图模块。该模块主要是被其他模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。(3)移动箱子模块。该模块用于移动
4、箱子,包括目的地之间、空地之间和目的地与空地之间箱子的移动。(4)移动小人模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。(5)功能控制模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。任务执行流程图数据流程图游戏帮助玩家推箱r系统申酒帮助游戏阳面(箱子人)完就逃人卜大旭山游戏P需助作申请衲防卫入常之缥f)游戏操作游戏从第一关开始,按上下左右方向键控制小人移动来推动箱子,可以在游戏中的任何时候按Esc键退出。如果游戏无成功希望,可以按CTRkV回到当前任务的开始状态;如果成功完成当前关,则进入下一关,如果当前关是最后
5、一吴,则显示通关信息,提示游戏结束。小人移动流程图小人移动的方向有4个,move()函数(处理小人移动的函数)对这4个方向移动的处理都一致,只是调用函数时的参数有所不同。首先判断小人移动的方向,然后根据小人所处世的当前状态、下一步状态或者下下一步状态进行适当的处理。2、数据结构设计设置全局变量定义intv1317,用于记录箱子在屏幕中哪个坐标上。其中“0”表示什么都没有。定义了intnum_guan指现在的父数,intnum_xiang;箱子的个数,intmove_num人行走的次数;intpush_num人推箱子的次数;定义数组intM2表示人所在的位置;M0是人所在位置的横坐标M1是人所在
6、位置的纵坐标;定义数组intdoor2表示门所在的坐标,door是“下一关门”的横坐标,door1是“下一关门”的纵坐标。3主函数下面让我们来看看主函数的操作流程,主函数首先进入游戏目录,提醒游戏玩家输入对应的数字来进行的对应的操作,如果玩家输入1则进入游戏第一关,输入2选择关卡进入,输入3显示游戏帮助菜单,帮助玩家更好的理解这个游戏的规则,输入4退出游戏。进入游戏后,首先调用chushi1()函数初始化要使用的页面,之后程序进入play()函数,play()函数中通过if语句通过判断i的值来初始化不同的关卡(设置好关卡的人,箱子,箱子的目的地,门),接着程序进入control函数通过获取玩家
7、在键盘上的操作来分别对游戏人物进行操作,最后通过wancheng函数来对操作进行判断,如果判断成功的话则进入下一关游戏。反之则失败。一直通过到最后一个则通关成功。四代码设计(或编程)单个模块或函数处理将整个系统程序分解为各个单独的模块,即C的函数,各模块可单独编译;整个程序的联调在各个模块基本的单独编译通过后,用主函数将他们集成在一起,实现调用,并进行输出数据的可靠性、输入数据及系统的容错性测试。五程序说明书功能模块1. .playO2. control()3. Daying()4. Wancheng()解析1.play()play()函数在这个程序中的功能主要是按1进入游戏系统后自动按照顺序
8、进行游戏和完成每一关游戏后进入下一美关卡,其中变量i控制关卡的关数,j控制进入下一关,首先利用if语句将i从一开始,初始化完成第一关,通过play()函数中的内嵌函数control。函数来控制游戏中人和箱子的各种操作,当过关了control。函数return0.即j=control()中的j等于0,游戏进入下一关。依次类推,当完成14关之后j=1游戏结束。voidplay()inti,j=O;for(i=1;iv=20;i+)tem=O;system("clsH);/清屏if(i=1)chushihua_guan1();设置关卡1的墙,箱子,人。门elseif(i=2)chushih
9、ua_guan2();elseif(i=3)chushihua_guan3();elseif(i=4)chushihua_guan4();elseif(i=5)chushihua_guan5();elseif(i=6)chushihua_guan6();elseif(i=7)chushihua_guan7();elseif(i=8)chushihua_guan8();elseif(i=9)chushihua_guan9();elseif(i=10)chushihua_guan10();elseif(i=11)chushihua_guan11();elseif(i=12)chushihua_gu
10、an12();elseif(i=13)chushihua_guan13();elseif(i=14)chushihua_guan14();j=control();if(j=1)system(,cls,);return;2control()Control()在这个程序中主要控制游戏中人物和箱子的运动,当玩家在键盘进行各种操作时系统会给出不同的反应。模块中定义了command变量,来接收玩家在键盘上的各种操作,首先调用getch()函数为command赋一个初值command="空字符”)22,进入界面图表初始化,根据num_guan的大小来具体初始化对应的关卡(箱子,人,墙的图标),接
11、着模块进入了“控制阶段”,再次通过getch()函数command获得一个字符,当command=”H"(也就是T)时人进行向上前进的动作,对应的(P“”K“M“)进行人的J、-、-操作,以及人的上下左右推箱子的动作,同时当人的前进的方向是墙或者双层箱子的时候人则不能运动,人推箱子如果箱子的前面是墙或者箱子的话箱子和人都不能运动。运动过程中如果玩家输入ctrl+c时游戏此关卡重新开始,同时在control函数中调用一个win变量来判断是否完成了游戏,调用内嵌函数wancheng()函数,当(win=wancheng()=1&&vdoor0door1=ren)时,表示这
12、个关卡已经完成了return0,即把play()函数中的j赋值等于0,游戏进入下一个关。游戏过程玩家每操作一步,系统通过控制daying()函数来控制画面中目标的运动,来达到游戏的目的。intcontrol()intwin;inttemm;charcommand;存放接收到命令while(1)(command=getch();/输入一个字符/*if(command=1)if(command=22)(if(num_guan=1)system(',cls',);chushihua_guan1();elseif(num_guan=2)system("cls',);c
13、hushihua_guan2();elseif(num_guan=3)system("cls',);chushihua_guan3();elseif(num_guan=4)system("cls");chushihua_guan4();elseif(num_guan=5)system("cls',);chushihua_guan5();elseif(num_guan=6)system("cls',);chushihua_guan6();elseif(num_guan=7)system("cls',);c
14、hushihua_guan7();elseif(num_guan=8)system(nclsH);chushihua_guan8();elseif(num_guan=9)system(,cls',);chushihua_guan9();elseif(num_guan=10)system(',cls',);chushihua_guan10();elseif(num_guan=11)system(,cls',);chushihua_guan11();elseif(num_guan=12)system(',cls',);chushihua_guan12
15、();elseif(num_guan=1113)system(nclsn);chushihua_guan13();elseif(num_guan=14)system("clsH);chushihua_guan14();)if(command=-32)F11,F12:-123,-122(temm=0;command=getch();if(temm=0&&command='H,&&(vM0-1M1=xiang|vM0-1M1=oxiang)&&vM0-2M1=jia)箱子在人的上边或者人的上边的箱子已经放好了且人的上面两行就是箱子的
16、家vM0M1=0;vM0-2M1=oxiang; vM0-1M1=re n; /H指的是向上推箱子到家M0=M0-1;move_num=move_num+1;push_num=push_num+1;temm=temm+1;if(temm=0&&command='P,&&(vM0+1M1=xiang|vM0+1M1=oxiang)&&vM0+2M1=jia)vM0+1M1=ren;temm=temm+1;P指向下推箱子到家vM0M1=0;vM0+2M1=oxiang;M0=M0+1;move_num=move_num+1;push_num=
17、push_num+1;if(temm=0&&command=*K'&&(vM0M1-1=xiang|vM0M1-1=oxiang)&&vM0M1-2=jia)vM0M1-1=ren;K指向左推箱子到家vM0M1=0;temm=temm+1;vM0M1-2=oxiang;M1=M1-1;move_num=move_num+1;push_num=push_num+1;if(temm=0&&command='M'(vM0M1+1=xiang|vM0M1+1=oxiang)vM0M1+2=jia)vM0M1+1=r
18、en;temm=temm+1;箱子到家vM0M1=0;vM0M1+2=oxiang;M1=M1+1;move_num=move_num+1;push_num=push_num+1;/H指人把箱子向上推,不是推到家if(temm=0&&command=,H,(vM0-1M1=xiang|vM0-1M1=oxiang)(vM0-2M1=0|vM0-2M1=jia)(vM0-1M1=ren;temm=temm+1;vM0M1=0;vM0-2M1=xiang;M0=M0-1;move_num=move_num+1;push_num=push_num+1;if(temm=0&&a
19、mp;command='H,(vM0-1M1=0|vM0-1M1=jia|vM0-1M1=men&&&&指向右推&&&&&&vM0-1M1=ren;temm=temm+1;vM0M1=0;move_num=move_num+1;M0=M0-1;人向上走)if(temm=0&&command=,P,&&(vM0+1M1=0|vM0+1M1=jia|vM0+1M1=men)vM0+1M1=ren;temm=temm+1;/人的下面为空或者下面为家或者下面为门的时候向下走M0=M0
20、+1;move_num=move_num+1;if(temm=0&&command=*P'&&(vM0+1M1=xiang|vM0+1M1=oxiang)&&(vM0+2M1=0|vM0+2M1=jia)vM0+1M1=ren;人的下面为箱子或者下面已经有箱子找到家了切下面的下面是空或者下面的下面是家,人把箱子向下推,人往下面走vM0M1=0;temm=temm+1;vM0+2M1=xiang;M0=M0+1;move_num=move_num+1;push_num=push_num+1;&&if(temm=0&&
21、amp;command='K'=move_num+1;M0=M0-1;人向上走(vM0M1-1=0|vM0M1-1=jia|vM0M1-1=men) vM0M1 -1 =ren;temm=temm+1;/人的左边为空或者左边是家或者左边是门的时候人可以往左边走vM0M1=0;M1=M1-1;move_num=move_num+1;if(temm=0&&command='K'&&(vM0M1-1=xiang|vM0M1-1=oxiang)&&vM0M1-1=ren;temm=temm+1;人的左边是箱子或者人的左边是
22、已经找到家的箱子切入的左边的左边是空或者人的左边的左边是家的时候箱子可以往左边移动,vM0M1=0;vM0M1-2=xiang;M1=M1-1;move_num=move_num+1push_num=push_num+1;if(temm=0&&command='Mf&&(vM0M1+1=0|vM0M1+1=jia|vMOM1+1=men)(vM0M1+1=ren;temm=temm+1;vM0M1=0;M1=M1+1;move_num=move_nuiTn-1;人的右边是空的或者人的右边是家或者人的右边的门的时候人可以往右边走。if(temm=0&
23、;&command='Mf&&(vM0M1+1=xiang|vM0M1+1=oxiang)&&vM0M1+1=ren;temm=temm+1;vM0M1=O;vMOM1+2=xiang;人的右边是箱子或者人的右边是一个已经找到家的箱子切右边的右边是空的或者右边的右边是家的时候可以推箱子M1=M1+1;move_num=move_num+1;push_num=push_num+1;/elseif(command=-122|command=-123);/else;)/elseif(command=0)/command=getch();接收Fn的下一个
24、字符F1F10:59-68elseif(command>=2&&command<=26)if(command=3)return1;else;/Ctrl+az:126当为ctrl+c的时候程序结束if(win=wancheng()=O)tem=0;system("clsn);dayin();if(win=wancheng()=1&&vdoor0door1=ren)Sleep(225);return0;return0;如果门的坐标和人的坐标相等的时候直接退出此语句,进入下一个程序(俗称下一关)3 Daying()Daying函数在这个程序主要在
25、游戏中的功能是画出游戏中人和箱子和“完成门”家,人的图标和对游戏中的关卡和人走的步数和推箱子的步数进行计数数,根据游戏中玩家的操作随时的对游戏画面进行变换。通过变量i,j来获得men,qiang,oxiang,ren,jia,xiang(分别表示完成门、墙、箱子放在家中、人、家、箱子)的坐标来找到各个变量的位置,从而运用画图函数画出对应的图标。voiddayin()(inti,j;for(i=0;i<=12;i+)for(j=0;jv=16;j+)if(fubenij=jia&&vi0=O)vi0=jia;for(i=0;i<=12;i+)for(j=0;j<
26、=16;j+)(if(vij=qiang)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUNDJNTENSITY|FOREGROUNDJNTENSITY);printf(H");elseif(vij=men)SetConsoIeTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED);printfn");elseif(vi0=oxiang)SetConsoleTextAttribute(GetStd
27、Handle(STD_OUTPUT_HANDLE),FOREGROUNDNTENSITY|FOREGROUND_GREEN);printf(”");elseif(vij=ren)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUNDJNTENSITY|FOREGROUND_INTENSITY1BACKGROUND_RED|BACKGROUND_GREENBACKGROUND_BLUE|FOREGROUND_RED);printf(“冏");elseif(vi0=jia)SetConsoleText
28、Attribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUNDJNTENSITY|FOREGROUND_GREEN)FOREGROUND_RED);printf("”);elseif(vi0=xiang)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUNDJNTENSITY|FOREGROUND_GREENFOREGROUND_BLUE);printf(n");elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUNDJNTENSITYIFOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);printf("H);printf(Hnn);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年统计学考试重要概念总结题及答案
- 如何上架直播课件
- 2024年计算机基础考试模拟试题及答案
- 幼儿园户外步行安全教育
- 重点传染病防控课件模板
- 宠物营养学科目复习试题及答案
- 小数加减混合运算
- 2024年二手车评估师的行业规范与考试试题及答案
- 2024年美容师考试职业技能与知识运用试题及答案
- 语言能力与文学鉴赏的关系自考试题及答案
- 2025智能家居系统供应及安装施工合同
- 建筑工程一级安全教育内容
- 2024-2025学年江苏省南京市鼓楼区树人中学七年级下学期英语3月学情调研卷(原卷版+解析版)
- 阳光心理健康成长(课件)-小学生主题班会
- 体育与心理健康的关联研究
- 消除艾滋病、梅毒和乙肝母婴传播项目工作制度及流程(模板)
- 2025年全民国家安全教育日主题教育课件
- 河南省高职单招《职测》备考试题集(含历年真题)
- 四川省开发的专项职业能力考核规范目录(2018年-2023年)
- AI虚拟数字人教学课件 目录大纲:《AI虚拟数字人:商业模式+形象创建+视频直播+案例应用》
- 2024陕西延长石油集团限责任公司油田公司校园招聘231人管理单位遴选500模拟题附带答案详解
评论
0/150
提交评论