




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计实训报告姓 名 专 业 班 级 指导教师 二011 年 7 月 14 日目录1实训目的和要求11.1实训目的和任务11.2实训要求12实训任务内容12.1游戏规则12.2流程设计23软件使用说明33.1编辑程序主要软件33.2编辑程序辅助软件33.3程序使用过程33.3.1贪吃蛇进入33.3.2贪吃蛇的玩法43.3.3贪吃蛇的结束44实训心得和体会54.1实训的心得54.2实训的体会5参考文献5附录:部分程序清单618181 实训目的和要求1.1 实训目的和任务1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 实训要求1. 分析实训题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用4. 设计完成后提交实训报告2 实训任务内容2.1 游戏规则通过一个学期对C语言程序设计的学习,经过实训,完善我们对C语言学习的漏洞和未学会的知识点,更加熟练的掌握C语言程序设计,锻炼我们独立自主设计程序编辑代码的能力,通过设计出来的程序,提高我们对C语言学习的兴趣,玩家通过键盘控制蛇在地图上寻找食物,蛇吃蛇食物,可以加分,碰到四壁游戏结束。2.2 流程设计贪吃蛇流程图如图1所示贪吃蛇的初始位置贪吃蛇初始长度贪吃蛇的颜色贪吃蛇的初始化程序的开始界面食物的初始位置贪吃蛇的区域:16*16判断游戏是否继续:贪吃蛇不可以碰壁、碰自身,否则游戏结束。贪吃蛇的判断(详细如图2所示)贪吃蛇判断蛇体是否连续:吃食后如果身体连续则继续,否则停止。贪吃蛇程序的运行显示得分和退出。贪吃蛇游戏的结束图1贪吃蛇流程图贪吃蛇运行说明图如图2所示利用全程标记法标记身体各段和头部,更改它们的坐标来完成键盘上下左右键控制贪吃蛇的走位,按反方向的键停止。贪吃蛇程序的运行食物利用随机函数随机产生,吃掉贪吃蛇身体加一,另加十分。图2贪吃蛇运行说明图3 软件使用说明3.1 编辑程序主要软件对于这次实训,主要使用的软件是VC+6.0,在平日的学习中,我们也经常使用这种软件进行编程,已基本掌握此软件的用法,所以在此次实训中,我还是主要使用VC+6.03.2 编辑程序辅助软件辅助软件有turboc,因为在贪吃蛇程序代码设计阶段,VC+6.0需要自己人工绘图,还没有熟练掌握绘图功能时,我使用turboc 调用graphics中的函数避免了人工绘图的麻烦,利用turboc软件进行调试其他函数部分,待人工绘图结束后重新回归VC+6.0。3.3 程序使用过程3.3.1 贪吃蛇进入程序初始界面如图3所示,点击任意键进入游戏.图3 程序初始界面3.3.2 贪吃蛇的玩法贪吃蛇玩法如图4所示,使用键盘上的上下左右键,进行控制,使蛇头碰到图中的食物。图4贪吃蛇玩法3.3.3 贪吃蛇的结束游戏结束界面如图5所示,游戏结束后,会显示玩家的得分,按ESC退出,按任意键重新开始。图5游戏结束界面4 实训心得和体会4.1 实训的心得由于所学有限,自己经验不足,代码经常出现错误,一步一步总算流畅的进行下来,但在过程中也遇到不少问题,比如贪吃蛇在吃食物过程中如何实现进行加分,这个问题一直想了好久都未想出来,最后请老师帮忙解决,最终是用了一个全局变量和一次函数才显示出了加分的提示,可谓不易。问题出现不少,但总得一个一个解决,比如,在实训当中遇到一些函数,之前未学,自己只能上网查询,一步一步重新学起,自己学习自己不会的东西,学成之后,很有满足感,而且自己的信心又增强了。4.2 实训的体会实训过程中,不仅是考察一个人的编程能力,更多的还是考察一个人的耐心,对C语言编程感兴趣,才会更加投入的进行下去,眼看C语言已经学完了,自己多少还是掌握了一些技巧和规则。然而自己所学毕竟有限,在编写贪吃蛇过程中感觉并不轻松,查阅了大量资料,但总归还是做了下来,如同一场马拉松,最终还是坚持到了最后,感觉很满足。实训不仅锻炼了我们的编程能力,更加让我们懂得坚持就是胜利,为我们以后在学习软件过程中点亮了灯塔,如果在漆黑的夜晚中迷失了方向,只要我们想起实训中我们从未放弃,就可以为我们指明方向,继续奋斗坚持下去。对于所学知识,我必须要说,通过实训不仅我查漏补缺,搞清了许多以前在C语言中的漏洞,使我的C语言知识更加全面了,而且还让我巩固了一些不熟练的操作,比如一些自定义函数,自己不太熟练,通过实训过程中几十次的调用,熟能生巧,让我运用起来更加熟练了,十分开心。我想实训对我而言,不单单是对学习的一种巩固,更多的还是一种精神上的锻炼,锻炼我们为今后的工作和学习作了铺垫,我们可以在今后的学习或者工作当中运用这次实训所体验出来的坚持不懈的精神,不断的加强自己各方面的能力。我想,这次实训对我们而言是宝贵的,更是无法替代的,我很感激老师和学校能提供我们这样一个机会,让我们可以学到专业知识以外的东西,这对我们来说,不单单是怎么样处理问题,而是培养了我们坚持不懈的精神,让我们更加有信心和勇气去面对将来更大的挑战。参考文献1 刘振安,刘燕君.C程序设计课程设计M.北京:机械工业出版社,2004年9月2 谭浩强.C程序设计(第三版).清华大学出版社,2005年7月3 严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社,1997年4月4 张岳新,Visual C+ 程序设计.苏州大学出版社,2007年12月5 徐宝文,The C Programming Language .机械工业出版社,2004年1月6 黄明,梁旭,周绍斌,Visual C+ 信息系统设计与开发实例.机械工业出版社, 2005年3月7 AL KELLEY等著,麻志毅译.C语言解析教程.北京:机械工业出版社,2002年8 李志球,实用C语言程序设计教程.北京:电子工业出版社,1999年9 王立柱,C/C+与数据结构.北京:清华大学出版社,2002年10 李大友,C语言程序设计.清华大学出版社,1999年附录:部分程序清单#include#include#include#include#include#define HEAD 300#define FOOD 400int point=0;void welc() printf(nnnnnnttt欢迎来到游戏世界贪吃蛇nn); printf(ttt此游戏用键盘的方向键控制即可。n); printf(nttt相反的方向的话是暂停。n); printf(nttt请按任意键进入游戏。); getch();void drawpt(int a,int x,int y)/人工画图程序 if(x=0) printf(tt); return ; if(y=0) printf(ttt); return ; if(x=16)/其中,规定区域长度是16*16 printf(n); return ; if(y=16) /其中,规定区域长度是16*16 printf(tt); if(x0&x0&y16) if(a=0) printf(); else printf(); return ; void draw(int (*sna)17) int i,j; system(cls); for(i=0;i17;i+) for(j=0;j17;j+) drawpt(snaij,j,i); printf (总成绩为%d,point);int randno() srand(time(NULL); /运用随机函数,取随机数,出现食物用 return rand()%15+1;/判断游戏是否结束bool judgeGO(int (*sna)17) int x,y,i=0,max=0,count=0; for(x=0,y=0;y17;y+) if(snaxy=HEAD)/判断头部是否在最外层的。 return false; for(x=16,y=0;y17;y+) if(snaxy=HEAD) return false; for(y=0,x=0;x17;x+) if(snaxy=HEAD) return false; for(y=16,x=0;x17;x+) if(snaxy=HEAD) return false; for(x=0;x16;x+) for(y=0;y16;y+) if(maxsnaxy) if(snaxy!=HEAD&snaxy!=FOOD) max=snaxy;/这个也是求头部之后的/ for(i=0;imax;i+) for(x=1;x16;x+) for(y=1;y16;y+) if(snaxy=i+1) count+;/吃一个食物,贪吃蛇长度加一/ point=(count-3)*10; if(count!=max)/判断身体部分是否连续/ return false; return true;/游戏结束显示/void gameover() system(cls); printf(nnnnnnnn); printf(tttt); printf(游戏结束n); printf(nnn);printf(tttt您的得分为:%d,point);printf(ttt); printf(nnnttt按Esc键退出,按任意键重新开始。n);/*-*/*全程标记法,从尾巴开始123456.HEAD,食物是FOOD。*/void marksn() void downmove(int (*sna)17); void upmove(int (*sna)17); void leftmove(int (*sna)17); void rightmove(int (*sna)17); int judgeF(int (*sna)17,int keym); int snake1717=0;/-各种东西初始化-/ int x=10,y=10,key,key1;/食物的初始位置(10,10) snake11=1;/贪吃蛇身体的初试位置 snake12=2; snake13=3; snake23=HEAD;/贪吃蛇头的初试位置 while(snakexy!=0) x=randno(); y=randno(); snakexy=FOOD; draw(snake);/*-*/*-控制的部分-*/ while(judgeGO(snake) key=getch(); switch(key) case 72:/向上键控制贪吃蛇往上 while(!kbhit()&key1!=80&judgeGO(snake) if(judgeF(snake,key) draw(snake); Sleep(100); continue; upmove(snake); draw(snake); key1=key;/这里的key1是就来标记上一步的方向,这样相反的方向就暂停了。 Sleep(100); break; case 80:/向下键控制贪吃蛇往下 while(!kbhit()&key1!=72&judgeGO(snake) if(judgeF(snake,key) draw(snake); Sleep(100); continue; downmove(snake); draw(snake); key1=key; Sleep(100); break; case 75:/方向左键控制贪吃蛇往左走 while(!kbhit()&key1!=77&judgeGO(snake) if(judgeF(snake,key) draw(snake); Sleep(100); continue; leftmove(snake); draw(snake); key1=key; Sleep(100); break; case 77:/方向右键控制贪吃蛇往右走 while(!kbhit()&key1!=75&judgeGO(snake) if(judgeF(snake,key) draw(snake); Sleep(100); continue; rightmove(snake); draw(snake); key1=key; Sleep(100); break; case 27:/键盘的综合应用 exit(0); default: switch(key1) case 72: while(!kbhit()&judgeGO(snake) upmove(snake); draw(snake); break; case 80: while(!kbhit()&judgeGO(snake) downmove(snake); draw(snake); break; case 75: while(!kbhit()&judgeGO(snake) leftmove(snake); draw(snake); break; case 77: while(!kbhit()&judgeGO(snake) ) rightmove(snake); draw(snake); break; /是否继续游戏 gameover(); if(getch()=27) exit(0); else marksn(); getch(); /上下左右移动void downmove(int (*sna)17) int x=0,y=0,mark=0; for(x=0;x16;x+) for(y=0;y16;y+) if(snaxy!=0&snaxy!=HEAD&snaxy!=FOOD) snaxy=snaxy-1;/前面已经说了,12345.标记法,减去1的话,除了头部以外其他的就移动了。 for(x=0;x16;x+) for(y=0;y16;y+) if(marksnaxy) if(snaxy!=HEAD&snaxy!=FOOD) mark=snaxy;/这个是求头部之后的值。 for(x=0;x16;x+) for(y=0;y16;y+) if(snaxy=HEAD) snax+1y=HEAD;/头部的移动, snaxy=mark+1;/头部的赋值。 return; void upmove(int (*sna)17) int x=0,y=0,mark=0; for(x=0;x16;x+) for(y=0;y16;y+) if(snaxy!=0&snaxy!=HEAD&snaxy!=FOOD) snaxy=snaxy-1;/前面已经说了,12345.标记法,减去1的话,除了头部以外其他的就移动了。 for(x=0;x16;x+) for(y=0;y16;y+) if(marksnaxy) if(snaxy!=HEAD&snaxy!=FOOD) mark=snaxy; for(x=0;x16;x+) for(y=0;y16;y+) if(snaxy=HEAD) snax-1y=HEAD;/头部的移动, snaxy=mark+1;/头部的赋值。 return; void leftmove(int (*sna)17) int x=0,y=0,mark=0; for(x=0;x16;x+) for(y=0;y16;y+) if(snaxy!=0&snaxy!=HEAD&snaxy!=FOOD) snaxy=snaxy-1;/前面已经说了,12345.标记法,减去1的话,除了头部以外其他的就移动了。 for(x=0;x16;x+) for(y=0;y16;y+) if(marksnaxy) if(snaxy!=HEAD&snaxy!=FOOD) mark=snaxy; for(x=0;x16;x+) for(y=0;y16;y+) if(snaxy=HEAD) snaxy-1=HEAD;/头部的移动, snaxy=mark+1;/头部的赋值。 return; void rightmove(int (*sna)17) int x=0,y=0,mark=0; for(x=0;x16;x+) for(y=0;y16;y+) if(snaxy!=0&snaxy!=HEAD&snaxy!=FOOD) snaxy=snaxy-1;/前面已经说了,12345.标记法,减去1的话,除了头部以外其他的就移动了。 for(x=0;x16;x+) for(y=0;y16;y+) if(marksnaxy) if(snaxy!=HEAD&snaxy!=FOOD) mark=snaxy; for(x=0;x16;x+) for(y=0;y16;y+) if(snaxy=HEAD) snaxy+1=HEAD;/头部的移动,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年衢州常山县高层次、紧缺医疗卫生人才招聘3人备考练习题库及答案解析
- 2025年河南工学院招聘博士60名备考练习题库及答案解析
- 供水住宅出租合同范本
- 2025江苏镇江市市级机关遴选和选调公务员31人备考练习题库及答案解析
- 2025年消化内科肝胆胰疾病诊疗技巧考核答案及解析
- 2025年西安市鹿原中学教师招聘备考练习试题及答案解析
- 包餐厅保洁合同范本
- 2025年临床检查技术简述题试卷答案及解析
- 2025年焦作武陟县特岗教师招聘递补备考练习题库及答案解析
- 种树劳动务工合同范本
- 肾脏肿瘤影像学诊断策略
- 2023年内蒙古化工职业学院单招笔试职业技能考试题库及答案解析
- GB/T 13871.1-2022密封元件为弹性体材料的旋转轴唇形密封圈第1部分:尺寸和公差
- GB/T 41696-2022下肢康复训练设备的分类及通用技术条件
- GB/T 2423.7-1995电工电子产品环境试验第2部分:试验方法试验Ec和导则:倾跌与翻倒(主要用于设备型样品)
- 西师版四年级数学上册第一单元测试题(A)
- 花甲水库库底清理实施方案(修订稿)
- 中医李源生针拔法治疗脑胶质瘤
- 麻醉科诊疗规范与操作常规
- 《红楼梦》中的服饰文化共38张课件
- 通风空调投标技术标版
评论
0/150
提交评论