该楼层疑似违规已被系统折叠隐藏此楼查看此楼
#include
#include
#include
#include
#define GZ 30
struct SnakePoint{
COORD pos;
int mx,my;
struct SnakePoint *Next;
} *SnakeHeader,*SnakeTail,*SnakeTmp;
COORD pos;
COORD FoodPos;
COORD Origin={{0},{0}};
void gotoxy(COORD pos)
{
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void init()
{
srand(time(0));
SnakeHeader = (SnakePoint *)malloc(sizeof(SnakePoint));
SnakeTail = SnakeHeader;
SnakeTail->Next = SnakeHeader;
SnakeHeader->pos.X=GZ/2;
SnakeHeader->pos.Y=GZ/2;
SnakeHeader->mx = 1;
SnakeHeader->my = 0;
gotoxy(SnakeHeader->pos);
printf("*");
gotoxy(Origin);
}
void GenrateFood()
{
FoodPos.X = rand()%GZ;
FoodPos.Y = rand()%GZ;
gotoxy(FoodPos);
printf("*");
gotoxy(Origin);
}
bool isEaten()
{
if(SnakeHeader->pos.X == FoodPos.X && SnakeHeader->pos.Y == FoodPos.Y)
return true;
else
return false;
}
void MoveSnake()
{
int mx,my;
COORD pos;
mx = SnakeHeader->mx;
my = SnakeHeader->my;
pos.X = SnakeHeader->pos.X+SnakeHeader->mx;
pos.Y = SnakeHeader->pos.Y+SnakeHeader->my;
gotoxy(pos);
printf("*");
gotoxy(Origin);
SnakeTmp = SnakeHeader;
SnakeHeader = (SnakePoint *)malloc(sizeof(SnakePoint));
SnakeTmp->Next = SnakeHeader;
SnakeHeader->pos = pos;
SnakeHeader->mx = mx;
SnakeHeader->my = my;
if(!isEaten())
{
pos = SnakeTail->pos;
gotoxy(pos);
printf(" ");
SnakeTmp = SnakeTail;
SnakeTail = SnakeTail->Next;
free(SnakeTmp);
}
else
{
GenrateFood();
}
}
void main()
{
int c;
init();
GenrateFood();
while(1)
{
if(kbhit())
{
c=getch();
switch(c)
{
case'w':
if(SnakeHeader->my!=1)
{
SnakeHeader->my=-1;
SnakeHeader->mx=0;
}
break;
case's':
if(SnakeHeader->my!=-1)
{
SnakeHeader->my=1;
SnakeHeader->mx=0;
}
break;
case'a':
if(SnakeHeader->mx!=1)
{
SnakeHeader->mx=-1;
SnakeHeader->my=0;
}
break;
case'd':
if(SnakeHeader->mx!=-1)
{
SnakeHeader->mx=1;
SnakeHeader->my=0;
}
break;
default:break;
}
}
MoveSnake();
Sleep(200);
}
}