私は基本的な概念である必要があるものに苦労していますが、私の問題を見てもらえますか?
私は次のコードを持っています: 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 バットにチャンスを追加することでした。速い時もあれば遅い時もあります。
前もって感謝します、