自己写的贪吃蛇,a s w d控制移动方向, [ ] 控制速度加减,有Bug的话欢迎指出
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define SNAKE_R21//行
#define SNAKE_L20//列
#define MOD 4
structNode{
int x,y;
}snake[SNAKE_R*SNAKE_L];
charmap[SNAKE_R+10][SNAKE_L+10];
intdir,cur_x,cur_y,lenth;
intans[4][2]={0,-1,-1,0,0,1,1,0};
intSPEED=50,score;
voidgotoxy(int x,int y)
{
COORD c;
c.X=x-1;c.Y=y-1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
voidinit()
{
int i,j;
lenth=0;
score=0;
memset(map,0,sizeof(map));
snake[lenth].x=SNAKE_R/2;
snake[lenth++].y=SNAKE_L/2;
for(i=0;i<=SNAKE_R;i++)
{
for(j=0;j<=SNAKE_L;j++)
{
if(i==0&&j==0)printf("╔");
elseif(i==0 &&j==SNAKE_L)printf("╗");
elseif(i==SNAKE_R &&j==0)printf("╚");
elseif(i==SNAKE_R &&j== SNAKE_L)printf("╝");
elseif(i==0 || i==SNAKE_R)printf("==");
elseif(j==0 || j==SNAKE_L)printf("‖");
elseprintf(" ");
}
printf("\n");
}
gotoxy(snake[0].y*2+1,snake[0].x+1);
map[snake[0].x][snake[0].y]=1;
printf("■");
gotoxy(cur_y*2+1,cur_x+1);
printf("●");
gotoxy(SNAKE_L*2+14,SNAKE_R/2+1);
printf("Score: %d",score);
}
intJudge()
{
int x,y,t,i,j;
x=snake[0].x+ans[dir][0];
y=snake[0].y+ans[dir][1];
if(x<=0 || y<=0 || x>=SNAKE_R || y>=SNAKE_L || map[x][y])
{
if(map[x][y])
{
for(t=1;t<=5;t++)
{
gotoxy(y*2+1,x+1);
Sleep(400);
if(t%2)printf("■");
else printf(" ");
}
}
for(t=1;t<=5;t++)
{
Sleep(200);
for(i=0;i<lenth;i++)
{
x=snake[i].x;y=snake[i].y;
gotoxy(y*2+1,x+1);
if(!(t%2))printf(" ");
else printf("■");
}
}
for(t=1;t<=5;t++)
{
Sleep(200);
for(i=1;i<SNAKE_R;i++)
for(j=1;j<SNAKE_L;j++)
{
gotoxy(j*2+1,i+1);
if(t%2)printf("■");
else printf(" ");
}
}
gotoxy(SNAKE_L-3,SNAKE_R/2+1);
printf(" GAME OVER! ");
gotoxy(1,SNAKE_R+2);
return -1;
}
if(x==cur_x &&y==cur_y)
{
score++;
gotoxy(SNAKE_L*2+14,SNAKE_R/2+1);
printf("Score: %d",score);
snake[lenth].x=snake[lenth-1].x-ans[dir][0];
snake[lenth].y=snake[lenth-1].y-ans[dir][1];
lenth++;
do{
srand(time(NULL));
cur_x=(rand()%(SNAKE_R-1)+1);
cur_y=(rand()%(SNAKE_L-1)+1);
}while(map[cur_x][cur_y]);
gotoxy(cur_y*2+1,cur_x+1);
printf("●");
return 1;
}
return 0;
}
voidMove(int state)
{
int i;
if(!state)
{
gotoxy(snake[lenth-1].y*2+1,snake[lenth-1].x+1);
map[snake[lenth-1].x][snake[lenth-1].y]=0;
printf(" ");
}
gotoxy((snake[0].y+ans[dir][1])*2+1,snake[0].x+ans[dir][0]+1);
printf("■");
map[snake[0].x+ans[dir][0]][snake[0].y+ans[dir][1]]=1;
for(i=lenth-1;i>0;i--)
{
snake[i].x=snake[i-1].x;
snake[i].y=snake[i-1].y;
}
snake[0].x+=ans[dir][0];
snake[0].y+=ans[dir][1];
}
intmain()
{
char key;
int finish=0,flag;
srand(time(NULL));
do{
cur_x=(rand()%(SNAKE_R-1)+1);
cur_y=(rand()%(SNAKE_L-1)+1);
}while(cur_x==SNAKE_R/2 || cur_y==SNAKE_L);
dir=rand()%MOD;
init();
while(1)
{
while(!kbhit())
{
Sleep(1);
finish++;
if(finish>=SPEED)
finish=0;
elsecontinue;
flag=Judge();
if(flag==-1)return0;
Move(flag);
gotoxy(cur_y*2+1,cur_x+1);
printf("●");
}
key=getch();
if(key=='a' &&dir!=2)dir=0;
else if(key=='w' &&dir!=3)dir=1;
else if(key=='d' &&dir!=0)dir=2;
else if(key=='s' &&dir!=1)dir=3;
else if(key=='[' &&SPEED>10)SPEED-=10;
else if(key==']')SPEED+=10;
}
return 0;
}