1

最初は簡単だと思っていたのですが、やり始めたらどうやって続ければいいのか分からなくなりました。私の考えでは、パネルを使用してから太い線を描画しましたが、壁を描画してキャラクターが壁を越えないようにする適切な方法は何ですか? どうすればそれができるのか想像できません。これは、私がどのようにそれを行うかを説明するための迷路のスケッチです:

ここに画像の説明を入力

から始めたばかりでFrame、まだそれを行うという考えを理解しようとしています。

4

1 に答える 1

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

}
于 2012-04-13T07:05:41.713 に答える