下面是我做的:
#include
#define UP 0x4800
#define DOWN 0x5000
#define RIGHT 0x4d00
#define LEFT 0x4b00
#define ESC 0x11b
#define ENTER 0x1c0d
#define SPACE 0x3920
struct Food/*食物结构闹团体*/
{
int x;
int y;
int yes;
}food;
struct Snake /*蛇结构体*/
int x[100];
int y[100];
int n;
int color;
int direction;
}snake;
int speed=0000;
void main()/*主函数*/
void wall();
void start();
void close();
void game();
void score();
void leavl();
void select();
void sw();
int key;
while(1)
start();
select();
cleardevice();
wall();
sw();
game();
setcolor(RED);
outtextxy(250,220,"Please press ESC Quit");
outtextxy(250,240,"昌和Press any-key GO ON");
key=bioskey(0);
if(key==ESC) break;
}
close();
void close()
getch();
closegraph();
void start()/*BGI初始化*/
int gd=DETECT,gm;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
void wall()
{ /*画墙*/
int i;
randomize();
for(i=0;i<=1000;i◆◆)
putpixel(random(640),random(480),random(14)◆1);
setcolor(random(14)◆1);
rectangle(60,140,580,410);
rectangle(62,142,578,408);
setlinestyle(0,1,3);
rectangle(68,148,571,401);
setcolor(LIGHTBLUE);
void game() /*主游戏*/
int i,key,gamespeed;
snake.color=random(14)◆1;
food.yes=1;
setcolor(GREEN);
outtextxy(400,50,"Press ESC Qiut");
outtextxy(400,70,"Press ENTER Stop"液迅橘);
outtextxy(100,100,"score:");
outtextxy(300,100,"leavl:");
snake.x[0]=150;
snake.y[0]=200;
snake.x[1]=140;
snake.y[1]=200;
snake.n=2;
snake.direction=2;
setcolor(WHITE);
setlinestyle(0,1,1);
setfillstyle(1,snake.color);
for(i=0;i bar(snake.x[i],snake.y[i],snake.x[i]◆9,snake.y[i]◆9); /*画蛇*/ key=bioskey(0); /*设置按键*/ if(bioskey(1)) key=bioskey(0); if(key==ENTER) bioskey(0); /*if(key==SPACE) select();*/ if(key==LEFT&&snake.direction!=2) snake.direction=1; if(key==RIGHT&&snake.direction!=1) snake.direction=2; if(key==UP&&snake.direction!=4) snake.direction=3; if(key==DOWN&snake.direction!=3) snake.direction=4; while(!kbhit()) delay(speed); gamespeed=60000-(snake.n-2)*1000; /*蛇每增加一节延时减少1000毫秒*/ delay(gamespeed); leavl(); if(gamespeed==0) setcolor(snake.color); settextstyle(0,0,5); outtextxy(140,250,"You win!!"); outtextxy(220,200,"GOOD!"); settextstyle(0,0,1); bioskey(0); return; setfillstyle(1,BLACK); if(food.yes==1)/*如果蛇头碰到食物,不运行下面语句*/ bar(snake.x[snake.n-1],snake.y[snake.n-1],snake.x[snake.n-1]◆9,snake.y[snake.n-1]◆9); /*擦除蛇尾*/ 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; bar(snake.x[0],snake.y[0],snake.x[0]◆9,snake.y[0]◆9); /*在蛇头的前面画出新的一节*/ if(food.x==snake.x[0]&&food.y==snake.y[0]) /*蛇头碰到食物*/ food.yes=0; snake.n◆◆; =570||snake.x[0]=400||snake.y[0]<=140) /*判断蛇是否撞墙*/ 3;i--) if(snake.x[0]==snake.x[i]&&snake.y[0]==snake.y[i]) /*判断蛇是否碰到自身*/ score(); void score() /*记分*/ char a[10]; bar(140,100,300,110); sprintf(a,"score:%d",(snake.n-2)*10); outtextxy(100,100,a); } /*等级*/ void leavl() char str[10]; bar(340,100,400,110); sprintf(str,"leavl:%d",(snake.n-1)/5); outtextxy(300,100,str); bar(200,120,300,130); if((snake.n-1)%5==0) outtextxy(200,120,"LEAVL UP!"), snake.color◆◆; 15) snake.color=1; void sw()/*画食物*/ food.x=random(500)◆70; food.y=random(250)◆150; for(i=0;i<=snake.n;i◆◆) while(snake.x[i]==food.x||snake.y[i]==food.y) /*判断食物是否出现在蛇身上*/ food.x=random(500)◆70,food.y=random(250)◆150; while((food.x)!=0) food.x--; while((food.y)!=0) food.y--; setfillstyle(1,YELLOW); bar(food.x,food.y,food.x◆9,food.y◆9); void select() static int x=129,y=148; setcolor(LIGHTGREEN); outtextxy(140,300,"Press ENTER Select"); rectangle(x,y,x◆30,y◆30); settextstyle(0,0,4); outtextxy(190,50,"Speed"); outtextxy(130,150,"5 4 3 2 1"); if(key==ENTER) break; if(key==RIGHT&&x<=350) speed◆=10000; setcolor(0); x◆=64; =160) speed-=10000; x-=64; 网友们,很荣幸回答你的问题,我这里是一个c的贪吃蛇源代码,希望对你有帮助,不过运行这个时需要你的软件包含惊蛰EasyX图形函数,比如vc◆◆6.0,如遇到槐凳问题问题可以关注本站,希望对你有帮助。 #define LEFT 'a' #define RIGHT 'd' #define DOWN 's' #define UP 'w' #define ESC 27 #define N 200 /*蛇的最大长度*/ char key; int score=0; /*得分*/ int gamespeed=100; /*游戏速度自己调整*/ struct Food int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes; /*判断是否要出现食物的变量*/ }food;/*食物的结构体*/ struct Snake int x[N]; int y[N]; int node; /*蛇的节数*/ int direction;/*蛇移动方差明庆向*/ int life; /* 蛇的生命,0活着,1死亡*/ void Init(void); /*图形驱动*/ void Close(void); /*图形结束*/ void DrawK(void); /*开始画面*/ void GameOver(void); /*结束游戏*/ void GamePlay(void); /*玩游戏具体过程*/ void PrScore(void); /*输出成绩*/ /*主函数*/ void main(void) Init(); /*图形驱动*/ DrawK(); /*开始画面*/ GamePlay(); /虚握*玩游戏具体过程*/ Close(); /*图形结束*/ /*图形驱动*/ void Init(void) int gd=9,gm=2; initgraph(&gd,&gm," "); /*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/ void DrawK(void) /*setbkcolor(LIGHTGREEN);*/ setcolor(LIGHTCYAN); setlinestyle(PS_SOLID,0,1); /*设置线型*/ 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(void) srand(time(NULL)); /*随机数发生器*/ 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()@0◆60; food.y=rand()50◆60; while(food.x!=0) /*食物随机出现后必须让食物*/ food.x◆◆; while(food.y!=0) food.y◆◆; food.yes=0; /*画面上有食物了*/ if(food.yes==0) /*画面上有食物了就要显示*/ rectangle(food.x,food.y,food.x◆10,food.y-10); 0;i--) /*蛇的每个环节往前移动,也法/ /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ 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;i if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) GameOver(); /*显示失败*/ snake.life=1; break; if(snake.x[0]595||snake.y[0]455) /*蛇是否撞到墙壁*/ { GameOver(); /*本次游戏结束*/ snake.life=1; /*蛇死*/ if(snake.life==1) /*以上两种判断以后,如果蛇*/ if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/ setcolor(BLACK); /*把画面上的食物东西去*/ snake.x[snake.node]=-20;snake.y[snake.node]=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node◆◆; /*蛇的身体长一节*/ food.yes=1; /*画面上需要出现新的食物*/ score◆=10; PrScore();/*输出新得分*/ setcolor(RED); /*画出蛇*/ for(i=0;i rectangle(snake.x[i],snake.y[i],snake.x[i]◆10,snake.y[i]-10); Sleep(gamespeed); setcolor(BLACK); /*用黑色去除蛇的的最后*/ 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) /*如果蛇死就跳出循环*/ key=getch(); /*接收按键*/ if (key == ESC) break; /*按ESC键退出*/ switch(key) case UP: if(snake.direction!=4)/*判断是否往相反的方向移动*/ snake.direction=3; case RIGHT: if(snake.direction!=2) snake.direction=1; case LEFT: if(snake.direction!=1) case DOWN: if(snake.direction!=3) snake.direction=4; }/*endwhile(1)*/ /*游戏结束*/ void GameOver(void) PrScore(); setfont(56,0,"黑体"); outtextxy(200,200,"GAME OVER"); /*输出成绩*/ void PrScore(void) setfillstyle(YELLOW); bar(50,15,220,35); setcolor(BROWN); setfont(16,0,"宋体"); sprintf(str,"score:%d",score); outtextxy(55,16,str); /*图形结束*/ void Close(void) #define N 200 #define ESC 0x011b int i,key; int score=0;/*得分*/ int gamespeed=50000;/*游戏速度自己调整*/ int yes;/*判断是否要出现食物的变量*/ int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/ void Init(void);/*图形驱动*/ void Close(void);/*图形结束盯纯*/ void DrawK(void);/*开始画面*/ void GameOver(void);/*结束游戏*/ void GamePlay(void);/*玩游戏具体过程*/ void PrScore(void);/*输出成绩*/ Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/ initgraph(&gd,&gm,"c:\\tc"); setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/敏梁*设置线型*/ rectangle(i,40,i◆10,49); /*上边*/ rectangle(50,i,59,i◆10); /*左边*/ randomize();/*随机数发生器*/ food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life=0;/*活着*/ snake.node=2;/*节数*/ while(1)/*可以重复玩游戏,压ESC键结束*/ while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/ if(food.yes==1)/*需要出现新食物*/ while(food.x!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.yes=0;/*画面凯拿咐上有食物了*/ if(food.yes==0)/*画面上有食物了就要显示*/ 0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ case 1:snake.x[0]◆=10;break; for(i=3;i GameOver();/*显示失败*/ if(snake.x[0]595||snake.y[0]<55|| 455)/*蛇是否撞到墙壁*/ GameOver();/*本次游戏结束*/ if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ setcolor(0);/*把画面上的食物东西去掉*/ snake.node◆◆;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ setcolor(4);/*画出蛇*/ rectangle(snake.x[i],snake.y[i],snake.x[i]◆10, snake.y[i]-10); setcolor(0);/*用黑色去除蛇的的最后一节*/ if(snake.life==1)/*如果蛇死就跳出循环*/ key=bioskey(0);/*接收按键*/ if(key==ESC)/*按ESC键退出*/ else if(key==UP&&snake.direction!=4) /*判断是否往相反的方向移动*/ if(key==RIGHT&&snake.direction!=2) if(key==LEFT&&snake.direction!=1) if(key==DOWN&&snake.direction!=3) setfillstyle(SOLID_FILL,YELLOW); setcolor(6); settextstyle(0,0,2); outtextxy(55,20,str); void Close(void);/*图形结束*/ void DrawK(void);/*开始画孝猜面*/ void GamePlay(void);/*玩游戏具体过巧升型程*/ initgraph(&gd,&gm,"笑薯c:\\tc"); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ food.yes=0;/*画面上有食物了*/ } /*endwhile(!kbhit)*/