2012-04-13 8 views
1

Zuerst dachte ich, es sei einfach, aber als ich anfing, weiß ich nicht mehr weiter. Meine Idee war es, Tafeln zu verwenden und dann dicke Linien zu zeichnen, aber was ist dann der richtige Weg, um die Wände zu zeichnen und meinen Charakter dazu zu bringen, sich nicht über diese Wände hinaus zu bewegen? Ich kann mir einfach nicht vorstellen, wie ich das überhaupt machen kann. Hier ist eine Skizze eines Labyrinths zu zeigen, wie ich es tun:ein Labyrinth bauen

enter image description here

Ich habe gerade angefangen mit einem Frame und immer noch die Idee, es zu tun zu begreifen versuchen.

+0

Sie möchten zufällige Labyrinthe oder ein festgelegtes Labyrinth erstellen? Haben Sie schon eine Form der Kollisionserkennung? – ggfela

+0

Nur ein festgelegtes Labyrinth. – Michelle

Antwort

5

Zuerst benötigen Sie eine Datenstruktur, die Ihr Labyrinth darstellt. Dann kannst du dir Sorgen machen, es zu zeichnen.

würde ich eine Klasse wie folgt vorschlagen:

class Maze { 
    public enum Tile { Start, End, Empty, Blocked }; 
    private final Tile[] cells; 
    private final int width; 
    private final int height; 

    public Maze(int width, int height) { 
     this.width = width; 
     this.height = height; 
     this.cells = new Tile[width * height]; 
     Arrays.fill(this.cells, Tile.Empty); 
    } 

    public int height() { 
     return height; 
    } 

    public int width() { 
     return width; 
    } 

    public Tile get(int x, int y) { 
     return cells[index(x, y)]; 
    } 

    public void set(int x, int y, Tile tile) { 
     Cells[index(x, y)] = tile; 
    } 

    private int index(int x, int y) { 
     return y * width + x; 
    } 
} 

Dann würde ich dieses Labyrinth mit Blöcken (Quadrate) ziehen, anstatt Linien. Ein dunkler Block für blockierte Kacheln und ein freier Block für leere Kacheln.

Um zu malen, tun Sie so etwas.

public void paintTheMaze(graphics g) { 
    final int tileWidth = 32; 
    final int tileHeight = 32; 
    g.setColor(Color.BLACK); 

    for (int x = 0; x < maze.width(); ++x) { 
     for (int y = 0; y < maze.height(); ++y) { 
      if (maze.get(x, y).equals(Tile.Blocked)) (
       g.fillRect(x*tileWidth, y*tileHeight, tileWidth, tileHeight); 
      } 
     } 
    ) 

} 
+0

Aber wie wäre es dann mit der "keine Kreuzung jenseits dieser Mauer"? – Michelle

+0

Fragen Sie auch, wie Sie das Labyrinth lösen können? – daveb

+0

Nein, ich bin nicht, ich werde meinen Charakter mit 'KeyListeners' steuern – Michelle