2017-08-17 44 views
-1

我的目標是停止打印出之前使用過的密鑰,並在顯示所有字母(遊戲結果)時停止遊戲。JavaScript停止鍵被再次使用

解決:對於那些誰有同樣的問題:添加此功能將 做的工作:

//check if key is used 
function checkKey(charStr) { 
    if (keyStore.includes(charStr)) { 
     return false; 
    } 
    else { 
     //record pressed key 
     keyStore.push(charStr); 

     if (nameChosen.toLowerCase().includes(charStr)) { 
      display(charStr); 
     } 
     else { 
      attempt--; 

      //print out wrong-guess key 
      document.getElementById("wrongGuess").innerHTML = document.getElementById("wrongGuess").innerHTML + charStr + " "; 
     } 
    } 
} 

,並把功能按鍵事件裏面。

這裏是我的老代碼

var names = ["Adam Red", "Bob Green", "Chris Blue"]; 
var nameChosen = names[Math.floor(Math.random() * names.length)]; 
var nameSplit = nameChosen.split(""); 
var updated = []; 
var attempt = nameChosen.length - 2; 

function display(char) { 
    //replace each of the letters with underscore and space with dash 
    char = char || "_"; // set to default when no char given 
    var nameDisplayed = []; 

    for (var i = 0; i < nameSplit.length; i++) { 
     if (updated[i] || (char.toLowerCase() === nameSplit[i].toLowerCase())) { 
      nameDisplayed += nameSplit[i] + " "; 
      updated[i] = true; 
     } 
     else if (nameSplit[i] == " ") { 
      nameDisplayed += "- "; 
     } 
     else { 
      nameDisplayed += "_ "; 
     } 
    } 

    document.getElementById("nameDisplay").innerHTML = nameDisplayed; 
} 

// need function for game won <=============== 

function gameLost() { 
    document.getElementById("container").style.backgroundColor = "red"; 
    document.getElementById("notice").innerHTML = "SORRY, YOU'VE LOST THE GAME!"; 
    document.getElementById("notice").style.fontWeight = "bold"; 
    document.getElementById("notice").style.color = "white"; 
} 

document.getElementById("attempt").innerHTML = attempt; 

//get key pressed by user 
document.addEventListener("keypress", function(evt) { 
    evt = evt || window.event; 
    var charCode = evt.keyCode || evt.which; 
    var charStr = String.fromCharCode(charCode); 

    console.log("key pressed: ", charStr); 

    if (nameChosen.toLowerCase().includes(charStr)) { 
     display(charStr); 
    } 
    else { 
     attempt--; 
     document.getElementById("wrongGuess").innerHTML = document.getElementById("wrongGuess").innerHTML + charStr + " "; 
     // print out key pressed continuously <================== 
    }; 

    if (attempt == 0) { 
     gameLost(); 
    }; 

    document.getElementById("attempt").innerHTML = attempt; 
}); 

display(); // call onload 

我已經試過:添加新的變種,並將其設置真/假,並把在循環,創建一個新的功能,但仍無法使它發生了。

+0

不要混淆與問題的答案。如果現有答案無法解決您的問題,請使用解決方案添加正確答案 –

回答

1

它看起來像你正在建立一個男人的遊戲?

嘗試通過nameDisplayed變量搜索,看看它的任何字符匹配「_」

如果他們不的,你發現所有的字符,並贏得了比賽! 如果它仍然有一個'_'字符,那麼必須有另一個字符留下才能找到。

保持按下全局數組鍵,然後搜索一次按下新鍵可以幫助重複鍵。

至於停止鍵盤輸入,當你贏了,做一些研究到removeEventListener函數,你可以刪除鍵甚至監聽器。

希望有幫助!

+0

謝謝!這確實有幫助。是的,我正在建造hang子手。 1件事:雖然我試過一個循環來檢查所有nameDisplayed項目與「_」進行比較,但它沒有奏效。 – Viet

+0

看起來像我讀了你如何更新nameDisplayed錯誤。嘗試與'_'比較。 (確保下劃線後有一個空格,因爲它看起來像是在裏面放一個空格) – user3277546

+0

謝謝。我解決了這個問題。 – Viet

相關問題