2012-04-13 101 views
1

起初我以爲這很容易,但當我開始做時,我不知道如何繼續。我的想法是使用面板,然後畫粗線條,但是畫出牆壁的正確方法是什麼,並使我的角色不會超越牆壁?我無法想象我能做到這一點。這裏是一個迷宮的草圖來說明如何我會做它:構建迷宮

enter image description here

我剛開始用Frame,仍然努力要抓住這樣做的想法。

+0

你想創建隨機迷宮或一個固定的迷宮?你已經有一種形式的碰撞檢測? – ggfela 2012-04-13 06:57:36

+0

只是一個固定的迷宮。 – Michelle 2012-04-13 06:58:12

回答

5

首先,您需要一個代表您的迷宮的數據結構。那麼你可以擔心繪製它。

我建議一類是這樣的:

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; 
    } 
} 

然後,我會畫這個迷宮積木(正方形),而不是線。一塊暗塊用於封閉的瓷磚,另一塊用於清空瓷磚。

要繪畫,做這樣的事情。

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

但是那麼'沒有越過這面牆'就怎麼樣? – Michelle 2012-04-13 08:43:31

+0

你也問如何解決迷宮? – daveb 2012-04-13 09:18:32

+0

不,我會用'KeyListeners'控制我的角色 – Michelle 2012-04-13 13:20:24