0

私は基本的な概念である必要があるものに苦労していますが、私の問題を見てもらえますか?

私は次のコードを持っています: ai はプレーヤーのバットを動かし、HEIGHT = ディスプレイの全高、batHeight はピンポン パドル/バットのサイズです:

public void ai(int bally, int HEIGHT, int batHeight) {
    if (bally < this.y + ySize / 2) {
        if (this.y <= 0) {
            System.out.println("Upper Bound");
           y = 0;
        } else {
            y -= 2;
        }
    }
    if (bally > this.y + ySize / 2) {
        if (this.y >= HEIGHT - batHeight) {
            System.out.println("Lower Bounds");
            y = HEIGHT - batHeight;
        } else {
            y += 2;
        }
    }
}

上記はまさに私がやりたいことです。Pong Bat が上に移動し、画面の上部に到達すると、コンソール ラインが出力され、Bat が停止します。画面の下部でもまったく同じことが起こります。コンソールを出力し、バットを停止します。これは毎回問題なく実行されます。

ここで、コードを少し変更すると、次のようになります。

public void ai(int bally, int HEIGHT, int batHeight) {
    if (bally < this.y + ySize / 2) {
        if (this.y <= 0) {
            System.out.println("Upper Bound");
            y = 0;
        } else {
            if(rand.nextInt(2)+1 == 1){
                y -= 2;
            }else{
                y -=3;
            }
        }
    }
    if (bally > this.y + ySize / 2) {
        if (this.y >= HEIGHT - batHeight) {
            System.out.println("Lower Bounds");
            y = HEIGHT - batHeight;
        } else {
            y += 2;
        }
    }
}

1 回反復し、上限で停止しますが、その後、自分自身を失い、境界を忘れて、バットが画面の外に移動します。コンソールで Bat y の位置を印刷すると、問題なく追跡され、y 座標が正確に表示されますが、最初の反復の後、負の y になり、画面の高さが大きくなります。

ELSEステートメント内にIFをネストできないという理論があったので、次のように移動してみました:

if(this.y != 0){
    if(rand.nextInt(2) + 1 == 1){ 
        //move the paddle at speed 1
    } else {
        //move paddle at speed 2
    }
}else{
    //do not move the paddle
}

しかし、それは違いはありませんでした。

コードの背後にあるアイデアは、AI バットにチャンスを追加することでした。速い時もあれば遅い時もあります。

前もって感謝します、

4

1 に答える 1

0

遠くから見たコードは次のようになります。

for a given time:
if the ball is below the paddle {
    if the paddle is below the screen, put it back
    else move it down 2 or 3 units
}
if the ball is above the paddle {
    if the paddle is above the screen, put it back
    else move it up 2 units
}

ボールが y = 1 にあり、パドルが y = 2 にある場合を想像してください。最初のifステートメントがトリガーされ (1 < 2)、パドルは外側にない (2 > 0) ため、2 または 3 下に移動します。ユニット。議論のために 3 としましょう。ここで、パドルは y = -1 にあり、ボールはまだ y = 1 にあります。これで、2 番目のビッグの条件ifが真になりました。パドルは上にないので、2 ユニット上に移動します。今、パドルは y = 1 にあります...

2 番目のループに入るべきではないことは明らかです。したがって、そのelse前に を貼り付けてください。

于 2013-10-28T23:33:02.687 に答える