3

0 ~ 20 の範囲の乱数を生成するこの JavaScript を作成しました。私がやりたいことは、ユーザーが生成された数字を推測するのに 4 回試行できるテキスト フィールドを作成することです。どうすればいいですか?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
</head>
<body>
<form><input name="code" id="code" type="text" value="" ></input>
<script type="text/javascript">
function makeid() {
    return Math.floor(Math.random() * 20)
}
</script>
<input type="button" style="font-size:9pt" value="Generate Code" onclick="document.getElementById('code').value = makeid()">
</input>
</form>
</body>
</html>
4

3 に答える 3

1

グローバルを使用して状態を追跡できます。ただし、ユーザーがページをリロードするだけで制限を回避できるため、このセキュリティは弱くなります。次に実際に行う必要があるのは、サーバー側(データベースなど)で状態を追跡し、ブラウザーでAjax呼び出しを使用してチェックを行うことです:)

<script type="text/javascript">
var count = 0;
function makeid() {
    count++;
    if (count <= 4) {
      return Math.floor(Math.random() * 20);
    }
    alert('Out of attempts');
}
</script>

謝罪を編集 してください、私はあなたの質問の半分だけに答えました。

  <script type="text/javascript">
        var attempts = 0;
        var secretValue = makeid(); // Calculate the secret value once, and don't vary it once page is loaded
        function makeid() {
            return Math.floor(Math.random() * 20);
        }
        function checkId(userValue) {
            if (parseInt(userValue) == secretValue) {
                alert('Correct');
            }
            else {
                attempts++;
                if (attempts <= 4) {
                    alert('Wrong - try again');
                }
                else {
                    alert('Out of attempts');
                }
            }
        }
  </script>

次に、クリックハンドラーを次のように変更します

onclick="checkId(document.getElementById('code').value);"
于 2012-08-01T04:45:17.767 に答える
0

1つの方法は、生成された数値を非表示の要素に入れることです。試行回数を記録し、ユーザーが正しく理解したか、4回の試行に達したときに、値と、正しく推測したかどうかを示します。おそらく、試行回数も表示されます。

カウンターをリセットし、新しい隠し値を生成するためのリセットボタンを含めます。

于 2012-08-01T04:41:45.290 に答える
0

テキスト フィールドを使用する代わりに、 prompt()関数を使用してみませんか? 制御フローの基本的な考え方は次のとおりです。

  1. 乱数を生成し、変数に格納します。
  2. 正しいような変数を作成し、false に設定します。
  3. for ループでユーザーに推測を求める(4 回の反復)
  4. 各推測の後、推測が保存された数値と一致するかどうかを確認します。そうである場合は、correctを trueに設定した後、早期にループから抜け出します。
  5. for ループの終了時に、 correctの値に基づいて勝ったか負けたかをユーザーに警告します。
于 2012-08-01T04:56:38.473 に答える