贪吃蛇游戏程序说明_第1页
贪吃蛇游戏程序说明_第2页
贪吃蛇游戏程序说明_第3页
贪吃蛇游戏程序说明_第4页
贪吃蛇游戏程序说明_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C一.程序功能介绍10假设蛇在移动中撞到墙或身体穿插蛇头撞倒自己身体玩耍完毕。二.程序整体设计说明是一体的〕。矩形块数据构造设计及用法说明开头局部:包括绘制玩耍运行时的背景,对玩耍某些重要变量的初始化。运行局部:吃;同样在不明缘由的状况下,食物从天而降,惋惜的是没有落到嘴边;饥饿的它超出想象的同化力量让食物很快的成为自己身体的一局部,它的身子变长啦。身不便,连续吃下去,现在它是直接把巴张大,好让食物有个绿色通道。但是在某天的下午,它咬到了自己,它才想起自己是一条毒蛇,于是晕死过去〔不是毒死〕;又或者它往食物冲锋的时候,它失去掌握,撞到了墙上。撞到自己或墙壁;由第四步起玩耍有两条支线〔A、B〕:A推断蛇是否吃到食物,假设蛇吃到食物,身子变长,原来的食物消逝;第六步,轮循环的第一步,重复第一轮的步骤;完毕局部:玩耍完毕时,显示“GAMEOVER”,已经是商定俗成的规律了,我的玩耍也13+2据构造。C语言中数据构造集中表达在数据类型上,因此在进展C语言程序设计时,重要的,假设在此期间选择不适宜的变量或者数组,将来修改就格外困难。蛇:根本描述:长度,颜色,位置。颜色--整型;位置--X,Y增加的描述:蛇运动的方向,蛇的生命。个整型数:3、4、2、101。食物:根本描述:颜色,位置。对应数据与数据类型:由于颜色设成固定的,所以不再争论。位置—X、Y坐标。增加的描述:食物的存在。函数有联系。只有两个值:01〔没有食物或有食物〕明实际的墙壁就是四条直线组成的边框,由坐标描述。的速度〕。各模块的功能及程序说明主要模块的实现思路和算法的流程图说明:关键所在——蛇不停移动的Snakemove:一组坐标对应一节的位置,假设有i+10i节,第ii-1i-1i-2100的这种坐标轮换需要循环语句使其连续下去。两节表示:玩耍完毕时,显示“GAMEOVER”三.程序源代码及注释:#defineN200#include<graphics.h>#include<stdlib.h>#include<dos.h>#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011binti,key;intscore=0;/*得分*/intgamespeed=50000;/*玩耍速度自己调整*/structFood{intx;/*食物的横坐标*/inty;/*食物的纵坐标*/intyes;/*推断是否要消灭食物的变量*/}food;/*食物的构造体*/structSnake{intx[N];inty[N];intnode;/*蛇的节数*/intdirection;/*蛇移动方向*/intlife;/*蛇的生命,0活着,1死亡*/}snake;voidInit(void);/*图形驱动*/voidClose(void);/*图形完毕*/voidDrawK(void);/*开头画面*/voidGameOver(void);/*完毕玩耍*/voidGamePlay(void);/*玩玩耍具体过程*/voidPrScore(void);/*输出成绩*//*主函数*/voidmain(void){Init;/*图形驱动*/DrawK;/*开头画面*/GamePlay;/*玩玩耍具体过程*/Close;/*图形完毕*/}/*图形驱动*/voidInit(void){intgd=DETECT,gm;initgraph(&gd,&gm,“c:\\tc“);cleardevice;}/*开头画面,左上角坐标为〔50,40610,460〕的围墙*/voidDrawK(void){/*setbkcolor(LIGHTGREEN);*/setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/for(i=50;i<=600;i+=10)/*画围墙*/{rectangle(i,40,i+10,49);/*上边*/rectangle(i,451,i+10,460);/*下边*/}for(i=40;i<=450;i+=10){rectangle(50,i,59,i+10);/*左边*/rectangle(601,i,610,i+10);/*右边*/}}/*玩玩耍具体过程*/voidGamePlay(void){randomize;/*随机数发生器*/food.yes=1;/*1表示需要消灭食物,0表示已经存在食物*/snake.life=0;/*活着*/snake.direction=1;/*方向往右*/snake.x[0]=100;snake.y[0]=100;/*蛇头*/snake.x[1]=110;snake.y[1]=100;snake.node=2;/*节数*/PrScore;/*输出得分*/while(1)/*可以重复玩玩耍,ESC键完毕*/{while(!kbhit)/*在没有按键的状况下,蛇自己移动身体*/{if(food.yes==1)/*需要消灭食物*/{food.x=rand%400+60;food.y=rand%350+60;while(food.x%10!=0)/*食物随机消灭后必需让食物能够在整格内,这样才可以让蛇吃到*/food.x++;while(food.y%10!=0)food.y++;food.yes=0;/*画面上有食物了*/}if(food.yes==0)/*画面上有食物了就要显示*/{setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10);}for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}/*1,2,3,4表示右,左,上,下四个方向,通过这个推断来移动蛇头*/switch(snake.direction){case1:snake.x[0]+=10;break;case2:snake.x[0]-=10;break;case3:snake.y[0]-=10;break;case4:snake.y[0]+=10;break;}for(i=3;i<snake.node;i++)/*三节不行能拐过来*/{if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){GameOver;/*显示失败*/snake.life=1;break;}}if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)/*蛇是否撞到墙壁*/{GameOver;/*本次玩耍完毕*/snake.life=1;/*蛇死*/}if(snake.life==1)/*以上两种推断以后,假设蛇死就跳出内循环,重开头*/break;if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/{setcolor(0);/*把画面上的食物东西去掉*/rectangle(food.x,food.y,food.x+10,food.y-10);snake.x[snake.node]=-20;snake.y[snake.node]=-20;/*的一节先放在看不见的位置,下次循环就取前一节的位置*/snake.node++;/*蛇的身体长一节*/food.yes=1;/*画面上需要消灭的食物*/score+=10;PrScore;/*输出得分*/}setcolor(4);/*画出蛇*/for(i=0;i<snake.node;i++)rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);delay(gamespeed);setcolor(0);/*用黑色去除蛇的的最终一节*/rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);} /*endwhile〔!kbhit〕*/if(snake.life==1)/*假设蛇死就跳出循环*/break;key=bioskey(0);/*接收按键*/if(key==ESC)/*ESC键退出*/break;elseif(key==UP&&snake.direction!=4)/*推断是否往相反的方向移动*/snake.direction=3;elseif(key==RIGHT&&snake.direction!=2)snake.direction=1;elseif(key==LEFT&&snake.direction!=1)snake.direction=2;elseif(key==DOWN&&snake.direction!=3)snake.direction=4;}/*endwhile(1)*/}/*玩耍完毕*/voidGameOver(void){cleardevice;PrScore;setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,“GAMEOVER“);getch;}/*输出成绩*/voidPrScore(void){charstr[10];setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,“score:%d“,score);outtextxy(55,20,str);}/*图形完毕*/voidClose(v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论