質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

javaScript ゲーム、何を入れても答えになってしまう

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 616

score 32

アルファベットあてゲームをしたいのですがなぜか何を入れても正解になってしまいます。

gameOverの値かletterToGuessの値が最初から入ってしまっていると怪しんでいるのですが、どうしてもおかしなところが見つかりません

宜しければお力添えいただけないでしょうか.....

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <title>EX4</title>

    <script >
        window.addEventListener('load', eventWindowLoaded, false);

        var Debugger = function() {};
        Debugger.log = function(message) {
            try {
                console.log(message);
            } catch(exception) {
                return;
            }
        }
        function eventWindowLoaded() {
            canvasApp();
        }

        function canvasApp() {
            var guesses = 0;
            var message = "Guess the letter from a (lower) to z(higher) ";
            var letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
                "l", "m", "n", "o", "p", "q", "r", "s" , "t", "u", "v", "w", "x",
                "y", "z"];
            var today = new Date();
            var letterToGuess = " ";
            var higherOrLower = " ";
            var lettersGuessed;
            var gameOver = false;

            var theCanvas = document.getElementById("canvasOne");
            var context = theCanvas.getContext("2d");

            initGame();

            function initGame() {
                var letterIndex = Math.floor(Math.random() * letters.length);
                letterToGuess = letters[letterIndex];
                // guesses = 0;
                lettersGuessed = [];
                // gameOver = false;
                window.addEventListener("keyup", eventKeyPressed, true);
                var formElement = document.getElementById("createImageData");
                formElement.addEventListener('click', createImageDataPressed, false);

                drawScreen();
            }
            function eventKeyPressed(e) {
                if (!gameOver) {
                    var letterPressed = String.fromCharCode(e.keyCode);
                    letterPressed = letterPressed.toLowerCase();
                    guesses++;
                    lettersGuessed.push(letterPressed);

                    if (letterPressed = letterToGuess) {
                        gameOver = true;
                    } else {
                        letterIndex = letters.indexOf(letterToGuess);
                        guessIndex = letters.indexOf(letterPressed);
                        Debugger.log(guessIndex);
                        if (guessIndex < 0) {
                            higherOrLower = "That is not a letter";
                        } else if (guessIndex > letterIndex) {
                            higherOrLower = "Lower";
                        } else {
                            higherOrLower = "Higher";
                        }
                    }
                    drawScreen();
                }
            }
            function drawScreen() {
                context.fillStyle = "#ffffaa";
                context.fillRect(0, 0, 500, 300);
                context.strokeStyle = "#000000";
                context.fillRect(5, 5, 490, 290);
                context.textBaseline = "top";

                //Date
                context.fillStyle    = "#000000";
                context.font         = "10px _san";
                context.fillText(today, 150, 10);
                //Message
                context.fillStyle    = "#FF0000";
                context.font         = "14px _sans";
                context.fillText  (message, 125, 30);
                //Guesses
                context.fillStyle    = "#109910";
                context.font         = "16px _sans";
                context.fillText('Guesses: ' + guesses, 215, 50);
                //Higher Or Lower
                context.fillStyle    = "#000000";
                context.font         = "16px _sans";
                context.fillText("Higher Or Lower: " + higherOrLower, 150,125);
                //Letters Guessed
                context.fillStyle    = "#FF0000";
                context.font         = "16px _sans";
                context.fillText("Letters Guessed: " + lettersGuessed.toString(), 10, 260);
                if (gameOver) {
                    context.fillStyle = "#ff0000";
                    context.font = "40px _sans";
                    context.fillText("You got it!", 150, 180);
                }
            }
            function createImageDataPressed(e) {
                window.open(theCanvas.toDataURL(), "canvasImage", 
                "left = 0, top = 0, width =" + theCanvas.width + ",height ="
                + theCanvas.height + ", toolbar = 0, resizable = 0");
            }
        }

    </script>
</head>
<body>
    <div style="position: absolute; top: 50px; left: 50px;">
        <canvas id="canvasOne" width="500" height="300"></canvas>
        <form>
            <input type="button" id="createImageData" value="Export Canvas">
        </form>
    </div>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/09/06 07:11

    簡単に箇条書きで良いのでこのゲームの仕様を記載していただいて良いですか?コードから読み取れるとは限りませんし、「ゴール」が明確になっていないとどのように調整していけば良いか回答者も判断できませんので。

    キャンセル

回答 1

checkベストアンサー

+3

以下の分岐はletterToGuessの値をletterPressedへ代入した上でその値を評価していますが正しいですか?

function eventKeyPressed(e) {
...

  if (letterPressed = letterToGuess) {
//  letterPressed === letterToGuess ではないか

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/06 09:22

    ifの比較のイコールは二つ!!!! gameOverは一つ!!そこだ!!!
    完全に忘れて居ました...... ありがとうございました!!

    キャンセル

  • 2018/09/06 09:32

    どんまいです:D 私もたまにあります

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る