2016-05-18 22 views
2

Also würde ich gerne ein rechteckiges Labyrinth von etwa Dimensionen 5x4 (Zeilen x Spalten) mit einem 2D-Array in C-Sprache darstellen. Ich habe jedoch Schwierigkeiten, anzugeben, was tatsächlich in das 2D-Array eingefügt werden muss.Robotics Maze-Darstellung in C

int a[5][4] = { 
    {}, 
    {}, 
    {}, 
    {}, 
    {}, 
}; 

Hier ist das Skelett des Arrays 2D ist, in jeder Reihe gibt es vier Werte sein, gehe ich davon aus, dass jeder dieser Werte eine einzelne ganze Zahl ist, die uns die Eigenschaften einer Zelle im Labyrinth erzählt. Mein Problem ist, ist das wirklich genug? Wie funktioniert sagen, ein einzelner Wert einen Roboter Wetter gibt es 3 Wände, 2 Wände usw.

Jemand bitte erleuchte mich D:

Maze

+0

würde ich beginnen mit einer Matte verwenden könnte rix einer Struktur, die Informationen über N-, S-, W-, E-Wände enthält. – LPs

+0

Als jemand, der mit Robotern in einem ähnlichen Szenario gearbeitet hat, hoffe ich, dass Ihr genau 90 Grad drehen kann. – schil227

+0

@LPs Diese Information kann gut in 4 Bits gespeichert werden. –

Antwort

7

Verwendung spezifischer Bits für bestimmte Eigenschaften des Raumes

#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

Im Allgemeinen möchten Sie vielleicht auch einen der Punkte als ROOM_EXIT für das Ziel angeben. – ojblass

+0

Ich mag diese Idee! ziemlich prägnant, obwohl ich weiß define wird hauptsächlich verwendet, um Konstanten zu definieren, obwohl ich mit der oben angegebenen Syntax nicht vertraut bin (1 << 0) (1 << 1) usw., was bedeutet das? – emuterisa

+1

Es ist ein [bitweises Links-Shift-Operator] (http://www.c4learn.com/c-programming/c-bitwise-left-shift-operator/) –

3

Sie eine Struktur Matrix

#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; 
} 
+0

Wow das ist unglaublich! macht viel Sinn dank! Das einzige Problem, das ich jetzt habe, ist zu verstehen, was der Reset-Teil tut? (neue Syntax für mich T_T) – emuterisa

+0

Es setzt auf "0" alle Bytes der 'Labyrinth'-Matrix, nicht mehr als das. – LPs

+0

Warum sollten Sie das tun? Ich denke, dass ich in der Gedächtnisabteilung Verständnis fehlt. Wenn ich das wäre, hätte ich wahrscheinlich mit meinem derzeitigen Verständnis von Strukturen ausgeschlossen. Vielen Dank! – emuterisa