我有一个蛇游戏项目,但现在我需要找到一种让尾巴跟随头部的方法,我已经先把头做了,但我仍然对如何让尾巴跟着头部感到困惑,我知道我必须让尾巴跟随头部的前一个坐标,但我找不到办法做到这一点
这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int side;
char map[20][20];
int z=5,c=5; //the starting position of the head
int p=0;
void snake(char map[20][20],int ,int )
{
if(p==0)
{
p++;
for(int x=0;x<side;x++)
{
map[z][c]='X';
printf("%s\n",map[x]);
}
}
int hc,hb,t,r,j,u,i;
hc=getch();
hb=getch();
if(hb==72)//up
{
z--;
}
else if(hb==77)//right
{
c++;
}
else if(hb==80)//down
{
z++;
}
else if(hb==75)//left
{
c--;
}
map[z][c]='X';
system("CLS");
}
void square(){
int x,y;
for(x=0;x<side;x++){
for(y=0;y<side;y++){
if(x==0||x==side-1||y==0||y==side-1){
map[x][y]='X';
}
else{
map[x][y]=' ';
}
}
}
snake(map,x,y);
}
void print(){
for(int x=0;x<side;x++){
printf("%s\n",map[x]);
}
}
int main()
{
printf("Input the large = ");
scanf("%d",&side);
fflush(stdin);
system("CLS");
while(true)
{
square();
print();
}
getchar();
}
答案 0 :(得分:4)
在大多数此类游戏中,你实际上并不需要让尾巴跟随头部 - 你只需在前面添加一个新X以将头部向前延伸一步并移除尾部的最后一个X以缩短它步。这简化了问题,只需要知道过去的坐标是什么,无论如何都是为了防止蛇自身穿过。