初心者のJavaプログラマーとして、私はJavaで簡単なパックマンゲームを作成して練習するのに忙しく、ゴーストが垂直方向から水平方向にランダムに移動するメソッドを作成しましたが、いくつかの問題があります。強制する方法がわかりません。左右または上下に移動します(同時にではありません)。現在のゴーストのコードは次のとおりです。
public void moveUp() {
}
public void moveLeft() {
if (g1x >= 500) { g1x = 500; g1r = false; }
else if (g1x <= 0) { g1x = 0; g1r = true; }
}
public void moveRight() {
if (g1x >= 500) { g1x = 500; g1r = false; }
else if (g1x <= 0) { g1x = 0; g1r = true; }
}
public void moveDown() {
}
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 * (Math.random() > 0.5? 1 : -1); // random direction
Random randomGen = new Random();
// generate a random number, between 0 - 3
int randomize = randomGen.nextInt(4);
switch(randomize) {
case 0:
moveUp();
System.out.println("up");
break;
case 1:
moveLeft();
System.out.println("Left");
break;
case 2:
moveRight();
System.out.println("Right");
break;
case 3:
moveDown();
System.out.println("down");
break;
}
ghost.drawGhost(g, randomize, 40, diameter, Color.red);
}
ご覧のとおり、方向にランダム化変数を使用しました。水平位置はハードコーディングされていますが、水平位置もランダム化によって示されますが、両方に使用すると、奇妙な斜めの動きが発生します。
次の問題は、私がこのように私の構造でタイマーを使用することです
public PacMan() {
// create timer and start timer
javax.swing.Timer autoKlik = new javax.swing.Timer(WACHTTIJD, this);
autoKlik.start();
}
方向のランダムな値は高速(500ms)に変わりますが、速度はゲームプレイの速度も構成するので、論理的な間違いを犯したと思いますが、これを解決する方法がわかりません..アクションを分離する必要がありますか?または、これを達成するためのより簡単な方法がありますか?私とあなたのスキルを共有してください私は学ぶ意欲があります:)さらにコードが必要な場合は、ここに投稿するか、私のgithubアカウントへのリンクを提供してチェックアウトできます:)
前もって感謝します!
完全なソースへのリンク:パックマンゲームソース