文档介绍:// : 定义控制台应用程序的入口点。
//
#include ""
#include<>
#include<>
#include<>
#include<>
struct Body//定义蛇身结构体
{
short x,y;//蛇身结点的坐标
struct Body *next;//指向下一个结点的指针
};
////////////////////全局变量/////////////////////////////////////
int len=sizeof(struct Body);//Body结构体所占字节数
int score;//玩家得分
int Food=0;//1-有食物,0-没食物
short food_x,food_y;//食物坐标
struct Body *body001;//蛇头指针
int dir=4;//蛇头方向1-up,2-down,3-left,4-right
int sleeptime=220;//每次移动之后的停顿时间
////////////////////////函数声明/////////////////////////////////////
void Pos(short x,short y);
void CreatMap();
void PrintSnake();
void CreatFood();
void SnakeMove();
//int TouchWall();//不可穿墙
void CrossWall();//可以穿墙
int TouchSelf();
void Init();
void GameCircle();
void Pause();
void StartImage();
void EndImage();
////////////////////////函数定义/////////////////////////////////////
void Pos(short x,short y)//设置光标位置函数
{
COORD pos;
=x;
=y;
HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput,pos);
return;
}//Pos
void CreatMap()//打印地图
{
int i;
for(i=0;i<57;i+=2)//打印上下边框
{
Pos(i,0);
printf("■");
Pos(i,24);
printf("■");
}
for(i=1;i<24;i++)//打印左右边框
{
Pos(0,i);
printf("■");
Pos(56,i);
printf("■");
}
return;
}//CreatMap
void PrintSnake()//打印蛇
{
struct Body *p=body001;
while(p!=NULL)//判断是否指向蛇尾
{
Pos(p->x,p->y);
printf("■");
p=p->next;
}//从蛇头打印到蛇尾
return ;
}
void CreatFood()//创建新食物
{
if(Food==0)
{
srand((int)time(0));
food_x=2+rand()%53;//x的取值范围[2,54]
if(food_x%2==1)
food_x--;
food_y=1+rand()%23;//y的取值范围[1,23]
Food=1;//1表明有食物,0表明没食物
}
return;
}//CreatFood
void SnakeMove()//蛇身移动、刷新蛇身和食物及其坐标
{
struct Body *p_food;//下一格有食物
struct Body *p_forward;//下一格没食物
struct Body *q;//蛇身移动一格时的临时指针
p_forward=(struct Body *)malloc(len);
if(1==dir)//向上移动
{
if(body001->x==food_x && body001->y-1==food_y)//下一格有食物
{
p_food=(struct Body *)malloc(le