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

下载本文档

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

文档简介

一、读程序题部分(贪吃蛇)

1、程序的功能设计游戏界面,包括画墙、画蛇、画食物,并且设置蛇和食物的属性,编写蛇的运动方式和游戏方式。2、主函数分析主函数中前两行与编写图形程序有关,第三行中调用Speed函数,把Speed函数的返回值付给变量speed;第五行dwall函数的作用是画墙,函数中又调用wall函数来画墙上的砖块3、函数的调用关系4、数据变量定义作用定义食物的横坐标food.x和食物的纵坐标food.y可以有效的随机设置食物出现在界面的任何地方;定义snake.life表示蛇的生死以否,好判断是否结束游戏snake.dir=1;/*方向向右*/定义snake.x[0]和snake.y[0]表示蛇头的坐标,在后面蛇撞墙死的问题上用的到蛇头的坐标;定义蛇的节数snake.node,方便蛇每吃到食物节数增加;定义snake.level,显示蛇的闯关数5、主要函数的功能、流程图dwall():画墙wall():画组成墙的砖Speed():选择贪吃蛇的速度line():画线函数,画砖的线条gotoxy():定位坐标Play():调用各函数,开始完游戏GameOver():结束游戏6、程序的不足及改进没有障碍墙,游戏过于简单;没有游戏奖励,游戏趣味性不高;改进:设置障碍墙,蛇撞到墙也死;代码:for(j=200;j<=300;j+=10){wall(j,300);/*画横的障碍墙*/}for(j=300;j<=350;j+=10){wall(300,j);/*画竖的障碍墙*/}不足:没有游戏奖励,游戏趣味性不高;改进:增加生命值,蛇每吃到三颗食物,则增加一个生命值;代码:定义food.level,在Play函授中初始化,在设置蛇每吃到一颗食物就增长一节身体的代码后加上if(snake.node%3==0){snake.level++;/*除第一关外,其余每吃3颗食物,就增加一个生命值*/gotoxy(5,2);printf("Thelevelis%d",snake.level);/*左上角显示出生命值(级别)*/}7、加上注释、改进后的完整代码#include<graphics.h>#include<stdlib.h>#include<dos.h>#include<conio.h>#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011b#defineN100/*贪吃蛇的最大长度*/#defineP0x1970/*定义暂停功能键*/inti,key;intspeed;/*游戏速度*/structFOOD{intx;/*食物的横坐标*/inty;/*食物的纵坐标*/intflag;/*标志是否要出现食物*/}food;structSnake{intx[N];inty[N];intnode;/*蛇的节数*/intdir;/*蛇移动方向*/intlife;/*标志是死是活*/intlevel;/*定义生命值(级别)*/}snake;voidGameOver();/*结束游戏*/voidPlay();/*玩游戏过程*/voiddwall();/*画墙*/voidwall(intx,inty);/*画组成墙的砖*/intSpeed();/*选择贪吃蛇的速度*/main(){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");speed=Speed();/*将函数返回值赋给speed*/cleardevice();/*清屏*/dwall();/*开始画墙*/Play();/*开始完游戏*/getch();closegraph();/*退出图形界面*/}voidwall(intx,inty){intsizx=9;intsizy=9;setcolor(15);/*白色画砖的上边和左边*/line(x,y,x+sizx,y);line(x,y+1,x+sizx-1,y+1);line(x,y,x,y+sizy);line(x+1,y,x+1,y+sizy-1);setcolor(4);/*红色画砖的右面和下面*/line(x+1,y+sizy,x+sizx,y+sizy);line(x+2,y+sizy-1,x+sizx,y+sizy-1);line(x+sizx-1,y+2,x+sizx-1,y+sizy-1);line(x+sizx,y+1,x+sizx,y+sizy);setfillstyle(1,12);/*用淡红色填充砖的中间部分*/bar(x+2,y+2,x+sizx-2,y+sizy-2);}voiddwall()/*用前面画好的砖来画墙*/{intj;for(j=50;j<=600;j+=10){wall(j,40);/*画上面墙*/wall(j,451);/*画下面墙*/}for(j=40;j<=450;j+=10){wall(50,j);/*画左面墙*/wall(601,j);/*画右面墙*/}for(j=200;j<=300;j+=10){wall(j,300);/*画横的障碍墙*/}for(j=300;j<=350;j+=10){wall(300,j);/*画竖的障碍墙*/}}intSpeed()/*选择贪吃蛇运行的速度*/{intm;gotoxy(20,10);printf("level1\n");gotoxy(20,12);printf("level2\n");gotoxy(20,14);printf("level3\n");gotoxy(20,16);/*增加一个速度选项*/printf("level4\n\t\tpleasechoose:");scanf("%d",&m);switch(m){case1:return60000;case2:return40000;case3:return20000;case4:return10000;default:cleardevice();Speed();}}voidPlay(void)/*游戏实现过程*/{srand((unsignedlong)time(0));food.flag=1;/*1表示需出现新食物,0表示食物已存在*/snake.life=0;/*标志贪吃蛇活着*/snake.dir=1;/*方向向右*/snake.x[0]=300;snake.y[0]=240;/*定位蛇头初始位置*/snake.x[1]=300;snake.y[1]=240;snake.node=2;/*贪食蛇节数*/snake.level=1;/*生命值(级别)初始化*/do{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/{if(food.flag==1)/*需要出现新食物*/do{food.x=rand()%520+60;food.y=rand()%370+60;food.flag=0;/*标志已有食物*/}while(food.x%10!=0||food.y%10!=0);if(food.flag==0)/*画出食物*/{setcolor(WHITE);/*设置食物的颜色*/setlinestyle(3,0,3);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];}switch(snake.dir){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]<60||snake.x[0]>590||snake.y[0]<50||snake.y[0]>440)/*蛇是否撞到墙壁*/{GameOver();/*游戏结束*/snake.life=1;/*蛇死*/break;}if(snake.y[0]==300&&snake.x[0]>200&&snake.x[0]<=300)/*蛇是否撞到横的障碍墙*/{GameOver();/*游戏结束*/snake.life=1;/*蛇死*/break;}if(snake.x[0]==300&&snake.y[0]>300&&snake.y[0]<=350)/*蛇是否撞到竖的障碍墙*/{GameOver();/*游戏结束*/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.node++;/*蛇的身体长一节*/if(snake.node%3==0){snake.level++;/*除第一关外,其余每吃3颗食物,就增加一个生命值*/gotoxy(5,2);printf("Thelevelis%d",snake.level);/*左上角显示出生命值(级别)*/}food.flag=1;/*需要出现新的食物*/}setcolor(YELLOW);/*画蛇(设置蛇的颜色)*/for(i=0;i<snake.node;i++){setlinestyle(0,0,1);rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]+10);}delay(speed);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)*

温馨提示

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

评论

0/150

提交评论