#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include <windows.h>
#define N 225
struct Food
{
int x;
int y;
int yes;//1表示需要出现新食物,0表示已有食物。
}food;
struct Snake
{
struct Food body[N];
int life;//1表示蛇死啦,0表示蛇活着。
int node;//蛇的节数。
char direction;//蛇自动运动的方向。
}snake;
int score=0;
int main()
{
FILE *p;
int i,j,k,b;
char map[16][16],c;
p=fopen("E:\\file.txt","r");
if(p==NULL)
{
printf("error");
exit(1);
}
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
map[i][j]=fgetc(p);
}
fgetc(p);
}
snake.body[0].x=8;//蛇头。
snake.body[0].y=8;
snake.body[1].x=8;
snake.body[1].y=7;
snake.body[2].x=8;
snake.body[2].y=6;
snake.node=3;//蛇的节数。
food.yes=1;
srand(time(NULL));
snake.direction='d';//一开始蛇自动往右跑。
while(1)
{
if(kbhit())
{
c=getch();
if(snake.life==1)
break;
if(c=='w' && snake.direction!='s')
snake.direction='w';
else if(c=='a' && snake.direction!='d')
snake.direction='a';
else if(c=='s' && snake.direction!='w')
snake.direction='s';
else if(c=='d' && snake.direction!='a')
snake.direction='d';
}
if(food.yes==1)//需要随机出现新的食物。
{
food.x=1+rand()%14;
food.y=1+rand()%14;
for(i=0;i<snake.node;i++)
{
if(food.x==snake.body[i].x && food.y==snake.body[i].y)
{
food.x=1+rand()%14;
food.y=1+rand()%14;
}
}
food.yes=0;
}
if(snake.body[0].x==food.x && snake.body[0].y==food.y)
{ // 蛇吃到食物了。
snake.node++;//蛇身长一节。
food.yes=1;//地图上需要出现新的食物。
system("cls");
score+=5;
}
for(i=snake.node-1;i>0;i--)//蛇往前移动。
{
snake.body[i].x=snake.body[i-1].x;
snake.body[i].y=snake.body[i-1].y;
}
switch(snake.direction)//蛇头方向。
{
case'a':
snake.body[0].y-=1;
break;
case'w':
snake.body[0].x-=1;
break;
case'd':
snake.body[0].y+=1;
break;
case's':
snake.body[0].x+=1;
break;
}
if(food.yes==0)//显示蛇,食物和围墙。
{
system("cls");
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
b = 1;
for(k=0;k<snake.node;k++)
{
if(i == snake.body[k].x && j == snake.body[k].y )
{
if(k==0)
printf("●");//蛇头。
else
printf("□");//蛇身。
b=0;
break;
}
}
if(b==1)
{
if(i==food.x && j==food.y && i<15 && i>0 && j<15 && j>0)//食物。
printf("★");
else if(map[i][j]=='1')
printf("■");
else
printf(" ");
}
}
putchar('\n');
}
Sleep(250);//休眠函数。
}
for(i=3;i<snake.node;i++)//判断蛇是否咬到自己。
{
if(snake.body[i].x==snake.body[0].x && snake.body[i].y==snake.body[0].y)
{
snake.life=1;
break;
}
}
if(snake.life==1)
{
printf("蛇把自己咬死了\n");
printf("共得分:%d\n",score);
break;
}
if(snake.body[0].x>=15 || snake.body[0].x<=0 || snake.body[0].y>=15 || snake.body[0].y<=0)
{
printf("蛇撞墙死了!\n");
printf("共得分:%d\n",score);
snake.life=1;
break;
}
}
fclose(p);
return 0;
}
下面是file.txt:
1111111111111111
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1111111111111111