Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
把蛇放在C中_C - Fatal编程技术网

把蛇放在C中

把蛇放在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] =

我正在尝试做一个基本的蛇游戏。我有一个 线路板<代码>字符线路板[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] = 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。