2011-02-05 41 views
0

在我們班,我們正在製作遊戲。用戶必須猜測單詞和東西。我不認爲有關遊戲的信息需要回答我的問題。 好吧,所以我想要做的是給用戶一個時間限制,他們必須猜測這個詞。像15秒。如果用戶在15秒內沒有猜測到這個單詞,那麼他們會失去一個回合。 問題:計時器幫助:在我的AP上進行項目計算機科學課

  1. 我們沒有學習如何使用定時器。我嘗試了定時器和東西。我可以得到一個從15倒數的計時器。
  2. 我無法在等待用戶輸入猜測時檢查當前時間。
  3. 我不知道如何繞過Stdin.readString()使得應用程序的檢查時間。

謝謝。

+0

上下文可能很重要。我認爲這是一個控制檯程序,而不是一個GUI,對嗎?什麼是Stdin? readString()? – 2011-02-05 17:55:29

+0

你是否學過線程?如果沒有,也許你應該在一個while()循環中執行計時器,該循環也檢查輸入。這不是一個好的方法,但也許程序的目的是顯示單個線程的侷限性。 – Cymen 2011-02-05 18:00:24

+0

Stdin.readString()是我們學習如何從用戶讀取字符串。 這不是一個GUI,它只是一個基於文本的程序。 我不知道什麼線程是 – 2011-02-05 18:01:56

回答

0

那麼,你可以使用Scanner類來收集用戶輸入。

如果您不知道線程是什麼,您可能需要避免計時器,但如果您確實想嘗試,您可能有興趣查看TimerTask & Timer類。

雖然你可能已經知道了,你可以從系統級獲取時間,如currentTimeMillis

0

您有幾種選擇。正如你所說,你的程序正在等待輸入,因此線程正忙。你可以做的是創建一個單獨的線程,將你的計時器傳遞給該線程並讓它檢查計時器。也許類似如下:

public class TimerChecker implements Runnable { 
    private Timer timer; 
    public TimerChecker(Timer timer) { this.timer = timer; } 

    @Override 
    public void run() { 
     // implement logic here 
    } 
} 

,你可以使用一個新的線程援引:

Timer timer = ... 
new Thread(new TimerChecker(timer)).start(); 
// Now you are free to perform your blocking operation in the current thread 
Stdin.readString(); 
0

一種方式來做到這一點,很好地運行定時器一個單獨的線程對象。 ..這個線程應當辦理的時間更新和當玩家的時間用完會然後觸發某些事件...

還是更喜歡,實現在一個單獨的線程,其遞增時觸發一個計數器在這種情況下,在幾秒鐘內,您可以通過調用睡眠來做到這一點()..

計時器線程對象應保持其跟蹤的當前時間的變量..

在你的程序的主要方法,您就可以繼續檢查該變量的值,作爲主循環或許是先決條件,

的想法是存在的,我認爲,僅僅是一個想法!

class Timer extends Thread{ 
    int current_time = 0; 

    public void run(){ 
    sleep(1000); 
    current_time += 1; 
    } 

    public void synchronized getCurTime(){ 
    return current_time; 
    } 
} 



class Game{ 

    public Game(){ 

    Timer timer = new Timer(); 
    timer.start(); 

    while (timer.getCurTime() <16){ 
     //get the guess of the user 
     //checks if it's correct 
     // if it is correct, output you win and break! 
    } 

    //time runs out 

    } 

}