0

壁やオープンスペースなどの値を保持するために列挙型を使用して迷路ゲームを作成していますが、このコードが機能しない理由がわかりません。新しいボードを作成し、すべてを開くように設定してから、通過します。アレイ内のスポットにランダムに値を設定します。

maze = new Cell[row][col];
for (int r = 0; r < maze.length; r++) {
    for (int c = 0; c < maze.length; c++) 
        maze[r][c].setType(CellType.OPEN);
    }

Random randomMaze = new Random();
for (int ran = 0; ran <= numWalls ; ran++){
    maze[randomMaze.nextInt(maze.length)][randomMaze.nextInt(maze.length)].setType(CellType.WALL); 

}
4

3 に答える 3

0

これはあなたが言ったことをします。あなたが望む種類の迷路を手に入れるかどうかわからない:

import java.util.Random;
class Maze {
    enum CellType {
        open,wall;
    }
    Maze(int n) {
        this.n=n;
        maze=new CellType[n][n];
        init();
    }
    private void init() {
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                maze[i][j]=CellType.open;
    }
    void randomize(int walls) {
        init();
        Random random=new Random();
        for(int i=0;i<=walls;i++)
            maze[random.nextInt(n)][random.nextInt(n)]=CellType.wall;
    }
    public String toString() {
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<n;i++) {
            for(int j=0;j<n;j++)
                switch(maze[i][j]) {
                    case open:
                        sb.append(' ');
                        break;
                    case wall:
                        sb.append('|');
                        break;
                }
            sb.append('\n');
        }
        return sb.toString();
    }
    final int n;
    CellType[][] maze;
}
public class Main {
    public static void main(String[] args) {
        Maze maze=new Maze(5);
        System.out.println(maze);
        maze.randomize(4);
        System.out.println(maze);
    }
}
于 2012-04-14T04:00:46.803 に答える
0

私はあなたの内側のループは次のようなものでなければならないと思います

for (int c = 0; c < maze[r].length; c++)

...と[r]

私はそれを試していません。

于 2012-04-13T22:20:37.010 に答える
0

あなたの迷路はクラスの良い候補になると思います。このようなものが機能するはずです:

import java.util.Random;

public class Maze {
    private int[][] mMaze;
    private int mRows;
    private int mCols;

    //enums here:
    public static int CELL_TYPE_OPEN = 0;
    public static int CELL_TYPE_WALL = 1;

    public Maze(int rows, int cols){
        mRows = rows;
        mCols = cols;
        mMaze = new int[mRows][mCols];
        for (int r = 0; r < mRows; r++) {
            for (int c = 0; c < mCols; c++) { 
                mMaze[r][c] = Maze.CELL_TYPE_OPEN;
            }
        }
    }

    public void RandomizeMaze(int numWalls){
        Random randomMaze = new Random();
        for (int ran = 0; ran <= numWalls ; ran++){
            mMaze[randomMaze.nextInt(mRows)][randomMaze.nextInt(mCols)]=(Maze.CELL_TYPE_WALL);
        }
    }

}

于 2012-04-13T22:44:23.413 に答える