起初我以爲這很容易,但當我開始做時,我不知道如何繼續。我的想法是使用面板,然後畫粗線條,但是畫出牆壁的正確方法是什麼,並使我的角色不會超越牆壁?我無法想象我能做到這一點。這裏是一個迷宮的草圖來說明如何我會做它:構建迷宮
我剛開始用Frame
,仍然努力要抓住這樣做的想法。
起初我以爲這很容易,但當我開始做時,我不知道如何繼續。我的想法是使用面板,然後畫粗線條,但是畫出牆壁的正確方法是什麼,並使我的角色不會超越牆壁?我無法想象我能做到這一點。這裏是一個迷宮的草圖來說明如何我會做它:構建迷宮
我剛開始用Frame
,仍然努力要抓住這樣做的想法。
首先,您需要一個代表您的迷宮的數據結構。那麼你可以擔心繪製它。
我建議一類是這樣的:
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);
}
}
)
}
你想創建隨機迷宮或一個固定的迷宮?你已經有一種形式的碰撞檢測? – ggfela 2012-04-13 06:57:36
只是一個固定的迷宮。 – Michelle 2012-04-13 06:58:12