#include
#include
#include
#include
#include
#include
typedef struct SnakeGame{ int x;int y;struct SnakeGame *next
;}snake;
snake *front, *rear;
char map[20][42];//give the map//
void ini();
int Move();
void insert(int x,int y);
void clean();
void print();
int main()
{
int res;
res=1;
ini();
while(res!=0)
{
Move();//when this function ends,game over//
res=0;
}
printf("GAME OVER!!!\n");
return 0;
}
void ini()//print the map ,food and snake//
{
int i,j,a,b;
front=rear=NULL;
for(i=0;i<20;i++)
{
for(j=0;j<42;j++)
{
if(i==0||i==19||j==0||j==41)
map[i][j]='*';
else
map[i][j]=' ';
}
}
for(i=2;i<6;i++)
map[2][i]='x';
map[2][i]='H';
a= rand()%19+1;
b= rand()%41+1;
map[a][b] = '$';
}
void insert(int x,int y)//insert the new head after every step//
{
snake *p;
p=(snake*)malloc(sizeof(snake));
p->x=x;//the coordine of the body ,head and food//
p->y=y;
if(rear==NULL)
rear=front=p;
else
{
p->next=front;
front=p;
}
}
void clean()//if not eat food,clean the old rear//
{
snake *q;
q=front;
while(q->next!=rear)
q=q->next;
free(rear);
rear=q;
}
void gotoxy(int x,int y)//just find this online //
{ HANDLE hOutput;
COORD loc;
loc.X=x;
loc.Y=y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, loc);
}
void print()//print the picture in time//
{
int i,j;
gotoxy(0,0);
for(i=0;i<20;i++)
{
for(j=0;j<42;j++)
{
printf("%c",map[i][j]);
if(j>0&&j%41==0)
printf("\n");
}
}
}
int Move()//to tell how to move //
{
char key='d';
int a,b,rx,ry;
int i;
rear = front = NULL;
for(i=2;i<7;i++)
insert(2,i);
print();
while(1)
{
Sleep(200);
if(kbhit())
key=getch();
switch(key)//the way to go in four directions//
{
case'a':{
ry = (front->y)-1;
rx = front->x;
break;
}
case'd':{
ry=(front->y)+1;
rx = front->x;
break;
}
case'w':{
ry=front->y;
rx=(front->x)-1;
break;
}
case's':{
ry=front->y;
rx=(front->x)+1;
break;
}
default:break;
}
map[front->x][front->y] = 'x';//replace the old head and insert the new head//
insert(rx,ry);
if(map[front->x][front->y]=='*' ||map[front->x][front->y]=='x') //judge the death//
return 0;
else
{
if(map[front->x][front->y]!='$')//judge the food//
{
map[rear->x][rear->y] = ' ';
clean();
}
else
{
a= rand()%19+1;
b= rand()%41+1;
while(map[a][b] != ' ')
{
a= rand()%19+1;
b= rand()%41+1;
}
map[a][b] = '$';
}
map[front->x][front->y]='H';
print();
}
}
}