2017-01-27 1 views
0

私はシンプルなイベントリスナをいくつかの条件付きで書きましたが、意図的にプッシュされるのではなく、配列のplayerGuessが配列allPlayerGuessesを置き換えます。誰かが私が逃しているものを教えてくれる?イベントリスナ - プッシュメソッドの問題

//global variables 
guessX = document.querySelector("#guess-x-input"), 
guessY = document.querySelector("#guess-y-input"), 
boardSize, /*defined by user. must be between 7 and 12 */ 
playerGuess = [], 
allPlayerGuesses = [], 


fireButton.addEventListener("click", function(){ 

    var sameGuess = false,   


    if (guessX.value === undefined || guessX.value < 1 || guessX.value > boardSize || guessY.value === undefined || guessY.value < 1 || guessY.value > boardSize) { 
     alert("Wrong coordinates!"); 
    } else if (allPlayerGuesses.length === 0) {   
     playerGuess[0] = guessX.value - 1; 
     playerGuess[1] = guessY.value - 1; 
     allPlayerGuesses.push(playerGuess);    
    } else if (allPlayerGuesses.length !== 0) {    
     playerGuess[0] = guessX.value - 1;   
     playerGuess[1] = guessY.value - 1; 

     for (var i = 0; i < allPlayerGuesses.length; i++) { 
      if (playerGuess[0] === allPlayerGuesses[i][0] && playerGuess[1] === allPlayerGuesses[i][1]) { 
       alert("Coordinate already uncovered. Select another!"); 
       sameGuess = true;     
      } 
     } 

     if (!sameGuess) { 
      playerGuess[0] = guessX.value - 1; 
      playerGuess[1] = guessY.value - 1; 
      allPlayerGuesses.push(playerGuess); 
     }   
    } 

    if (board[playerGuess[0]][playerGuess[1]] === "bp") { 
     document.querySelector(".ship-cell-" + playerGuess[0] + "-" + playerGuess[1]).classList.remove("hid"); 
    } else { 
     document.querySelector(".miss-cell-" + playerGuess[0] + "-" + playerGuess[1]).classList.remove("hid"); 
    } 
}); 
+1

allPlayerGuessesの宣言方法を共有できますか?また、プレーヤーでしょうか?もちろん –

+0

!それは約400行の戦艦ゲームコードのスニペットですが、元の投稿を編集し、役立つべきすべての変数を含めて編集します。どうもありがとうございます! – tirmey

+0

**変数を宣言する**。あなたが_必要としないという事実は、あなたが〜持っていないことを意味するものではありません。おそらくそれは問題と関係しているでしょう。完全なコードを表示するか、検証するためのフィドラーを作成します。 – Gabriel

答えて

0

問題が発生しました。 allPlayerGuesses.push(playerGuess)を実行すると、allPlayerGuessesに挿入されるだけでなく、配列のplayerGuessの既存の値が置換されます。これを確認するには、allPlayerGuessesの長さをチェックします。これにより、allPlayerGuessesに重複したエントリが作成されます。

解決策は、clickイベントに入力するたびにplayerGuessを初期化します。

fireButton.addEventListener("click", function(){ 
    playerGuess = []; 
    // your other code... 
}); 

これで問題が解決するはずです。

+0

素晴らしい、Chetan!大変ありがとうございました! – tirmey

+0

心配はいりません。私が助けることができてうれしいです。 –

関連する問題