0

すべてを含むパックマン ゲームを作成しましたが、問題はゴーストとそのアニメーションに多くのコードが必要なことです。

例:

すべてのゴーストには、現時点で 3 つの if ステートメントが必要です。これは、ゴーストごとに 20 行のコードであり、ゲームに 3 つのゴーストがある場合、3 x 20 = 60 行の無駄なコーディングになります。

私のphpの経験では、foreachループまたは同様のものを使用すると言うでしょう..しかし、Javaでこれを行うにはどうすればよいですか? 誰かが私に例を与えることができますか? 私が今それを行う方法は以下に公開されています:

ゴースト オブジェクトの作成;

DrawPacMan ghost1 = new DrawPacMan();
DrawPacMan ghost2 = new DrawPacMan();

そして絵は次のようになります:

int g1x = 0;
boolean g1r = true;
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    // pacman movement
    diameter = 75;   
    pacman.drawPacMan(g, getHorPlaats(), getVerPlaats(), diameter, getView(), Color.yellow);
    // ghosts movement
    if(g1r == true) {
        g1x += ghostSpeed;          
    }       
    if(g1r == false) {          
        g1x -= ghostSpeed;
    }
    if(g1x == 500 || g1x == 0) {
        g1r = !g1r;
    }
    System.out.println(g1r);
    ghost1.drawGhost(g, g1x, 40, diameter, Color.red);
    ghost2.drawGhost(g, 170, 70, diameter, Color.blue);
}
4

3 に答える 3

2

あなたは Java に不慣れで、まだ最良のイディオムを理解しているように見えるので、あなたの質問に対する直接の回答ではなく、より一般的な意味での回答についてアドバイスします。あなたのコード

if(g1r == true) {
    g1x += ghostSpeed;          
}       
if(g1r == false) {          
    g1x -= ghostSpeed;
}

のように書き換えることができます

g1x += ghostSpeed * (g1r? 1 : -1);

一般的な注意: ブール値をリテラル値と比較しないでください。b == trueは justbと同じb == falseで、 と同じ!bです。

このコード

if (g1x == 500 || g1x == 0) {
    g1r = !g1r;
}

フェンシングインコードを前に付けないと、おそらく実行時にバグが発生するg1x可能性があります。制限を簡単に超える可能性があります。代わりに書くべきです

if (g1x >= 500) { g1x = 500; g1r = false; }
else if (g1x <= 0) { g1x = 0; g1r = true; }
于 2012-10-12T08:49:19.317 に答える
0
  1. 同じ関数 paintComponent(Graphics g, Ghost gr) の別のパラメーターとしてゴースト オブジェクトを渡します。
  2. g1r == true ? のように、条件文をインラインにすることができます。g1x += ゴーストスピード : g1x -= ゴーストスピード
于 2012-10-12T08:36:52.407 に答える