c语言程序贪吃蛇课程设计报告范文.doc

上传人:marr****208 文档编号:141320359 上传时间:2020-08-06 格式:DOC 页数:16 大小:78KB
返回 下载 相关 举报
c语言程序贪吃蛇课程设计报告范文.doc_第1页
第1页 / 共16页
c语言程序贪吃蛇课程设计报告范文.doc_第2页
第2页 / 共16页
c语言程序贪吃蛇课程设计报告范文.doc_第3页
第3页 / 共16页
c语言程序贪吃蛇课程设计报告范文.doc_第4页
第4页 / 共16页
c语言程序贪吃蛇课程设计报告范文.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《c语言程序贪吃蛇课程设计报告范文.doc》由会员分享,可在线阅读,更多相关《c语言程序贪吃蛇课程设计报告范文.doc(16页珍藏版)》请在金锄头文库上搜索。

1、山东工商学院 信电学院 自动111班 第一组“贪吃蛇课程设计报告“高级语言程序设计课程设计报告Experiment Designing reporter课程名称 : 高级语言程序设计英文名称 : C Program Experiment Designing 专 业 : 自动化 111学 号 : XXX 姓 名 : XXX指导教师 : XXX 日 期: 2012 年 6月 17日至 2011 年6 月 20 日 山东工商学院信电学院 一 : 课程设计内容 程序功能介绍贪吃蛇游戏是一个经典小游戏,深受众多玩家喜爱,其规则是:一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上

2、下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。此游戏不仅能锻炼人的思维敏捷性,而且还可以提高玩家的逻辑判断能力。设计思路我们小组称设计本次课题贪吃蛇的思路为“贪快速上手贪吃蛇三步曲”:第一步: 寻找到一个真正可以运行的已用C编好的贪吃蛇。因为我们毕竟从未看到过用C编游戏的程序,让我们两手一抹黑的开始编写是有一定的困难的,如果我们自己找一个已经设计好的程序,以此为跳板实现我们想要达到的效果,那么肯定是高效的。所以我们组统一决定,去寻找一个可以运行的C编译的贪吃蛇。第二步:运行游戏并了

3、解游戏程序。我们认为,只有你运行并了解一个游戏,才能知道游戏里需要什么样的改进和创新,如果你自己本身就没玩过这个游戏,那么你就是再有技术,你也永远改进和改编不了一个游戏,因为你根本不知道你在干什么。 同样重要的是了解游戏程序。因为只有看懂了程序,才能实现对他的改编,才能游刃有余。第三步: 寻找模块并分类,而后进行改编。 寻找到你想要改变的游戏内容的控制模块,比如,我想要增加一堵墙,那么就应该找到void DrawK(void) setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH);for(i=200;i=500;i+=10) rectangl

4、e(i,200,i+10,209); 然后要找到:改变蛇初始长度、颜色、初始位置的模块,改变苹果出现位置的模块,让蛇见墙死的模块,让蛇吃苹果加长的模块.并且进行分类,这样下次再想实现某个目标时,可以一目了然的进行改编。对于找到的模块如何进行改编呢?怎么才能知道某个数值或函数代表什么呢?我们有两个方法:1.)看名字,比如snakecolor(),很明显他的意思是蛇的颜色。2.)控制变量猜想,比如设置墙的时候for(i=200;i=500;i+=10); rectangle(i,300,i+10,309); 中的200,500,300,209 代表什么呢? 我们可以猜想:它很像是坐标上的(x,y)

5、的格式,是不是呢?可可以先让其他数值不变,只让309改变,改变后发现上面的墙变粗了,由此可见这个数字控制的是一堵墙的最下面一行的坐标。l 关于该程序的 相关分析思路答题模板 : 1 . 贪吃蛇程序流程图 如下 :撞墙或撞自己开始筑墙设计出现食物蛇移动吃食物GAME OVER蛇死?是否二.贪吃蛇程序的改编 :经过小组成员的认真研究 我们对其进行了 如下改编l 第一步 加墙void DrawK(void)/*setbkcolor(MAGENTA);*/ setcolor(5); / 可以改变颜色 setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/横向上的

6、墙: for(i=100;i=600;i+=10)/ 本行代表行坐标上:100代表墙的初始位置,i=600代表墙的结尾。 rectangle(i,60,i+10,69); /本行代表纵坐标上:60代表墙的最上面一行的位置,69代表墙最下面一行的位置。69-60=9,9代表墙块的厚度纵向上的墙:for(i=100;i=400;i+=10)/本行代表纵坐标上:100代表墙的初始位置,i190&snake.x0=200& snake.y0=215) /*其中,对x,y范围的控制,实际是对蛇撞击的死亡区域的限制。*/ GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/

7、 相应的新添加的墙。for(i=200;i=500;i+=10)/*画围墙*/ rectangle(i,200,i+10,209); /*指定位置*/l 第三步食物的定点出现 if(food.yes=1)/*需要出现新食物*/这里说明一下:rand() 产生0-65535的数,在limits.h里有定义%400后产生一个0-399的数+60 则为 60 459,即:%400+60意思是在60399之间随机产生一个数。 food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以

8、让蛇吃到*/ food.x+; while(food.y%10!=0) food.y+; food.yes=0;/*画面上有食物了*/ 如果将food.x=(常数a)那么食物就会出现在x=a行的随机列,对于food.y=(常数b)那么食物就出现在y=b列的随机行。l 第四步对食物墙壁的颜色以及对蛇的运动速个性化调节setcolor(4);/ 对颜色的调整 int gamespeed=50000;/*游戏速度自己调整*/ 通过改变变量的值 ,就可以个性化选择自己喜欢的颜色 , 这将是一场别开生面的游戏界面。* 红色代表解析 浅蓝代表提示三 .课程设计总结有言曰:“实践出真知”,在这几天的课程设计

9、实践中,我们组三人真正的体会到了这句话的真谛。在经历了一学期的C语言学习后,我们从以往的“纸上谈兵”直接过渡到“实际作战”。我们实现了让静态的程序变成动态的游戏效果,虽然我们只是改编了一下别人做好的程序,但我们同样由此获益匪浅,感触颇深,当然也发现了许多自己的不足。首先,在我们刚刚进行第一步“寻找程序”的时候,就被搁浅了,因为我们发现,在网上能找到一个真正符合我们使用标准的程序很难,就是找到了几个也没有能运行它们的程序。我们花费了前两天的时间来寻找能够使用的程序和软件,但最后还是一无所获,正当我们一筹莫展的时候,我们的导师杨老师给我们带来了曙光,使得我们在黑暗中找到了希望的光明,杨老师给我们传

10、来了一个上届师哥做好的程序,并且把它的运行软件也给了我们,这对我们来说无疑是雪中送炭,得到这个程序后,我们三个人看到了C语言运行一个游戏的流程和方法,我们脑中也大概有了一个思路。我们三个人以此程序为跳板,直接开始对程序模块进行挑选,因为我们已经浪费了两天,所以我们决定进行分工作业,分别去寻找:筑墙模块,加苹果模块,撞墙死模块。最后我们用了一下午时间完成了三大步中的前两大步和第三步的第一部分,剩下的就是最重要而充满挑战的改编了,从以上的操作中,让我们明白了找对一个平台的重要性,这个平台就是老师给我们的程序,就是我们的前进方向。没有了方向了的征程,一开始就是个错误。在我们寻找程序模块的时候,我们对

11、于程序中的很多东西都是模模糊糊的概念,比如struck是什么,比如for语句的使用,以及for语句的循环体是什么,当然我们也发现了定义字符在长的程序中的方便与重要性。还有就是我们发现程序在编写时的规范性很重要,比如同级别花括号的位置的对应,对应好了,模块就好找,对应不好就很乱。还有定义函数及变量的时候,函数名字和变量名最好是见名知意,比如我们所看的程序中,gamespeed,snakecolour,food. 在最后的攻坚阶段,为了实现对程序的改编,我们使用控制变量猜想法是正确的选择,比如设置墙的时候for(i=200;i=500;i+=10); rectangle(i,300,i+10,30

12、9); 中的200,500,300,209 代表什么呢? 我们猜想:它很像是坐标上的(x,y)的格式,是不是呢?我们先让其他数值不变,只让309改变,改变后发现上面的墙变粗了,由此我们知道这个数字控制的是一堵墙的最下面一行的坐标。我们用这个方法知道了其他很多数值的用途。我们用这种方法先是知道了如何设置一堵墙,在我们欣喜设置一堵墙以后才发现:蛇撞了墙后不死。在我们进行了全局来看以后才知道,原来设计一堵墙,都要再设计一个if语句来使得蛇在这个范围内会死亡。并且我们发现在设计这个if语句的时候,不仅要计算好墙的坐标,而且还要用好逻辑语言(&,| !)同时语句的运算顺序也很重要。刚一开始我们忽略的&和

13、关系运算符级别的高低,使得我们设计的墙,总是撞不死蛇,为此我们很是恼火,着急的组员还在这里发生了点小摩擦,由此可见C语言的严谨性!最后我们又通过在网上查找信息,知道了随机数发生器randomize()的用法:rand()=x%+d 意思是说在d(x-1)之间随机产生一个数字。我们很自然的联想到,如果把food.x等于常数a; 把food.y等于一个;x%+d的随机数,那不就能固定只在某一行出现苹果了吗?所以我们觉得,充分利用手边的资源也是很重要的,毕竟C语言很高深,课本上的东西总是有限的,要想知道更多的东西还需多练习,多查阅资料。 总之:革命尚未成功,通知还需努力啊! 四 个人感受:汤X: 就我个人而言,这次课程设计,我觉得我最大的收获就是:我明白了,我们其实真的没那么厉害,我们真的还有很多东西不会,我们真的连课本上的基本东西都没掌握,课本上的东西,真的也只是C语言这个大海中的一滴水而已。而在我本人还没有掌握好课本的知识点的情况下,做起这个程序自然很费事,一个简单的课本P293讲到的struct结构体,我一开始竟然忘记它是什么意思,不知

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号