![[解]实训报告参照格式模版.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-4/24/2f8e7df2-81bc-475d-a8ae-49434b96b22b/2f8e7df2-81bc-475d-a8ae-49434b96b22b1.gif)
![[解]实训报告参照格式模版.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-4/24/2f8e7df2-81bc-475d-a8ae-49434b96b22b/2f8e7df2-81bc-475d-a8ae-49434b96b22b2.gif)
![[解]实训报告参照格式模版.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-4/24/2f8e7df2-81bc-475d-a8ae-49434b96b22b/2f8e7df2-81bc-475d-a8ae-49434b96b22b3.gif)
![[解]实训报告参照格式模版.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-4/24/2f8e7df2-81bc-475d-a8ae-49434b96b22b/2f8e7df2-81bc-475d-a8ae-49434b96b22b4.gif)
![[解]实训报告参照格式模版.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-4/24/2f8e7df2-81bc-475d-a8ae-49434b96b22b/2f8e7df2-81bc-475d-a8ae-49434b96b22b5.gif)
已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
青岛大学软件技术学院基于c+的推箱子游戏实训报告姓名:严凡杰专业:数字媒体班级:09级4班 指导教师:解新峰 2012年7 月18日目 录1 实训目的12 实训安排12.1 实训时间12.2 实训进度13 实训内容23.1 游戏策划23.2 总体设计:23.3 关键算法44 实训遇到的问题及其分析和解决124.1124.2125 实训总结131 实训目的实训是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是一门专业基础课或专业课教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践能力、为毕业设计及毕业后从事专业技术工作打下基础,提高学生全面素质具有重要的意义。通过进行实训了解了游戏策划案的编写流程,更好的巩固了平时的理论学习,同时也为以后的工作打下基础,在工作中能够更快的熟练操作。通过使用c语言编写游戏程序,对于编程语言和技术应用能够更加熟练的掌握,对编程语言、技术应用和综合动手能力的锻炼和提高具有重要意义。同时实训弥补了平时学习中缺少实践的缺陷,使得平时理论知识的学习通过实训得到巩固。这次实训是我们进入社会的一次预演,是将书本中的知识应用到实践中的一次检验。2 实训安排2.1 实训时间2012年7月9号2012年7月20号,共两周(周一到周五),十天时间。2.2 实训进度07-09前:布置实训内容、要求等具体工作;07-09到07-10:完成交互式游戏策划案的编写;07-11到07-16:完成代码的设计和编写、调试;07-16到07-18:完成实训报告的撰写;07-19:提交实训代码(电子版)和报告(电子版和打印版)。3 实训内容3.1 游戏策划本游戏一共4关,由易到难,每一关都有初化、按键处理、重置及退出功能。(1)初始化包括屏幕初始化和每一关卡的初始化,屏幕被初始化宽80像素,高25像素。(2)按键处理包括移动小瓢虫和移动箱子,通过移动上下左右键来控制小瓢虫的移动,从而推动箱子,以把箱子推到指定的目的地为过关。(3)每一关都可以重置,按空格键可以重置当前关。(4) 按Esc键可以在任何时候退出游戏。3.2 总体设计:3.2.1系统模块图 本设计包括5个模块,分别是初始化模块、图画模块、移动箱子模块、移动小瓢虫模块和功能控制模块。各个模块的功能描述如下。 (1)初始化模块 该模块包括屏幕初始化和游戏每一关的初始化。屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。 (2)图画模块 该模块主要是被其他模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小瓢虫和画目的地。 (3)移动箱子模块 该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。 (4)移动小人模块 该模块用于控制小人移动,从而推动箱子到目的地。 (5)功能控制模块 该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。系统功能模块图,如图1.1所示。 推箱子游戏初 始 化 模 块功 能 控 制 模 块画 图 模 块移 动 箱 子 模 块移 动 小 人 模 块图 1.1推箱子系统功能模块图3.2.2 逻辑结构设计逻辑结构设计主要是描述系统中各实体之间的关系,具体如图1.2所示:否否否否是是是是开始第一任务开始有无成功希望?显示通关信息提示结束程序按空格键回到任务开始按Esc键退出进入下一任务是否继续完成?是否成功?是否是第4关?图 1.2 推箱子系统E-R图3.3 关键算法3.3.1 人物设置:即在特定的坐标将人物画出。在ghouse数组中特定的坐标点用printman函数画出小人:void printman(int x,int y) gotoxy(y,x); _AL=02;_CX=01;_AH=0xa; geninterrupt(0x10); printman(2+4,4+10); 3.3.2 在特定的坐标点画出箱子,并写下b。在ghouse数组中特定的三个坐标设置三个箱子并由printbox函数给箱子写下b:/* 在特定的坐标上画箱子并用数组记录状态的函数 */ void printbox(int x,int y) putchxy(y-1,x-1,10,WHITE,BLACK); /*设置箱子,样式10,前景色 白色,背景色 黑色*/ghousexy=b; printbox(3+4,6+10); /*在特定的坐标点写下箱子*/printbox(3+4,7+10); printbox(4+4,7+10); 3.3.3 墙壁设置,在ghouse数组中画出墙壁并写下w。在ghouse数组中画出墙壁,并用printwall函数写下w: (通过for循环实现)/* 在特定的坐标上画墙壁并用数组记录状态的函数 */ void printwall(int x,int y) putchxy(y-1,x-1,219,MAGENTA,BLACK); /*x,y,219 样式参数,MAGENTA 前景色,BLACK 背景色(x,y初始值为1,所以减1)*/ghousexy=w; for(x=1,y=5;y=9;y+)/*初始化墙壁,根据printwall函数设置墙,重点:写上w*/printwall(x+4,y+10); for(y=5,x=2;x=5;x+) printwall(x+4,y+10); for(y=9,x=2;x=5;x+) printwall(x+4,y+10); for(y=1,x=3;x=8;x+) printwall(x+4,y+10); for(x=3,y=3;x=5;x+) printwall(x+4,y+10); for(x=5,y=8;x=9;x+) printwall(x+4,y+10); for(x=7,y=4;x=9;x+) printwall(x+4,y+10); for(x=9,y=5;y=7;y+) printwall(x+4,y+10); for(x=8,y=2;yx=x;(*pw)-y=y;(*pw)-p=NULL; /* - 结构体成员符*/ else /*存入信息后执行else语句,将链表进行连接*/ qw=(winer* )malloc(sizeof(winer); qw-x=x;qw-y=y;(*pw)-p=qw;(*pw)=qw;qw-p=NULL; 3.3.5 关卡设置:初始化箱子、目的地、墙壁、小人:通过for循环与printman,printbox,printwhiter1,printwall函数的调用进行初始化:(其他三关同理)/* 第一关的图象初始化 */ winer *inithouse1() int x,y; winer *win=NULL,*pw; gotoxy(8,2); printf(Level No.1);/*在指定地点显示关卡*/for(x=1,y=5;y=9;y+)/*初始化墙壁,根据printwall函数设置墙,重点:写上w*/printwall(x+4,y+10); for(y=5,x=2;x=5;x+) printwall(x+4,y+10); for(y=9,x=2;x=5;x+) printwall(x+4,y+10); for(y=1,x=3;x=8;x+) printwall(x+4,y+10); for(x=3,y=3;x=5;x+) printwall(x+4,y+10); for(x=5,y=8;x=9;x+) printwall(x+4,y+10); for(x=7,y=4;x=9;x+) printwall(x+4,y+10); for(x=9,y=5;y=7;y+) printwall(x+4,y+10); for(x=8,y=2;yxpw-y=m) s+; /* m(目的地) 能和i(箱子在目的地)进行转换*/pw=pw-p; if(s=0) /* 过关 */ free(win); gotoxy(25,2); printf(Congratulate! You have passed Level %d!,i+1); getch(); i+; switch(i) /*调出关卡*/ case 1: init(); win=inithouse2();break; case 2: init(); win=inithouse3();break; case 3: init(); win=inithouse4();break; case 4: gotoxy(8,14); printf(Great! You have passed all the levels! Press any key to quit!); key=0x011b;getch();break; default: break; while(key!=0x011b); _AL=3; _AH=0; geninterrupt(0x10); (3)do循环首先设计了一个while死循环,接收键盘信息,在进行switch循环将得到的键盘码进行操作(输入的键盘码在case语句中时)while(bioskey(1)=0); key=bioskey(0); /*bioskey 从键盘上返回数值*/switch(key) case 0x4800:move(x,y,u);break; /* 按下向上键后 */ case 0x5000:move(x,y,d);break; /* 按下向下键后 */ case 0x4b00:move(x,y,l);break; /* 按下向左键后 */ case 0x4d00:move(x,y,r);break; /* 按下向右键后 */ case 0x3920:reset(i);break; /* 按下空格键后 */ default:break; (4)接下来又有一个while循环,作用:触发判断和判断是否过关。原理:目的地只有两个时刻:m,i当有m时进行s+,当没有m时,从而执行if(s=0)语句进行判断过关过关之后进行i+,执行switch语句选关或执行语句s=0; /*switch 每执行一次就触发一次判断*/pw=win; while(pw) if(ghousepw-xpw-y=m) s+; /* m(目的地) 能和i(箱子在目的地)进行转换*/pw=pw-p; if(s=0) /* 过关 */ free(win); gotoxy(25,2); printf(Congratulate! You have passed Level %d!,i+1); getch(); i+; switch(i) /*调出关卡*/ case 1: init(); win=inithouse2();break; case 2: init(); win=inithouse3();break; case 3: init(); win=inithouse4();break; case 4: gotoxy(8,14); printf(Great! You have passed all the levels! Press any key to quit!); key=0x011b;getch();break; default: break; 3.3.9链表的作用:在特定的坐标上画目的地并用数组记录状态的函数。/* 在特定的坐标上画目的地并用数组记录状态的函数 */winer *qw; putchxy(y-1,x-1,*,YELLOW,BLACK); ghousexy=m; if(*win=NULL) /*刚输入时*win=null,if语句执行,将第一个目的地存入第一节点*/ *win=*pw=qw=(winer* )malloc(sizeof(winer); (*pw)-x=x;(*pw)-y=y;(*pw)-p=NULL; /* - 结构体成员符*/ else /*存入信息后执行else语句,将链表进行连接*/ qw=(winer* )malloc(sizeof(winer); qw-x=x;qw-y=y;(*pw)-p=qw;(*pw)=qw;qw-p=NULL; 3.3.10 judge判断特定坐标上的状态,根据ghouse得到的状态返回特定的值。/*记录3坐标点,从而在ghouse中进行访问,switch中才会返回出w、b、i、m相对应的值*/* 判断特定的坐标上的状态 */ int judge(int x,int y) int i; switch(ghousexy) case 0: i=1;break; case w: i=0;break; case b: i=2;break; case i: i=4;break; case m: i=3;break; default: break; return i; 3.3.11 如何触发判断与如何判断过关(1)如何触发判断,只要有移动就触发有M变为I时:如s=0; pw=win; while(pw) if(ghousepw-xpw-y=m) s+; /* m(目的地) 能和i(箱子在目的地)进行转换*/pw=pw-p; 解析:通过链表对其处理,当有m时,s+,从而知道有多少个m(2)判断过关:当所有M变为I时,即S=0过关s=0; pw=win; while(pw) if(ghousepw-xpw-y=m) s+; /* m(目的地) 能和i(箱子在目的地)进行转换*/pw=pw-p; if(s=0) /* 过关条件 */ free(win); gotoxy(25,2); printf(Congratulate! You have passed Level %d!,i+1); getch(); 3.3.12 如何与键盘结合:通过while,bioskey,switch的结合接收键盘信息和对操作的处理:while(bioskey(1)=0); key=bioskey(0); /*bioskey 从键盘上返回数值*/switch(key) case 0x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Lesson 4 A birthday card教学设计-2025-2026学年初中英语冀教版2024七年级上册-冀教版2024
- 4.6 汽化与液化第二课时说课稿-2025-2026学年浙教版七年级上册科学
- 2025年中考化学试题分类汇编:常见仪器及基本操作(第1期)解析版
- 第三节 可再生资源的利用与保护-以土地资源为例说课稿-2025-2026学年高中地理湘教版选修Ⅵ环境保护-湘教版2004
- 蓄电池的结构组成
- 2025年天津市河西区中考二模物理试题(解析版)
- 蓄电池安全管理课件
- 蓄电池基本知识课件
- 2025年山东省青岛市中考化学试题(含答案)
- 2025年人教版八年级英语上册各单元词汇知识点和语法讲解与练习(有答案详解)
- 信息通信建设工程预算定额 (2017版)第四册+通信线路工程预算定额
- 发电机常规试验作业指导书
- 无张力疝修补术后损伤与并发症
- 人教版四年级语文上册全册全套课件
- 10饭店人际交往与沟通课件
- 2022年成都中医药大学辅导员招聘考试试题及答案解析
- 大班 语言社会 我升大班啦 课件
- 6.授权文件待修改大华服务承诺函
- 项目管理(PMBOK)讲义全套
- 2022中华慈善日PPT课件模板
- 典范英语5a_01
评论
0/150
提交评论