【发布时间】:2021-01-30 08:42:46
【问题描述】:
我是学习前端和 Javascript 的新手,我正在设计一款游戏“学习初学者”以实现这一目标。
我的目的是:
- 1st - 将字母随机放入游戏板中。
- 2nd - 用户选择第一个(例如 A)。 代码分配了 firstSelectedLetter 类
- 3rd - 用户选择来的那个 在第一个选择之后(B,在这种情况下)代码分配 secondSelectedLetter 类
- 4rd - 代码比较两个字母 选中并且如果第二个出现在第一个选中的字母之后 它分配更正的类。
现在,我已经完成了所有这些步骤。但是当我继续播放并选择字母 C(或任何其他字母)时,代码不会在第 2 步和第 3 步之间拆分,它会将两个类(firstSelectedLetter 和 secondSelectedLetter)分配给单击的字母。它比较了同一个字母,当然它是错误的,游戏结束。
第一次发现字母A有1,字母B有2,比较后说我是对的,因为2=1+1。
Buuut,当我继续玩并选择字母 C 时,它只会分配两个类,比较相同的后者和 booom。
我尝试了很多组合,以及大量的变通方法。但我很确定我错过了一些我还没有学到的东西。我希望你们可以教给我并帮助其他人:)
这是供您参考的小提琴:https://jsfiddle.net/alejandroarag/qb91kean/
// First I create the array with the abecedary letters
var abecedary = ["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"];
// Second, I use this function to shuffle the letters randomly
function shuffleAbecedary() {
var result;
result = abecedary.sort(function () {
return 0.5 - Math.random();
});
return result;
}
//From this function i got on the internet i get the position on the letters on the alphabet (like 1st, 2nd...)
function alphabetPosition(text) {
var result = "";
for (var i = 0; i < text.length; i++) {
var code = text.toUpperCase().charCodeAt(i)
if (code > 64 && code < 91) result += (code - 64) + " ";
}
return result.slice(0, result.length - 1);
}
// This function prints the letter in a DIV with a class and a dataset value that I will use later on
function lettersPrint() {
var gameBoard = document.querySelector("#gameboard");
var shuffledLetters = shuffleAbecedary();
gameBoard.innerHTML = "";
shuffledLetters.forEach(function (element) {
var letter = document.createElement("div");
letter.innerHTML = "<div class='letter' data-valor= " + element + ">" +
"<div class='letter_content'>" +
element +
"</div>" +
"</div>";
//I put all of them inside the gameBoard ID
gameBoard.appendChild(letter);
});
}
function firstToSelect() {
var firstSelected = document.querySelectorAll(".firstLetterSelected:not(.correct)");
if (firstSelected.length > 0) {
return
}
this.classList.add("selected");
this.classList.add("firstLetterSelected");
document.querySelectorAll(".letter:not(.selected)").forEach(function (element) {
element.addEventListener("click", secondToSelect);
});
}
function secondToSelect() {
var firstSelected = document.querySelectorAll(".firstLetterSelected:not(.correct)");
var secondSelected = document.querySelectorAll(".secondLetterSelected:not(.correct)");
if (secondSelected.length > 0) {
return
}
this.classList.add("selected");
this.classList.add("secondLetterSelected");
var lettersToCompare = firstSelected + secondSelected;
compare(lettersToCompare);
}
function compare(lettersToCompare) {
var firstLetter = document.querySelectorAll(".firstLetterSelected:not(.correct)");
var secondLetter = document.querySelectorAll(".secondLetterSelected:not(.correct)");
var firstLetterToCompare = alphabetPosition(firstLetter[0].dataset.valor);
var secondLetterToCompare = alphabetPosition(secondLetter[0].dataset.valor);
var lettersToCompare = firstLetterToCompare + "," + secondLetterToCompare;
var theLetters = document.querySelectorAll(".selected:not(.correct)")
var letsCompare = lettersToCompare.split(",");
console.log(letsCompare[0]);
console.log(letsCompare[1]);
if (letsCompare[0] == letsCompare[1] - 1) {
console.log("You are right!");
correct(theLetters);
} else {
console.log("Opps you are not right!");
error(theLetters);
}
}
function correct(theLetters) {
theLetters.forEach(function (element) {
element.classList.add("correct");
});
}
function error(theLetters) {
// theLetters.forEach(function (element) {
// element.classList.add("error");
//
// setTimeout(
// function () {
// theLetters.forEach(function (element) {
// element.classList.remove("selected");
// element.classList.remove("error");
// });
// }, 1000);
// });
}
lettersPrint();
document.querySelectorAll(".letter").forEach(function (element) {
element.addEventListener("click", firstToSelect);
});
【问题讨论】:
-
您的 cmets(在代码中)往往会在某一点之后不再冗长。因此,遵循您的逻辑可能有点困难。我建议插入更多代码 cmets,并且如果可能的话,在代码 cmets 中解释您的心理逻辑,以获得有关此问题的帮助。它也会帮助你
标签: javascript function loops