2012-04-13 31 views
1

私はそれが簡単だと思ったが、私がそれをやり始めたとき、私はもうやり続ける方法を知らない。私の考えは、パネルを使って太い線を引くことでしたが、壁を描き、その壁を越えて私のキャラクターを動かさないようにするには、どうすればよいでしょうか?私はそれがどうやってできるか想像できません。ここで私はそれをやっているだろうどのように説明するために迷路のスケッチです:私はちょうどFrameで開始し、まだそれを行うためのアイデアを把握しようとしている迷路を構築する

enter image description here

+0

ランダムな迷路または1つの固定迷路を作成しますか?あなたはすでに衝突検出の形を持っていますか? – ggfela

+0

ちょうど固定された迷路。 – Michelle

答えて

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

+0

あなたはまた迷路を解決する方法を尋ねていますか? – daveb

+0

いいえ、私は 'KeyListeners'を使ってキャラクターをコントロールします – Michelle