2

さて、ゲーム、バード、ボードのクラスがあります。Game クラスにパイプの作成、削除、移動のコードがあります。Pipe クラスを作成せず、パイプ オブジェクトを作成するようにアドバイスされました。パイプ コードがないと、パイプは表示されませんが、ゲームはスムーズに実行されます。パイプ コードがある場合、プログラムは実行されますが、ウィンドウが表示されません。Game コンストラクターとパイプ コードを示します。

public Game(int a) {

    super("Game");
    setLayout(new BorderLayout());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);

    this.board = new Board(this);
    add(board, BorderLayout.CENTER);

    bird = new Bird();
    bird.setArr();
    System.out.println("Bird made");

    /*setPipeHeight(a);
    setArr1();
    setArr2();
    System.out.println("Pipe made");
    */
    //It continues, but this is the section I am looking at
}

今パイプコード

public void setPipeHeight (int h){
    System.out.println("Set height");
    height = h;
    //Set coords
    setArr1();
    setArr2();
    /*for (int i = 0; i < arrX1.length; i++){
        for (int j = 0; j < arrY1.length; j++){

        }
    }*/
}

public void setArr1(){
    System.out.println("Set arr1");
    int x = (Board.numCols - 1) - width;
    for (int i = 0; i < width + 1; i++){
        for (int j = 0; j < height + 1; j = j + height){
            int h = height;
            while (h >= 0){
                Board.grid[x][h] = 3;
            }
        }
    }
}

public void setArr2(){
    System.out.println("Set arr2");
    int tillTop = Board.numRows - (height + separation);
    for (int i = 0; i < width + 1; i++){
        for (int j = 0; j < tillTop + 1; j = j + tillTop){
            int h = height;
            while (h >= 0){
                Board.grid[x][h] = 3;
            }
        }
    }
}

public void movePipe(){
    System.out.println("Move pipe");
    x--;
    setArr1();
    setArr2();
}

何もコメントアウトしないと、実行中と表示されますが、ウィンドウは作成されません。Game クラスでは、これらの行をコメントアウトすると、ウィンドウは表示されますが、鳥は下に移動しません。

/*setPipeHeight(a);
setArr1();
setArr2();
System.out.println("Pipe made");
*/

残りのパイプ コードをコメント アウトすると、機能しているゲームからパイプが表示されなくなります。

4

1 に答える 1

3

while (h >= 0)あなたの場合、無限ループです: h はループ内で変更されません。

于 2014-04-04T12:43:24.313 に答える