



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计报告题目:贪吃蛇游戏的程序设计院系:西语学院英语教育 6 班姓名:学号:1.1题目:设计贪吃蛇小游戏1.2题目的要求:玩家通过键盘控制蛇在地图上寻找食物,蛇吃下食物, 可以加分, 碰到四壁游戏结束。1.3设计的步骤:分析设计题目的要求,即需求分析。总体设计,确定所需模块及模块间调用关系,定义系统中使用的数据类型。详细设计,确定每个模块的功能,绘制主要函数的流程图。编写程序代码, 调试程序使其能正确运行。 要求书写规范, 注意采用缩进格式。函数名、变量名要见文晓意,注释要简而不失、详而不缀。设计完成的软件要便于操作和使用。程序测试,发现程序中存在的错误并改正。完成报告。2 详细设计
2、说明2.1课程设计的要求:通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。收集资料,分析课题,分解问题,形成总体设计思路;对于设计中用到的关键函数, 要学会通过查资料, 弄懂其用法, 要联系问题进行具体介绍;上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;完成课程设计报告。2.2程序的功能:贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记 10 分,接着又出现食物,等待蛇来吃,如果蛇在
3、移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。2.3课程设计的思想 :程序关键在于表示蛇的图形及蛇的移动。用一个小圆点来表示蛇的一节身体,身体每长一节,增加一个圆点,蛇头用四节来表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,如果按与蛇运动方向相反的方向键,此游戏就会暂停,再按想前的方向键才能继续游戏,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所
4、以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画一个圆点和覆盖原来的圆点。为了便于理解,定义两个结构体:食物与蛇。2.4设计程序中的调试过程在调试过程中,遇到了很多的问题,比如,因为使用的刷屏函数,所以屏幕经常出现闪烁的情况,但是通过我和我的伙伴们的共同努力和学习,通过网上和书籍的查阅,我们也得到了很多的收获,我们的小组也在中真正的学会了很多的东西,这次实训给我们带来了很大的收获。 可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。2.5设计的流程图总程序设计图如图1 所示:欢迎
5、词和游戏开始游戏初试化界面和方向键Y控制是否吃到NNY蛇变长,并总Y是否碰壁游戏结N图 1程序设计流程图方向键控制的设计流程图如图2 所示:其中 upmove函数控制蛇向上运动, downmove函数控制蛇向下运动, leftmove 函数控制蛇向左运动, rightmove 函数控制蛇向右运动。按方向按方向按方向按方向则使用函数则使用函数则使用函数则使用函数通过方向键图 2 方向键控制方向键控制的设计流程图蛇吃食物蛇身变长的设计流程图如图3 所示:通过控制部N是否能Y通过使用函数:Count+score=(count图 3蛇吃食物蛇身变长的设计流程图2.6程序的总体设计思想利用人工绘图法 ,
6、 制作美观的游戏界面.通过随机函数产生随机数, 控制游戏过程食物的出现.定义键盘操作 , 控制游戏过程蛇的移动方向.画出边界 , 并判断游戏是否结束.统计游戏过程蛇吃的食物数量, 计算并输出游戏成绩.3 软件的使用说明3.1 建立游戏的过程说明先打开 Microssft Visual C+程序,进入Microssft Visual C+程序后打开文件菜单,点机新键命令按钮,先建立一个Win32 Console Application工程,建立工程时可填写工程名称和你所建工成要存放的位置,点机确定按钮, 再点机一个空工程类型的控制台程序,再点机完成,然后点机确定按钮,此时一个所要建立的工程就已经
7、建立好,然后再点机文件中的新建按钮,然后再建立一个C+ SourceFile文件,并填写文件名称,然后点机确定按钮,此时所要建立的工程和文件都已建立完毕, 此时您就可以把贪吃蛇游戏的代码复制粘贴到你刚刚建立的工程和文件里面了, 然后点机组建命令中的编译和组建命令,最后点机执行命令就可进入贪吃蛇游戏中了。3.2执行游戏的过程说明进入贪吃蛇游行中后,首先弹出一个界面,上面出现的是欢迎词和游戏的简单说明,可点机任意键开始游戏,此游戏是由键盘的四个方向键进行控制的,吃一个点,蛇身就长长一端,总分数就加 10 分,如果碰壁或结尾游戏则结束,最后出先一个界面,上面显示你此次游戏的总分数。希望我这个小游戏能
8、让你玩的开心。5. 收获及体会在设计这个程序中我主要学会了如何运用以下有关C 语言和 C+的知识:1)? 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序?十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。2)? 分析函数先从main() 函数入手。 Main() 函数是 C+源程序编译时的开始, ?从 main() 函数开始读函数可将其他函数的功能理解得更透彻。3)? 在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出?来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。4)? 我还了解了很多的库函数的作用,如
9、字符串函数中有很多对字符串进行处理的函数,起功能我都有所了解。5 )学会了有关头文件的使用方法,及系统调配问题的解决方法等。6 )在调试过程中,遇到了很多的问题,比如,因为使用的刷屏函数,所以屏幕经常出现闪烁的情况,但是通过我和我的伙伴们的共同努力和学习,通过网上和书籍的查阅,我们也得到了很多的收获,我们的小组也在中真正的学会了很多的东西,这次实训给我们带来了很大的收获。 可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。附录部分程序代码清单#include<stdio.h&g
10、t;#include<stdlib.h>#include<conio.h>#include<time.h>#include<windows.h>#define HEAD 300#define FOOD 400#definev_sleep 100/* 改变 sleep 的大小可改变蛇的运动速度,此数值越小蛇的运动速度越快 */int score=0; /*定义了一个全局变量来在整个程序中统计总成绩*/*-欢迎词 -*/void welc()printf("nnnnnnttt欢迎来到【贪吃蛇】小游戏nn");printf(&quo
11、t;ttt蛇身加长一段就加10 分nn");printf("tt此游戏用键盘的方向键控制即可。若想退出请按Esc 建。 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");ret
12、urn ;if(x=16)printf("n");return ;if(y=16)printf("t");if(x>0&&x<16&&y>0&&y<16)if(a=0)printf(" ");/*用空心圆来表蛇改运动的总范围*/else printf(" ");/*用实心圆来蛇的长度和食物的出现地点*/return ;void draw(int (*sna)17)int i,j;system("cls"); /*刷屏工具 *
13、/for(i=0;i<17;i+) /*区域范围的大小 */for(j=0;j<17;j+)drawpt(snaij,j,i);printf ("ttt总成绩为 %d分",score);/*-*/*-取随机数,出现食物用-*/int randno() /*利用这个随机函数来控制食物的随机出现*/srand(time(NULL);随机函数出现食物时的范围,防止食物出现在范围之外/*-*/*-判断游戏是否结束-*/bool judgeGO(int (*sna)17)int x,y,i=0,max=0,count=0;for(x=0,y=0;y<17;y+)if
14、(snaxy=HEAD)/*判断头部是否在最外层的*/return false;for(x=16,y=0;y<17;y+)if(snaxy=HEAD)return false;for(y=0,x=0;x<17;x+)if(snaxy=HEAD)return false;for(y=16,x=0;x<17;x+)if(snaxy=HEAD)return false;for(x=0;x<16;x+)for(y=0;y<16;y+)if(max<snaxy)if(snaxy!=HEAD&&snaxy!=FOOD)max=snaxy;/*这个也是求头
15、部之后的*/for(i=0;i<max;i+)for(x=1;x<16;x+)for(y=1;y<16;y+)if(snaxy=i+1)count+;/*这个判断想了好久的*/score=(count-3)*10;/*计算蛇的总成绩 */if(count!=max)/*判断身体部分是否连续*/return false;return true;/*-*/*-游戏结束显示 -*/void gameover()system("cls");printf("nnnnnnnn");printf("tttt");printf(&q
16、uot;游戏结束 nn");printf("tttt");printf ("此次总成绩为 %d分 nn",score);printf("tttt");printf ("请您再接再厉 nn");printf("ttt");printf("按 Esc 键退出,按任意键重新开始。n");/*-*/* 全程标记法,从尾巴开始123456.HEAD ,食物是 FOOD。*/void marksn()void downmove(int (*sna)17);/*用键盘的方向键的下
17、键来控制蛇向下运动*/void upmove(int (*sna)17);/*用键盘的方向键的上键来控制蛇向上运动*/void leftmove(int (*sna)17);/*用键盘的方向键的左键来控制蛇向左运动*/voidrightmove(int(*sna)17);/*用键盘的方向键的右键来控制蛇向右运动*/int judgeF(int (*sna)17,int keym);int snake1717=0;/*-各种东西初始化int x=1,y=7,key,key1;snake11=1;snake12=2;snake13=3;snake23=HEAD;while(snakexy!=0)-
18、*/x=randno();y=randno();snakexy=FOOD;draw(snake);/*-*/*-控制的部分 -*/while(judgeGO(snake)key=getch();switch(key)case 72:while(!kbhit()&&key1!=80&&judgeGO(snake)/*这个函数 kbhit ()自己查一下吧 控制输入很好 */if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函数在着是个延迟函数,也可在呈现头改变 v_sleep 的大小来控制蛇的运动速度*/c
19、ontinue;upmove(snake);/*用键盘的方向键的上键来控制蛇向上运动*/draw(snake);key1=key;/*这里的 key1 是就来标记上一步的方向,这样相反的方向就暂停了 */Sleep(v_sleep);/*Sleep函数在着是个延迟函数,也可在呈现头改变v_sleep 的大小来控制蛇的运动速度*/break;case 80:while(!kbhit()&&key1!=72&&judgeGO(snake)if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函数在着是个延迟函数,
20、也可在呈现头改变 v_sleep 的大小来控制蛇的运动速度 */ continue;downmove(snake);/*用键盘的方向键的下键来控制蛇向下运动*/draw(snake);key1=key;Sleep(v_sleep);/*Sleep函数在着是个延迟函数,也可在呈现头改变v_sleep 的大小来控制蛇的运动速度*/break;case 75:while(!kbhit()&&key1!=77&&judgeGO(snake)if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函数在着是个延迟函数,也
21、可在呈现头改变 v_sleep 的大小来控制蛇的运动速度 */ continue;leftmove(snake);/*用键盘的方向键的左键来控制蛇向左运动*/draw(snake);key1=key;Sleep(v_sleep);/*Sleep函数在着是个延迟函数,也可在呈现头改变v_sleep 的大小来控制蛇的运动速度*/break;case 77:while(!kbhit()&&key1!=75&&judgeGO(snake)if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函数在着是个延迟函数,也可
22、在呈现头改变 v_sleep 的大小来控制蛇的运动速度 */ continue;rightmove(snake);/*用键盘的方向键的右键来控制蛇向右运动*/draw(snake);key1=key;Sleep(v_sleep);/*Sleep函数在着是个延迟函数,也可在呈现头改变v_sleep 的大小来控制蛇的运动速度*/break;case 27:exit(0);default:switch(key1)case 72:while(!kbhit()&&judgeGO(snake)upmove(snake);/*上键函数控制蛇向上运动*/draw(snake);break;ca
23、se 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;/*-*/*-是否继续游戏-*
24、/gameover();/*判断游戏是否继续的函数*/exit(0);elsemarksn();getch();/*-*/*-*/*-上下左右移动神马的-*/void downmove(int (*sna)17)/*控制蛇向下运动的函数*/int x=0,y=0,mark=0;for(x=0;x<16;x+)for(y=0;y<16;y+)if(snaxy!=0&&snaxy!=HEAD&&snaxy!=FOOD)snaxy=snaxy-1;/前面已经说了, 12345.标记法,减去1 的话,除了头部以外其他的就移动了。for(x=0;x<16
25、;x+)for(y=0;y<16;y+)if(mark<snaxy)if(snaxy!=HEAD&&snaxy!=FOOD)mark=snaxy;/这个是求头部之后的值。for(x=0;x<16;x+)for(y=0;y<16;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;x<16;x+)for(y=0;y<16;y+)if(sna
26、xy!=0&&snaxy!=HEAD&&snaxy!=FOOD)snaxy=snaxy-1;for(x=0;x<16;x+)for(y=0;y<16;y+)if(mark<snaxy)if(snaxy!=HEAD&&snaxy!=FOOD)mark=snaxy;for(x=0;x<16;x+)for(y=0;y<16;y+)if(snaxy=HEAD)snax-1y=HEAD;snaxy=mark+1;return;void leftmove(int (*sna)17)/*控制蛇向左运动的函数*/int x=0,y=
27、0,mark=0;for(x=0;x<16;x+)for(y=0;y<16;y+)if(snaxy!=0&&snaxy!=HEAD&&snaxy!=FOOD)snaxy=snaxy-1;for(x=0;x<16;x+)for(y=0;y<16;y+)if(mark<snaxy)if(snaxy!=HEAD&&snaxy!=FOOD)mark=snaxy;for(x=0;x<16;x+)for(y=0;y<16;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;x<16;x+)for(y=0;y<16;y+)if(snaxy!=0&&snaxy!=HEAD&&snaxy!=FOOD)snaxy=snaxy-1;for(x=0;x<16;x+)for(y=0;y<16;y+)if(mark<snaxy)if(snaxy!=HEAD&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025兽医执业考试生理学试题及答案
- 中职电子商务市场营销案例分享与分析试题及答案
- 个人经验2024年图书管理员试题及答案
- 2024投资咨询课程的更新试题及答案
- 企业社保补充合同样本
- 一份商品购销合同范本
- 人事局劳动合同范本
- 协助患者翻身操作流程
- 一日保教流程培训
- 2024年五年级英语下册 Unit 2 Can I help you Lesson 7教学实录 人教精通版(三起)
- 第一次月考测试卷(试题)-2023-2024学年人教版六年级数学下册
- 教育实习鉴定表模板(共3页)
- (完整版)污水处理厂运维方案
- 【精选】方剂学清热剂练习题
- 下肢静脉血栓护理查房
- 纳税信用修复申请表
- 最新苏教版五年级数学下册第四单元 数学教案
- 以化妆用品与手法的古今对比探讨昆曲的历史变迁
- 学生资助政策宣传主题班会PPT课件
- 房产继承遗嘱范本
- 山东省自然科学基金资助项目结题报告模板
评论
0/150
提交评论