1

こんにちは、私は Java の学習で忙しく、パックマン ゲームの作成で忙しいのですが、今はゴーストを「ランダム」方向に移動させる必要があるため、この方向を垂直/水平、またはその逆に変更する必要があります。

その瞬間、幽霊は左から右へ、そして右から左へと移動します。このアクションを担当するコードは次のとおりです: (pacman 描画部分を無視します。以下を参照してください //ゴーストの動き)

    DrawPacMan pacman = new DrawPacMan();
DrawGhost ghost = new DrawGhost();

int g1x = 0;
boolean g1r = true;

public void paintComponent(Graphics g) {

    super.paintComponent(g);
    // pacman movement
    diameter = 25;   
    pacman.drawPacMan(g, getHorPlaats(), getVerPlaats(), diameter, getView(), Color.yellow);

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

    // check direction
    if (g1x >= 500) { g1x = 500; g1r = false; }
    else if (g1x <= 0) { g1x = 0; g1r = true; }

    ghost.drawGhost(g, g1x, 40, diameter, Color.red);

}

ランダムな方向を作成する方法や、使用する関数がわかりません。誰かがヒント/ヘルプを教えてくれますか?可能であれば、さらに作業できる小さな例を教えてください。さらにコードや何かを見たい場合は、質問してください。投稿します:)

4

3 に答える 3

2

このような単純なものの場合、0、1、2、または3のいずれかの乱数を生成します。これにより、必要なすべての方向(上、下、左、右)が得られます。

 import java.util.Random;
 // create a random number generator
 Random randomGen = new Random();
 // generate a random number, between 0 and n-1 (0,1,2,3 in this case)
 int theRandomNumber = randomGen.nextInt(4);

 public void setRandomGhostDirection() {

     switch(theRandomNumber) {
     case 0:
         moveUp();
         break;
     case 1:
         moveLeft();
         break;
     case 2:
         moveRight();
         break;
     case 3:
         moveDown();
         break;
     }

 }

final int DIRECTION_UP = 0方向番号をなどのように定義することで、これをクリーンアップできます 。

于 2012-10-19T19:29:39.047 に答える
2

これを試して:

g1x += ghostSpeed * (Math.random() > 0.5? 1 : -1);

またはさらに簡単:

g1x += ghostSpeed * Math.signum(Math.random() - 0.5);

Math.random()これは、で均一に分散された値を返すという事実を利用しています[0, 1)

しかし、そのようなアルゴリズムによってゴーストが左から右に不規則に移動することがすぐにわかります。もっとエレガントなものが必要になります。たとえば、ゴーストが左に移動した場合、75%の確率で続行するか、25%の確率で方向を変えます。これに取り組みましょう。

于 2012-10-19T19:18:55.977 に答える
1

Math.random() は、探している関数です。単独で、この関数は 0 から 1 までのランダムな double を生成します。

擬似コード:

double randomDirection = Math.random();

if (direction > 0.25) {
 // move left if possible
} else if (direction > 0.5) {
 // move right if possible
} else if (direction > 0.75) {
 // move down if possible
} else {
 // move up if possible
}
于 2012-10-19T19:21:45.030 に答える