0

ボタンが押されるのを待っている間、ループを一時停止するにはどうすればよいですか? しばらく探し回ったのですが、見つからないようで、ここで試してみようと思いました。

編集-

私はブラックジャック ゲームを作成しています。ボタン、HITME、および STAND を使用して GUI を追加しました。ゲームがループ内のポイントに達したら、HITME または STAND のいずれかへのプレイヤー入力を取得する必要があります。それを実行するためのボタンを追加しましたが、ループを一時停止してボタンが押されたかどうかを確認し、どれを続行するかを確認する方法がわかりません。

私が試したことはこれです:

 (othercode)  
g.printPlayerCards(p1);
            g.totalworth(p1);
            thing.messagetop("Your total card amount is: " + p1.getTotalWorth());
            thing.messagetop("Hit me? or stay?");
            thing.waitonbutton();


public void waitonbutton(){
        wantingtobeclick = 1;
        do{
            while(!(hitme == 0)){
                hitme = 0;
                wantingtobeclick =0;
            }
        }while(wantingtobeclick == 1);
    }

public void actionPerformed(ActionEvent e) {
        if(wantingtobeclick == 1){
            if (e.getSource() == HitMe){
                hitme = 1;
                System.out.println("ICLICKEDHITME");
                g.hitMe(player1);
                waitonbutton();
            }
            if(e.getSource() == Stand){
                hitme = 1;
                g.changestandhit();
            }
        }
    }

無限ループにとどまり、メインのループを続行しません。

4

4 に答える 4

0

ボタンといくつかの状態変数だけで、while ループなしで作成できます:
ここで少しフィドルを作りました: http://jsbin.com/uyetat/2/edit

コードは次のとおりです。

var elapsed=document.getElementById('timeElapsed');
var switcher = document.getElementById('switcher');

var timerStarted    = false;
var refreshInterval = null ;
var timeStarted     = 0    ;

function switchTimer() {
         if (timerStarted) {
              timerStarted = false;
              clearInterval(refreshInterval);
              switcher.value = "start";
         } else {
              timeStarted = Date.now();
              refreshInterval = setInterval (refresh, 100);
              timerStarted=true;
              switcher.value = "stop";
         }    
 }

 function refresh() {
       elapsed.value = (Date.now() - timeStarted);
 }

HTML本文は次のとおりです。

 <output id='timeElapsed' >not started
 </output>

 <button  onclick='switchTimer()' >
    <output id='switcher' >Start </output>
 </button>

Rq : 必要に応じて、mousedown / mouseup イベントを使用してホールド時間を測定できます。

于 2013-05-11T16:01:33.350 に答える
0

ループを「一時停止」する唯一の方法は、できれば別のスレッドで、ループ中にさらに多くのコードを実行することです。いえ

while (true) {
    if (_buttonIsPressed) {
        Thread.sleep(5000); // loop is paused
    }
}

しかし、もっと重要なことに、物事を間違った方向に進めているように感じます。

ループを実行して何かが起こったかどうかを確認する代わりに、ボタンが押されたらアクションを実行する方がよいでしょう。これは、イベント駆動型プログラミングと呼ばれます。

イベント例

于 2013-05-09T23:33:02.940 に答える
0

他の誰かが同じ問題を抱えている場合に備えて、修正しました:

これをメインに追加しました:

        do{

        } while(!(thing.waitonbutton()));

次に、これを私のグラフィッククラスに:

> public boolean waitonbutton(){
        wantingtobeclick = 1;
        if(hitme == 1){
            wantingtobeclick = 0;
            hitme = 0;
            return true;
        }
        return false;
    }

   public void actionPerformed(ActionEvent e) {
        if(wantingtobeclick == 1){
            if (e.getSource() == HitMe){
                hitme = 1;
                g.hitMe(player1);
            }
            if(e.getSource() == Stand){
                hitme = 1;
                g.changestandhit();
            }
        }
    }
于 2013-05-11T15:22:14.280 に答える