把蛇放在C中
我正在尝试做一个基本的蛇游戏。我有一个 线路板<代码>字符线路板[N][N]={{{'\0'}代码> 我想把我的蛇放在第一行,头部为0;0 身体在0;1和0;2.为了追踪蛇的尾巴和身体(稍后用于移动蛇),我为蛇的坐标创建了一个2D数组把蛇放在C中,c,C,我正在尝试做一个基本的蛇游戏。我有一个 线路板字符线路板[N][N]={{{'\0'} 我想把我的蛇放在第一行,头部为0;0 身体在0;1和0;2.为了追踪蛇的尾巴和身体(稍后用于移动蛇),我为蛇的坐标创建了一个2D数组 int coord_percent[2][N*N] = { -1 }; coord_percent [0][0] = 0; coord_percent [1][0] = 0; coord_percent [0][1] = 0; coord_percent [1][1] =
int coord_percent[2][N*N] = { -1 };
coord_percent [0][0] = 0;
coord_percent [1][0] = 0;
coord_percent [0][1] = 0;
coord_percent [1][1] = 1;
coord_percent [0][2] = 0;
coord_percent [1][2] = 2;
int size_percent = 3;
现在我调用一个函数来放置蛇:
void place_snake (char board[N][N],int coord_snake[2][N*N],int size_snake) {
int i;
board[coord_snake[0][0]][coord_snake[1][0]] = '%'; // the head will always be the first in the array_coord
for (i=1 ; i<size_snake ; i++) {
board[coord_snake[0][i]][coord_snake[1][i]] = '*';
}
}
void place_snake(字符板[N][N],整数坐标_snake[2][N*N],整数大小_snake){
int i;
board[coord_snake[0][0]][coord_snake[1][0]]='%';//头部将始终是数组中的第一个
对于(i=1;i使用2D数组作为蛇坐标不是一个好主意,因为您必须遍历整个2D数组才能找出蛇的位置
最好使用一个或来实现蛇
然后,蛇的身体部分在概念上排列为:
C D E F G H I
若要向前移动蛇,请在右侧(I
)取消绘制蛇的身体部分,然后在左侧(B
)添加蛇的身体部分,以获得:
在您的代码中,您将用蛇体分段的2D坐标替换大写字母。使用2D数组作为蛇坐标不是一个好主意,因为您必须遍历整个2D数组才能找出蛇的位置
最好使用一个或来实现蛇
然后,蛇的身体部分在概念上排列为:
C D E F G H I
若要向前移动蛇,请在右侧(I
)取消绘制蛇的身体部分,然后在左侧(B
)添加蛇的身体部分,以获得:
在你的代码中,你将用蛇的身体部分的2D坐标替换大写字母。@Richard说得对,环形队列是跟踪点的最佳方法,但你应该从如下开始,让你的生活更轻松:
typedef struct
{
int x; int y;
}
Point;
typedef struct
{
Point segments[MAX_LEN];
int length;
}
Snake;
因为draw
函数要简单得多:
void draw(Snake *snake)
{
for (int i = 0; i < snake->length; i++)
{
Point seg = snake->segments[i];
board[seg.x][seg.y] = '*';
}
}
void draw(Snake*Snake)
{
对于(int i=0;ilength;i++)
{
点分段=蛇->分段[i];
板[seg.x][seg.y]='*';
}
}
当然,主要的一点是要有一个头部指针,它将在点数组上迭代,这样你就可以轻松地去掉尾部并添加头部。@Richard说得对,循环队列是跟踪点的最佳方法,但你应该从以下几点开始,让你的生活更轻松:
typedef struct
{
int x; int y;
}
Point;
typedef struct
{
Point segments[MAX_LEN];
int length;
}
Snake;
因为draw
函数要简单得多:
void draw(Snake *snake)
{
for (int i = 0; i < snake->length; i++)
{
Point seg = snake->segments[i];
board[seg.x][seg.y] = '*';
}
}
void draw(Snake*Snake)
{
对于(int i=0;ilength;i++)
{
点分段=蛇->分段[i];
板[seg.x][seg.y]='*';
}
}
当然,主要的一点是要有一个头部指针,它将在点上迭代数组,这样你就可以轻松地删除尾部并添加头部。我不想遍历整个2D数组,只想删除尾部并添加一个,所以我看到了唯一的方法来知道蛇在尾巴之前的位置……也许我在想wrong你能不能更详细地说明你的例子???@BellahsenRaphael换一种说法:不是为竞技场中的每个位置创建一个跟踪蛇的1D位置的2D数组,而是为每个蛇段创建一个跟踪蛇在竞技场中的2D位置的1D数组。我认为OPs 2D数组是一个(x,y)坐标数组(2个坐标x(N*N)点),但循环数组的建议是+1。@Lou:现在我再看一遍,我发现你是对的。我不想遍历整个2D数组,只是想去掉尾巴,再添加一个,所以我看到了唯一知道蛇在尾巴之前的位置的方法……也许我想错了,请你进一步说明你的例子好吗???@BellahsenRaphael换言之:不是为竞技场中的每个位置创建一个跟踪蛇的1D位置的2D数组,而是为每个蛇段创建一个跟踪蛇在竞技场中的2D位置的1D数组。我认为OPs 2D数组是一个(x,y)坐标(2个坐标x(N*N)点)的数组,但循环数组的建议是+1。@Lou:现在我再看一遍,我发现你是对的。看起来确实容易得多,但我不认为我允许在这一点上使用它…我的方法没有简单的标准方法?看起来确实容易得多,但我不认为我允许在这一点上使用它…没有简单的标准方法我的方法的d方法?int-coord\u percent[2][N*N]={-1};
仅将coord\u percent[0][0]=-1和所有其他元素初始化为0。int-coord\u percent[2][N*N]={-1};
仅将coord u percent 0][0]=-1和所有其他元素初始化为0。