机器人迷宫的C语言表示

机器人迷宫的C语言表示,c,robotics,C,Robotics,所以我想用C语言中的2D数组表示一个尺寸为5x4(行x列)的矩形迷宫。但是,我在指定实际需要放入2D数组中的内容时遇到困难 int a[5][4] = { {}, {}, {}, {}, {}, }; 这是2D数组的骨架,每行有4个值,我假设每个值都是一个整数,告诉我们迷宫中一个单元格的属性。我的问题是,这真的足够了吗?单个值如何告诉机器人是否有3面墙、2面墙等 请有人告诉我D: 将特定位用于房间的特定属性 #define ROOM_WALL_ABOV

所以我想用C语言中的2D数组表示一个尺寸为5x4(行x列)的矩形迷宫。但是,我在指定实际需要放入2D数组中的内容时遇到困难

int a[5][4] = {
    {},
    {},
    {},
    {},
    {}, 
};
这是2D数组的骨架,每行有4个值,我假设每个值都是一个整数,告诉我们迷宫中一个单元格的属性。我的问题是,这真的足够了吗?单个值如何告诉机器人是否有3面墙、2面墙等

请有人告诉我D:


将特定位用于房间的特定属性

#define ROOM_WALL_ABOVE (1 << 0)
#define ROOM_WALL_LEFT  (1 << 1)
#define ROOM_WALL_BELOW (1 << 2)
#define ROOM_WALL_RIGHT (1 << 3)
#define ROOM_DOOR       (1 << 4)

int a[5][4] = {0};
a[0][0] = ROOM_WALL_ABOVE | ROOM_WALL_LEFT;

if (a[x][y] & ROOM_WALL_RIGHT) printf("Cannot walk right.\n");

#在上面定义房间和墙壁(1您可以使用结构矩阵

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

struct walls
{
    bool N; // true = wall false = no wall
    bool S; // true = wall false = no wall
    bool W; // true = wall false = no wall
    bool E; // true = wall false = no wall
};

int main()
{
    struct walls maze[5][4];

    // reset
    memset(maze, 0x00, sizeof(maze));

    // init
    maze[0][0].N = false;
    maze[0][0].S = true;
    maze[0][0].W = true;
    maze[0][0].E = false;

    // YOUR STUFF

   return 0;
}
#包括
#包括
#包括
结构墙
{
bool N;//真=墙假=没有墙
bool S;//真=墙假=无墙
bool W;//真=墙假=无墙
bool E;//真=墙假=无墙
};
int main()
{
结构墙迷宫[5][4];
//重置
memset(迷宫,0x00,sizeof(迷宫));
//初始化
迷宫[0][0]。N=false;
迷宫[0][0].S=true;
迷宫[0][0]。W=true;
迷宫[0][0],E=false;
//你的东西
返回0;
}

我会开始使用一个结构矩阵来保存关于N、S、W、E墙的信息。作为一个在类似场景中与机器人合作过的人,我希望你能精确地旋转90度。@LPs这个信息可以很好地存储在4位内。@schil227 Weel,这取决于平台。在嵌入式系统上,我会使用位文件标志。;)注意:通过只存储每个单元的顶部和左侧墙,并在地图的右侧和底部添加一个1单元宽的边框,您可以简化所有逻辑。一般来说,您可能还希望指定其中一个点作为目的地的房间出口。我喜欢这个主意!非常简洁,虽然我知道define主要用于定义常量,但我不熟悉上面提到的语法(1这是一个谢谢你们的家伙,我会研究一下:)哇,太棒了!很有道理,谢谢!我现在唯一的问题是理解重置部件的功能?(对我来说是新语法)它重置为
0
maze
矩阵的所有字节,仅此而已。为什么需要这样做?我想我在记忆方面缺乏理解。如果那是我,我可能会排除,以我目前对结构的理解。谢谢如果希望从一个干净的矩阵开始,并且所有值都设置为false,则需要使用该函数。否则,由于其局部作用域(堆栈分配),它将保存随机值。顺便说一句,如果你的代码保证用正确的初始化填充整个结构,你可以避免它。