這是我以前的問題的後續。我有兩個主板的戰艦遊戲。當用戶點擊電腦板時發生的作用,沿着這些路線:在遊戲中正確實施延遲
public void mouseClicked(MouseEvent e)
// Get coordinates of mouse click
if (//Set contains cell) {
/add Cell to set of attacked cells
//Determine if set contains attacked cell.
// If yes, hit, if no, miss.
checkForWinner();
的checkForWinner方法確定遊戲已經贏得了尚未。如果沒有,它會調用nextTurn方法來改變當前的轉彎。如果currentTurn設置爲Computer,則會自動調用ComputerMove()方法。
該方法完成後,它再次檢查forWinner,更改轉向並等待用戶單擊網格再次啓動循環。
理想情況下,我想要有聲音效果,或者至少在移動之間暫停。但是,不管我如何使用Thread.sleep,TimerTask或其他任何東西,我都無法使其正常工作。
如果我使用的方法CheckforWinner一個簡單的Thread.sleep(500),或在ComputerMove方法,所發生的一切是人的旅途中被延遲設定的時間量。一旦他的舉動被執行,計算機的移動立即完成。
我對線程知之甚少,但我認爲這是因爲在方法之間來回跳動的所有啓動都始於鼠標監聽器中的方法。
鑑於我的系統的建立,是否有一種方法來實現延遲而不會徹底改變事物?
編輯:可能也包括兩類:
public void checkForWinner() {
if (human.isDefeated())
JOptionPane.showMessageDialog(null, computer.getName() + " wins!");
else if (computer.isDefeated())
JOptionPane.showMessageDialog(null, human.getName() + " wins!");
else
nextTurn();
}
public void nextTurn() {
if (currentTurn == computer) {
currentTurn = human;
} else {
currentTurn = computer;
computerMove();
}
}
public void computerMove() {
if (UI.currentDifficulty == battleships.UI.difficulty.EASY)
computerEasyMove();
else
computerHardMove();
}
public void computerEasyMove() {
// Bunch of code to pick a square and determine if its a hit or not.
checkForWinner();
}
您是否嘗試過等待'ComputerMove'的開始? – 2013-05-06 13:33:34
是的 - 但它只是暫停人的舉動。它不會延遲電腦移動。 – 2013-05-06 13:34:03
然後,你似乎需要調試你的程序來找出爲什麼'ComputerMove'在「人類移動」結束之前被調用,對吧? – 2013-05-06 13:36:06