首页 贪吃蛇游戏设计

贪吃蛇游戏设计

举报
开通vip

贪吃蛇游戏设计#include #include #include #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0; int gamespeed=32000; struct Food /*食物的结构体*/ { int x; /*食物的横坐标*/ int y; /*食物的纵坐标*/ ...

贪吃蛇游戏设计
#include #include #include #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0; int gamespeed=32000; struct Food /*食物的结构体*/ { int x; /*食物的横坐标*/ int y; /*食物的纵坐标*/ int yes; /*食物是否出现的变量*/ }food; struct Snack /*蛇的结构体*/ { int x[N]; int y[N]; int node; /*蛇的节数*/ int direction; /*蛇的方向*/ int life; /*蛇的生命,0活着,1死亡*/ }snake; void Init(void); /*图形驱动*/ void Close(void); /*关闭游戏函数*/ void DrawK(void); /*画图函数*/ void GameOver(void);/*输出失败函数*/ void GamePlay(); /*游戏控制函数 主要程序*/ void PrScore(void); /*分数输出函数*/ DELAY(char ch)/*调节游戏速度*/ { if(ch=='3') { delay(gamespeed); /*delay是延迟函数*/ delay(gamespeed); } else if(ch=='2') { delay(gamespeed); } } Menu()/*游戏开始菜单*/ { char ch; printf("Please choose the gamespeed:\n"); printf("1-Fast 2-Normal 3-Slow\n"); printf("\nPlease Press The numbers..\n"); do {ch=getch();} while(ch!='1'&&ch!='2'&&ch!='3'); clrscr(); return(ch); } /*主函数*/ void main(void) { int ch; ch=Menu(); Init(); DrawK(); GamePlay(ch); Close(); } void Init(void) { int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tc"); cleardevice(); } void DrawK(void) { 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); /*画出右边框*/ } } void GamePlay(char ch) { randomize(); /*随机数发生器*/ food.yes=1; /*1代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 要出现食物,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) /*可以重复游戏*/ { while(!kbhit()) /*在没有按键的情况下蛇自己移动*/ { if(food.yes==1) /*需要食物*/ { food.x=rand()%400+60; food.y=rand()%350+60; /*使用rand函数随机产生食物坐标*/ 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]; /*贪吃蛇的身体移动算法*/ } switch(snake.direction) /*贪吃蛇的头部移动算法,以此来控制移动*/ { case 1:snake.x[0]+=10;break; case 2:snake.x[0]-=10;break; case 3:snake.y[0]-=10;break; case 4:snake.y[0]+=10;break; } for(i=3;i595||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= MAXY-1)) || (((control == 3) || (control == 4)) && ((x < 1) ||(x >= MAXX-1) ) ) ) { hit = FALSE; } if ( (y < 0) ||(y >= MAXY) || (x < 0) ||(x >= MAXX) ) { game = GAMEOVER; control = 0; return; } for (i = 0; i < MAX; i++) { if ((place[i].st) && (x == place[i].x) && (y == place[i].y) ) { game = GAMEOVER; control = 0; return; } if ((place[i].st) && (xx == place[i].x) && (yy == place[i].y) ) { hit = FALSE; goto OUT; } } OUT: if ( (x == babyx) && (y == babyy) ) { eat = TRUE; count ++; score += (1+class) * 10; } head ++; if (head >= MAX) head = 0; place[head].x = x; place[head].y = y; place[head].st= TRUE; if (eat == FALSE) { place[tear].st = FALSE; tear ++; if (tear >= MAX) tear = 0; } else { eat = FALSE; exit = TRUE; while(exit) { babyx = rand()%MAXX; babyy = rand()%MAXY; exit = FALSE; for( i = 0; i< MAX; i++ ) if( (place[i].st)&&( place[i].x == babyx) && (place[i].y == babyy)) exit ++; } } if (head == tear) game = GAMEHAPPY; } void draw(void) { char temp[50]; int i,j; for (i = 0; i < MAX; i++ ) { setfillstyle(1,9); if (place[i].st) bar(place[i].x*15+1,place[i].y*10+1,place[i].x*15+14,place[i].y*10+9); } setfillstyle(1,4); bar(babyx*15+1,babyy*10+1,babyx*15+14,babyy*10+9); setcolor(8); setfillstyle(1,8); bar(place[head].x*15+1,place[head].y*10+1,place[head].x*15+14,place[head].y*10+9); /* for( i = 0; i <= MAXX; i++ ) line( i*15,0, i*15, 10*MAXY); for( j = 0; j <= MAXY; j++ ) line( 0, j*10, 15*MAXX, j*10); */ rectangle(0,0,15*MAXX,10*MAXY); sprintf(temp,"Count: %d",count); settextstyle(1,0,2); setcolor(8); outtextxy(512,142,temp); setcolor(11); outtextxy(510,140,temp); sprintf(temp,"1P: %d",score); settextstyle(1,0,2); setcolor(8); outtextxy(512,102,temp); setcolor(12); outtextxy(510,100,temp); sprintf(temp,"Class: %d",class); setcolor(8); outtextxy(512,182,temp); setcolor(11); outtextxy(510,180,temp); } main() { int pause = 0; char temp[50]; int d,m; int key; int p; static int keydown = FALSE; int exit = FALSE; int stchange = 0; d = VGA; m = VGAMED; initgraph( &d, &m, "" ); setbkcolor(3); class = 3; init(); p = 1; while(!exit) { if (kbhit()) { key = bioskey(0); switch(key) { case UP: if( (control != 2)&& !keydown) control = 1; keydown = TRUE; break; case DOWN: if( (control != 1)&& !keydown) control = 2; keydown = TRUE; break; case LEFT: if( (control != 4)&& !keydown) control = 3; keydown = TRUE; break; case RIGHT: if( (control != 3)&& !keydown) control = 4; keydown = TRUE; break; case ESC: exit = TRUE;break; case ENTER: init();break; case PAGEUP: class --; if (class<0) class = 0; break; case PAGEDOWN: class ++;if (class>7) class = 7; break; case KEY_U: if( ( (control ==1) ||(control ==2))&& !keydown) control = 3; else if(( (control == 3) || (control == 4))&& !keydown) control = 1; keydown = TRUE; break; case KEY_K: if( ( (control ==1) ||(control ==2))&& !keydown) control = 4; else if(( (control == 3) || (control == 4))&& !keydown) control = 2; keydown = TRUE; break; case CTRL_P:pause = 1 - pause; break; } } stchange ++ ; putpixel(0,0,0); if (stchange > gamedelay[class] + gamedelay2[hit]) { stchange = 0; keydown = FALSE; p = 1 - p; setactivepage(p); cleardevice(); if (!pause) nextstatus(); else { settextstyle(1,0,4); setcolor(12); outtextxy(250,100,"PAUSE"); } draw(); if(game==GAMEOVER) { settextstyle(0,0,6); setcolor(8); outtextxy(101,101,"GAME OVER"); setcolor(15); outtextxy(99,99,"GAME OVER"); setcolor(12); outtextxy(100,100,"GAME OVER"); sprintf(temp,"Last Count: %d",count); settextstyle(0,0,2); outtextxy(200,200,temp); } if(game==GAMEHAPPY) { settextstyle(0,0,6); setcolor(12); outtextxy(100,300,"YOU WIN"); sprintf(temp,"Last Count: %d",count); settextstyle(0,0,2); outtextxy(200,200,temp); } setvisualpage(p); } } closegraph(); }
本文档为【贪吃蛇游戏设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_934033
暂无简介~
格式:doc
大小:97KB
软件:Word
页数:13
分类:互联网
上传时间:2010-01-24
浏览量:71