void CreateMap()
{
int i;
for(i=0;i<LONG;i+=2)
{
Pos(i,0);
printf("■");
Pos(i,WIDTH-1);
printf("■");
}
for(i=1;i<WIDTH-1;i++)
{
Pos(0,i);
printf("■");
Pos(LONG-2,i);
printf("■");
}
}

这样看就舒服多了,不过也让复杂度提升了一些,上边框每个符号的坐标分别是(0,0)(2,0)(4,0)…(2*n-2,0)这个在蛇的移动及食物的模块再提。
2.初始化一条蛇
因为蛇以及食物 本质上都是一个坐标,所以我们可以定义一个新的数据类型Node,每一个Node都是一个存储了两个变量(x、y)的结构体,再通过Node来定义蛇和食物。
typedef struct node{
int x;
int y;
}Node;
Node snake[60];
好了,我们现在定义了一条叫snake的蛇。为了这条蛇肥胖适中长宽比例一致,我们用"⊙"代表蛇的每一节。刚开始我们令蛇出现在地图中间位置,蛇头在右,共3个节点。所以我们需要求得每个节点的坐标。
void InitializeSnake()
{
int i;
for(i=0;i<3;i++)
{
snake[i].x = (LONG/2-i*2);//(30,15)(28,15)(26,15)
snake[i].y = WIDTH/2;
Pos(snake[i].x,snake[i].y);
printf("⊙");
}
}
这样我们就在(30,15)(28,15)(26,15)三个坐标处确定了一条蛇。X坐标之间减2是因为"⊙"在X轴占两个基本值。

3.随机出现食物
先创建一个变量来存储食物的坐标
Nodefood;
得到它的坐标其实就是用随机值对长、宽取余,使值在区间(地图)范围内。
void CreateFood()
{
int i;
srand((unsigned int)time(0));
while(1)
{
do{
food.x = rand()%(LONG-6)+2;
}while(food.x%2!=0);
food.y = rand()%(WIDTH-2)+1;
for(i=0;i<3+length;i++)
if(food.x==snake[i].x && food.y==snake[i].y)
{
i=-1;
break;
}
if(i>=0)
{
Pos(food.x,food.y);
printf("●");
break;
}
}
//AfterEatFood();
}
X的坐标值求法为rand()%(LONG-6)+2,因为食物"●"也是两个字符的位置,所以它可能的取值为(2,y)(4,y)…(56,y)上下变宽共30个字符,从0开始,每个+2,所以最后一个为(58,y)
Rand()%(LONG)的取值范围为0~59而x=1,x=2,x=58,x=59是地图范围,所以得对LONG-6(60-6=54)取余,这样取值范围就是0~54,再加2,就成了2~56.又因为蛇的各节坐标及移动x坐标都是+2,所以食物的x坐标必须是偶数,这可以用一个do(…)while()搞定,先取值,再判断,不行就再取值










