javascript - 琐事猜谜游戏(删除字符串数组中的空格键)
问题描述
我是一个 javascript 菜鸟,我开始了一个 Bootcamp 来提高我的知识。我的任务是创建一个刽子手风格的猜谜游戏。我几乎从 GitHub 上提取了一个模板 repo,并以 Bob Ross 为主题。我遇到的问题是要猜测的单词数组都包含一个空格。
( CADMIUM YELLOW
, PHTHALO GREEN
, PHTHALO BLUE
, VAN DYKE BROWN
, PRUSSIAN BLUE
, TITANUM WHITE
, YELLOW OCHRE
, ALIZIRIN CRIMSON
)
_
这个空间被认为是一个值,就像字母一样被分配一个。如果有人能帮我解决,我将不胜感激。
// color list
var words = ["CADMIUM YELLOW", "PHTHALO GREEN", "PHTHALO BLUE", "VAN DYKE BROWN", "PRUSSIAN BLUE", "TITANUM WHITE", "YELLOW OCHRE", "ALIZIRIN CRIMSON"];
var maxNumGuesses = 8;
var guessedLetters = [];
var ansWordArr = [];
var numGuessesRemaining = 0;
var numWins = 0;
var numLosses = 0;
var isFinished = false;
var ansWord; // word being played
function setup() {
//random word from words list
ansWord = words[Math.floor(Math.random() * words.length)];
ansWordArr = [];
for (var i = 0; i < ansWord.length; i++) {
ansWordArr[i] = "_";
}
numGuessesRemaining = maxNumGuesses;
guessedLetters = [];
document.getElementById("giphy-embed").src = "";
document.getElementById("numGuesses").style.color = "";
updateScreen();
};
//updates the HTML from the functions
function updateScreen() {
document.getElementById("numWins").innerText = numWins;
document.getElementById("numLosses").innerText = numLosses;
document.getElementById("numGuesses").innerText = numGuessesRemaining;
document.getElementById("answerWord").innerText = ansWordArr.join("");
document.getElementById("guessedLetters").innerText = guessedLetters;
};
//function to check the key that's pressed
function checkGuess(letter) {
//if letter is not in guessedLetters array then push the letter to the array
if (guessedLetters.indexOf(letter) === -1) {
guessedLetters.push(letter);
//if the letter isn't in the answer word then -1 the numGuessesRemaining
if (ansWord.indexOf(letter) === -1) {
numGuessesRemaining--;
//if numGuessesRemaining is 3 or less then change the color
if (numGuessesRemaining <=3) {
document.getElementById("numGuesses").style.color = "#e12d2e";
}
//if letter is in answer then replace the positioned "_" with the letter
} else {
for (var i = 0; i < ansWord.length; i++) {
if (letter === ansWord[i]) {
ansWordArr[i] = letter;
}
}
}
}
};
//function to check if the player is a winner
function isWinner() {
//if there are no more "_" in the ansWordArr then +1 to Wins and switch isFinished to true
if (ansWordArr.indexOf("_") === -1) {
numWins++;
isFinished = true;
//if the answer is guessed then play assigned gif
if(ansWord === "CADMIUM YELLOW") {
document.getElementById("giphy-embed").src = "https://giphy.com/gifs/bob-ross-XD0CxeNpDzBsI";
} else if (ansWord === "PHTHALO GREEN") {
document.getElementById("giphy-embed").src = "https://giphy.com/gifs/painting-bob-joy-zc9fWRl4DUZ4A";
} else if (ansWord === "PHTHALO BLUE") {
document.getElementById("giphy-embed").src = "https://giphy.com/gifs/painting-bob-joy-zc9fWRl4DUZ4A";
} else if (ansWord === "VAN DYKE BROWN") {
document.getElementById("giphy-embed").src = "https://giphy.com/gifs/bob-ross-XD0CxeNpDzBsI";
} else if (ansWord === "PRUSSIAN BLUE") {
document.getElementById("giphy-embed").src = "https://giphy.com/gifs/bob-ross-FgqvzvlSu3SXm";
} else if (ansWord === "TITANIUM WHITE") {
document.getElementById("giphy-embed").src = "https://giphy.com/gifs/bob-ross-FgqvzvlSu3SXm";
} else if (ansWord === "YELLOW OCHRE") {
document.getElementById("giphy-embed").src = "https://giphy.com/gifs/bob-ross-XD0CxeNpDzBsI";
} else if (ansWord === "ALIZIRIN CRIMSON") {
document.getElementById("giphy-embed").src = "https://giphy.com/gifs/bob-ross-FgqvzvlSu3SXm";
}
}
};
//function to check if player is a loser
function isLoser() {
// if the numGuessesRemaining is 0 then -1 numLosses and switch isFinished to true
if(numGuessesRemaining <= 0) {
numLosses++;
isFinished = true;
//play the loser gif
document.getElementById("giphy-embed").src = "https://giphy.com/gifs/rYEAkYihZsyWs/html5";
document.getElementById("numLosses").style.color = "#e12d2e";
}
};
//event listener for key pressed
document.onkeyup = function(event) {
//if isFinished is true then restart the game to the initial setup
//and switch isFinished back to false
if (isFinished) {
setup();
isFinished = false;
} else {
//check to see if only letters A-Z are pressed
//functions are executed when user presses A-Z key
if(event.keyCode >= 46 && event.keyCode <= 90) {
checkGuess(event.key.toUpperCase());
updateScreen();
isWinner();
isLoser();
}
}
};
setup();
updateScreen();
console.log(ansWord);
解决方案
空格键的键码是 32。
因此,对于您检查按下哪个键的部分,可能添加如下内容:
//functions are executed when user presses A-Z key
if(event.keyCode >= 46 && event.keyCode <= 90) {
checkGuess(event.key.toUpperCase());
updateScreen();
isWinner();
isLoser();
}
//this part handles spaces
else if(event.keyCode == 32) {
checkGuess("_");
updateScreen();
isWinner();
isLoser();
}
您也可以将其添加到上面的 if 语句中。
推荐阅读
- sdk - Genexus Extensions SDK - 如何为 Genexus Server 开发扩展?
- android - 如何使用 Flutter 创建自定义 3D 框?
- python - 如何将 cv2 矩形边界框合并为多边形?(不是重叠/阈值)
- javascript - Javascript - 在特定网站上多次注入代码
- amazon-web-services - s3 从 s3 存储桶前缀中检索所有删除标记版本
- java - Jakarta EE 兼容的应用程序服务器版本
- python - 我想用假人做一个链表但是为什么代码是反向打印的!!。这是我的代码
- python - 使用 python 和正则表达式 BeautifulSoup lxml 查找文本
- flutter - 您如何通过特定值找到某个地图条目?
- android - 如何优化滞后的 JetPack Compose 布局