资源描述:
《【精品】计算机实习报告(贪吃蛇游戏编程)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、计算机实习扌艮告题目:贪吃蛇实验报告邮箱:yych2009@buptedu.cn贪吃蛇实验报告一.功能说明1・1总体功能说明游戏分单人和双人两种。单人游戏中有一条小蛇,不停地在屏幕上游走,“吃”掉界面上随即出现的果子,每吃一个果子,蛇的身体长度就增长一个单位。当吃下的果子积累到一定程度时,蛇的运动速度会相应地增加,等级也提高了。随着蛇的长度的增长,游戏界面会出现随机产生的毒刺“★”,毒刺固定不动。只要蛇头碰到屏幕四周,或者碰到自己的身子,或者碰到毒刺,活着小蛇就立即毙命,游戏结束。在双人游戏中,有两条蛇头分别为红色和黄色的小蛇,争吃果子,比比谁吃的果子多。只要任意一条
2、蛇的蛇头碰到屏幕四周,或者碰到自己的身子(碰到对方的身体没关系),或者任一条蛇碰到毒刺,游戏就会结束。该游戏的特色是:一、添加了障碍“毒刺”,同时增加游戏等级这一项,让蛇的运动速度随分数的增加而适当增加,相比传统的贪吃蛇游戏增加了难度;二、增加双人游戏,使其具有竞赛性,让玩家在与他人竞赛中获得乐趣。三、游戏的背景画面更为细腻。1・2用户界面游戏开始和退出菜单D:C++MSDev98MyProjects5言先龙Debug竝龙龙.exe"请选择游戏:按1键:单人游戏按2键:双人游戏选择单人、双人游戏的菜单1・3使用方法在单人游戏中,用小写的w、s、a.d四个按
3、键分别控制蛇头上下左右四个方向的转向。双人游戏中,w、s、a、d按键控制红蛇的方向,上下左右四个方向键控制黄蛇的方向。一.程序设计说明2・1总体设计框架[包括程序执行流程,模块划分等,需要有文字说明和框图表示]选择开始或退开始游戏程序2.2关键算法描述算法1:[算法输入参数和输出参数,算法功能,使用什么存储结构,在主程序屮起什么作用,可以使用框图或伪代码表示。算法1:蛇身运动函数算法1:if(snake.direct[0]==97){textout(handle,-(-snake.s_x[0]),snake.s_y[0],wColors+10,l,H^n);Sleep
4、(speed);PRODUCT_FRUIT(snake.s_x,snake.s_y,&snake・length,&fruit・f_x,&fmit・f_y,wColors,handle);MOVE(snake.s_x,snake.s_y,snake.length,wColors+2,handle);这是蛇的运动算法,以单人游戏中的向上运动为例。当蛇的结构中的方向变量为97(即“w”)时,蛇头的纵坐标增加一个单位,并延时一定时间。接着运行进行PRODUCT_FRUIT函数,该函数的作用是判断蛇头坐标是否与果子坐标重合,若是,则生成新的果子,且蛇的长度加一。接着再运行mov
5、e函数,该函数的作用为令蛇身最后一格处显示背景颜色,蛇身的其它部分随蛇头向前移动一位,整体上看就像是蛇向前移动了一格。算法2:voidRE_POISON_FRUIT(intpfoodx[],intpfoody[],int*foodx,int*foody,int*length,intsnakex[],intsnakey[]){while(l){srand((unsigned)time(NULL)*(unsigned)time(NULL));intpoison_x=2*(rand()%28+2);intpoison_y=rand()%37;if(poison_x>=4&&
6、poison_y>=2)for(q=0;q<*length;q++)if((snakex[q]==poison_x)&&(snakey[q]==poison_y))break;if(q=二*length){for(i=0;i<100;i++){if(pfoodx[i]==*foodx&&pfoody[i]==*foody)break;if(i==100){pfoodx[num]=poison_x;pfoody[num]=poison_y;num++;break;随机产牛毒果的函数。产牛两个随机数,分别是毒刺的横纵坐标,若该坐标不与蛇的身体的任一节重合,也不与当前显示的
7、果子重合,则该坐标符合耍求。算法3:intDEAD(intsnakex[]9intsnakey[],intlenjntpfoodx[],intpfoody[],HANDLEhandle)inttemp;for(inti=2;i<=len;i++)if((snakex[0]<4
8、
9、snakex[0]>60
10、
11、snakey[0]<2
12、
13、snakey[0]>40)
14、
15、(snakex[0]==snakex[i]&&snakey[O]==snakey[iJ)){temp=l;break;}}for(intb=O;b<=num;b++){if((snakex[0