シンプルな blckjack ゲームを実装しようとしていますが、timeOut 関数が期待どおりに機能しないという問題があります。私が言いたいことを理解できるように、いくつかのデバッグ メッセージを書きました。私が見ている2つの言葉で、関数は一度呼び出され、何らかの理由で関数から終了し、プログラムは自分自身を実行し続け、timeOut関数に戻ります...私が望むのは、プログラムの実行を一時停止してユーザーを待つことです新しいカードをリクエストするか、停止するかを選択します。前もって感謝します!
2 に答える
setTimeout
スクリプトの実行を停止しません。遅延実行のためだけです。あなたがそれを呼び出した後 - プログラムの実行は通常どおり継続されますが、指定された時間の後 - 最初のパラメータとして渡された関数が実行されます。ユーザー入力を待つには、クリック/キーアップ/キーダウンなどのイベントを見てください。
JS で以下のようなことを行うべきではありません。JS は常にシングル スレッドであり、そのようなループはインターフェイスをフリーズさせるだけです。あなたの場合onclick
、カードブロックにイベントを配置し、必要なことを行うコードをそこに配置する必要があるようです。
while(true){
waitForUserInput();
if(requestCard){
userHand.hitMe();
var userHandCards = userHand.printHand().split(",");
displayCard(userHandCards[cardIndex]);
cardIndex++;
//console.log(">"+userHand.score());
if(userHand.score()>21){
break;
}
}else{
break
}
};
私が望むのは、プログラムの実行を一時停止して、ユーザーが新しいカードを要求するか停止するかを選択するのを待つことです
onclick ハンドラを指定していくつかのボタンを配置する必要があります。クリックされたボタンに応じて、必要なコードを実行するだけです。現在、ユーザーが自分の選択についてプログラムにどのように言うことができるかわかりません。それがキーボード コマンド (停止よりも "s" が押された場合、"n" - 次のカード) - を使用してみることができますdocument.onkeyup
。
waitForUserInput() メソッドはどこで呼び出されていますか? また、ユーザー入力を取得するためにタイムアウトを使用するのはなぜですか? 単純にマウス クリック イベントをサブスクライブしないのはなぜですか?