0
作爲一名首席Java程序員,您好!我正忙於在Java中創建一個簡單的Pacman遊戲,只是爲了鍛鍊,並且我創建了一個讓幽靈隨機移動垂直水平的方法,但我遇到了一些問題我不知道如何強制它去左右或上下(所以不是在同一時間),我對鬼代碼現在如下:固定計時器和隨機方向
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();
}
所以方向上的隨機值是變化快(500毫秒),但速度還配置了遊戲的速度,所以我認爲我做了一個邏輯錯誤,但林不知道如何解決這個問題..我必須分開行動嗎?或者是否有更簡單的方法來實現這一點,請與我分享你的技能我很願意學習:)如果你可能需要更多的代碼,我可以在這裏發佈或給我的github帳戶的鏈接,所以你可以檢查它:)
在此先感謝!
鏈接到全部的源:pacman game source
我已經分離了pacman和幽靈的繪圖,還有一些其他的東西。但是你對第一個和最後一個的意思是我現在想要做的。對於paint()中的新Random,我這樣做是爲了隨機值每次都會自動更改,您如何在不將它放入paint()中的情況下提出這個問題?附:我已經添加了完整的源代碼鏈接,以便更好地瞭解我現在擁有的內容。 – Reshad
圖形操作應該是自動的,不需要複雜的計算。定期移動應該在別處處理,如用戶交互。該模型通過建立必須繪製的片段或移動實體列表來驅動繪圖。模型會生成一些表單並繪製表單。 – Aubin