0

Java クラス用に作成するはずの Ping Pong プログラムで問題が発生しています。私たちは書類を渡していましたが、編集が必要です。それと自動のピンポンゲームなので、入力は必要ありません。すべてコンピューターによる偶然です。パドルを上げ下げするだけです。私はそれを動かし、すべてを手に入れました。

ここでの問題は、Y の範囲が 20 ~ 465 であることです。465 から 20 までカウントダウンし、20 から 465 までカウントアップする代わりに、再び 465 までジャンプして 20 からカウントダウンするため、パッドはかなり速く下から上に消えました。誰かが私のためにチェックアウトしたい場合に備えて、プロジェクトを添付します。

なぜジャンプしてカウントアップしないのかを理解するのを手伝ってくれる人を探しているだけではありません. 問題がそれだけで把握できる場合のコードは次のとおりです。私は edgeCheck および Update メソッドを使用しています。

import java.awt.Point;
import javax.swing.ImageIcon;
public class CharlesPaddle extends Paddle {
    /************************************************** ***************/
    public CharlesPaddle(int _x) {
        super(_x);
        ImageIcon iiPaddle = new ImageIcon(this.getClass().getResource("paddle.png"));
        paddleImage = iiPaddle.getImage();
    } //end CharlesPaddle
    /************************************************** ***************/
    public void update() {
        if (edgeCheck() == false)
            do {
                paddleLocation.y -= 1;
                System.out.println(paddleLocation.y);
            }
            while (paddleLocation.y >= 21);
        else if (edgeCheck() == true)
            do {
                paddleLocation.y += 1;
            }
            while (paddleLocation.y <= 465);

    } //end update

    /************************************************** ***************/
    public void init() {
        paddleLocation = new Point();
        paddleVector = new Point();
        paddleVector.x = 0;
        paddleVector.y = speed;
        paddleLocation.x = xLocation;
        paddleLocation.y = 200;
    } //End init
    /************************************************** ***************/
    public boolean edgeCheck()
    {

        boolean check = false;
        if (paddleLocation.y >= 465)
            check = false;
        else if (paddleLocation.y <= 20)
            check = true;
        return check;

    } // End edgeCheck
}
4

1 に答える 1

0

なぜジャンプしてカウントアップしないのかを理解するのを手伝ってくれる人を探しているだけではありません.

うーん、どう考えても難しそうですね。

私が見ているように、あなたには2つのオプションがあります

罪関数(より良い)

上が 465 で下が 20 の場合、振幅は (465 - 20) / 2、つまり 222.5 になります。y 交差は、振幅に底を加えたものである必要があるため、242.5 です。a を宣言しdouble t、更新でこれを行います。

public void update() {
    paddleLocation.y = (int)((222.5) * Math.sin(t) + (242.5))
    t += Math.PI * .01; // This number is arbitrary

} 

コードを修正してください (おそらく何かを見逃しているかもしれませんが、試してみてください)

あなたのコードは本当にずさんで直感的ではありません。申し訳ありません。しかし、私はあなたを導くために最善を尽くします。

問題は、メソッド内に不要なループがあることだと思いますupdate。これが「ジャンプ」の原因です。このupdateメソッドは頻繁に呼び出す必要があり、ここでは 1 つの変数を操作しているだけなので、ループは必要ありません。代わりに、これを試してください:

import java.awt.Point;
import javax.swing.ImageIcon;
public class CharlesPaddle extends Paddle {
    /************************************************** ***************/
    public CharlesPaddle(int _x) {
        super(_x);
        ImageIcon iiPaddle = new ImageIcon(this.getClass().getResource("paddle.png"));
        paddleImage = iiPaddle.getImage();
    } 
    /************************************************** ***************/
   public void update() {
        goingUp = updateDirection(goingUp);
        if (goingUp)
            paddleLocation.y += 1;
        else
            paddleLocation.y -= 1;

        System.out.println("y position: " + paddleLocation.y);
    }

    /************************************************** ***************/
    public void init() {
        paddleLocation = new Point();
        paddleVector = new Point();
        paddleVector.x = 0;
        paddleVector.y = speed;
        paddleLocation.x = xLocation;
        paddleLocation.y = 200;
    } 
    /************************************************** ***************/
    public boolean updateDirection(boolean goingUp)    // This name makes more sense
    {
        if (goingUp && paddleLocation.y >= 465)      // It's just peaked,
            return false;                            // so return false (going down)
        else if (!goingUp && paddleLocation.y <= 20) // It's just gone to the bottom,
            return true;                             // so return true (going up)
        else                                         // It's somewhere in between,
            return goingUp;                          // so don't change anything!             
    }
}

それらのいずれかが機能するはずです。

メソッドと変数の名前が意味をなさないため、名前を変更しました。また、冗長なコメントの一部を削除しました。

次に、メイン メソッドで、for または while ループを使用して、この update() を繰り返し呼び出す必要があります。update メソッドで paddleLocation を出力したり、必要なことを行うこともできます。

于 2014-01-25T20:06:54.847 に答える