2011-02-05 5 views
0

私たちのクラスではゲームをしています。ユーザーは言葉やものを推測する必要があります。私はゲームについての情報が私の質問/問題に答える必要があるとは思わない。 私がしようとしているのは、単語を推測しなければならない時間制限をユーザーに与えることです。 15秒のようなもの。ユーザーが15秒以内に単語を推測しない場合、ターンを失います。 問題:Timer Help:私のAPコンピュータサイエンスクラスのプロジェクトに取り組む

  1. タイマーの使用方法は学習しませんでした。私はタイマーやものを試しています。私はタイマーを15からカウントダウンすることができます。
  2. ユーザーが推測を入力するのを待っている間、現在の時刻を確認することはできません。
  3. 私はStdin.readString()をバイパスする方法を知りませんし、プログラムが時間をチェックするようにします。

ありがとうございます。

+0

コンテキストが重要な場合があります。私はこれがGUIではなく、コンソールプログラムであると仮定します。 Stdinとは何ですか? readString()? –

+0

スレッディングについて学んだことはありますか?そうでなければ、入力をチェックするwhile()ループでタイマーを実行するはずです。これは良い方法ではありませんが、プログラムの目的は単一のスレッドの制限を示すことです。 – Cymen

+0

Stdin.readString()は、ユーザーからStringsを読み取る方法を学びました。 GUIだけではなく、テキストベースのプログラムです。 スレッディングがどちらであるか分かりません –

答えて

0

まあ、Scannerクラスを使用して、ユーザーからの入力を収集できます。

スレッディングがまだわからない場合はタイマーを避けたいかもしれませんが、試してみたい場合はTimerTask & Timerクラスを調べることができます。

あなたが既に知っているかもしれないが、あなたはcurrentTimeMillis

+0

なぜスキャナは助けになるのですか? –

+0

@Sam U StdinオブジェクトはおそらくScannerクラスのラッパーです。私はちょうど可能な文書化された代替 –

0

のようにあなたは、いくつかのオプションがあり、Systemクラスから時刻を取得することができます。あなたの言ったように、あなたのプログラムは入力を待っているので、スレッドがビジーです。あなたができることは、別のスレッドを作成し、そのスレッドにタイマーを渡し、タイマーをチェックさせることです。おそらく、次のようなもの:

あなたが使用して、新しいスレッドで呼び出されていることができ
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

としてそれを提供していたが、これは完全に助けに見えるが、実際に混乱している –

+0

各スレッドは、別のスレッドにsimultanousを実行することができます。したがって、一方のスレッドがユーザー入力を読み取ってブロックされても、他方のスレッドは依然として自由に動くことができます。ここでは、「TimerChecker」は、元のスレッドがユーザの入力を待っている間にアクションを実行する(例えば、時間をチェックする)ことができます。 [java threading guide](http://download.oracle.com/javase/tutorial/essential/concurrency/procthread.html)を参照してください。 –

0

一つの方法はよく実行するために、タイマーのための別のスレッドオブジェクトです。このスレッドは、時間の更新を処理し、その後、プレーヤーの時間がなくなったときに特定のイベントをトリガーするでしょう...

以上、時間によって増分がトリガーされる別のスレッドでカウンターを実装する-step、この場合、秒単位で、スリープを呼び出すことでこれを行うことができます()..

タイマースレッドオブジェクトは、あなたのプログラムの主な方法に...

を、現在の時間を追跡する変数を維持しなければならない、あなたはと、この変数の値をチェックし続けなければならおそらくあなたのメインループの前提条件は、

という考えがあると思います。

擬似コード

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 

    } 

}イベントについてJava eventing libraryとアーキテクチャを駆動する方法

+0

誰もスレッドについて話し続けます。私の質問はどのように使うべきか/スレッドとは何でしょうか? –

+0

あなたの親がプロセスであれば、あなたはあなたの親スレッドです...スレッドは同じメモリ空間で実行の別の部分ですが、私はそれを呼び出すプロセスを考える... – ultrajohn

関連する問題