简单 JS 游戏中的负分问题
Issue with negative scores in a simple JS game
我创建了一个简单的 JS 游戏,它要求玩家将两个随机数相加,并给他们三个选项 select -- 一个答案正确,另外两个不正确.玩家只有 10 秒的时间来回答每个问题。当玩家 select 给出正确答案时,他们的分数会增加 +1,一切都会按预期进行。
...直到我尝试在他们答错问题时(通过 select 给出 2 倍错误答案中的任何一个)将他们的分数添加到 -1。当数字为正时,一切都按预期进行,但是如果他们变成负数,那么奇怪的事情就会开始发生,我不知道为什么:分数减少超过 1,即使玩家得到正确的答案,分数仍然减少。
作为一种解决方法,我尝试添加一个条件,如果分数低于 0,它将重置为 0,因此它不能变为负数——但是如果我这样做,分数将不会超过 1,不不管玩家答对了多少。
游戏和代码在这里:https://codepen.io/tmnsoon/full/XWVWvmb
let score = 0
function startCountdown(seconds) {
let counter = seconds;
const interval = setInterval(() => {
document.getElementById("timer").innerHTML = counter;
counter--;
if (counter < 0 ) {
clearInterval(interval);
game()
startCountdown(10)
}
}, 1000);
}
function game(){
let answer1 = Math.floor(Math.random()*500)
let answer2 = Math.floor(Math.random()*500)
document.getElementById("challenge").innerHTML = `What is ${answer1} plus ${answer2}`
console.log('Ding!');
let number1 = Math.floor(Math.random()*1000)
let number2 = answer1+answer2
let number3 = Math.floor(Math.random()*1000)
let gameNums = [number1, number2,number3]
shuffle(gameNums)
console.log(gameNums)
document.getElementById("button1").innerHTML = gameNums[0]
document.getElementById("button2").innerHTML = gameNums[1]
document.getElementById("button3").innerHTML = gameNums[2]
function handleClick(event) {
if (event.target.tagName !== "BUTTON") {
return;
}
let buttonValue = event.target.innerText;
if (buttonValue == answer1+answer2){
document
.querySelector("#result")
.innerText = "Correct!";
score++
document.getElementById("score").innerHTML = `Score = ${score}`
game()
}
else if (buttonValue == number1 || number3){
document
.querySelector("#result")
.innerText = "Incorrect!";
score--
document.getElementById("score").innerHTML = `Score = ${score}`
}
}
//listner
document
.querySelector(".buttons")
.addEventListener("click", handleClick);
//end
}
function shuffle(array) {
let currentIndex = array.length, randomIndex;
// While there remain elements to shuffle...
while (currentIndex != 0) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
// And swap it with the current element.
[array[currentIndex], array[randomIndex]] = [
array[randomIndex], array[currentIndex]];
}
return array;
}
如果有人能指出我做错了什么,将不胜感激。谢谢!
问题出在你的else if
降低分数的条件:else if (buttonValue == number1 || number3)
。
你告诉编译器如果前面的 if 条件不为真且(如果 buttonValue == number1 OR if number3 为 truthy[=26 则它应该进入该块=]).
您可能想写 else if (buttonValue == number1 || buttonValue == number3)
。
一些额外的建议:您根本不需要 else 语句中的条件,buttonValue 不是正确答案就足够了,没有必要检查它是哪个错误答案。
你可以 else {
.
我创建了一个简单的 JS 游戏,它要求玩家将两个随机数相加,并给他们三个选项 select -- 一个答案正确,另外两个不正确.玩家只有 10 秒的时间来回答每个问题。当玩家 select 给出正确答案时,他们的分数会增加 +1,一切都会按预期进行。
...直到我尝试在他们答错问题时(通过 select 给出 2 倍错误答案中的任何一个)将他们的分数添加到 -1。当数字为正时,一切都按预期进行,但是如果他们变成负数,那么奇怪的事情就会开始发生,我不知道为什么:分数减少超过 1,即使玩家得到正确的答案,分数仍然减少。
作为一种解决方法,我尝试添加一个条件,如果分数低于 0,它将重置为 0,因此它不能变为负数——但是如果我这样做,分数将不会超过 1,不不管玩家答对了多少。
游戏和代码在这里:https://codepen.io/tmnsoon/full/XWVWvmb
let score = 0
function startCountdown(seconds) {
let counter = seconds;
const interval = setInterval(() => {
document.getElementById("timer").innerHTML = counter;
counter--;
if (counter < 0 ) {
clearInterval(interval);
game()
startCountdown(10)
}
}, 1000);
}
function game(){
let answer1 = Math.floor(Math.random()*500)
let answer2 = Math.floor(Math.random()*500)
document.getElementById("challenge").innerHTML = `What is ${answer1} plus ${answer2}`
console.log('Ding!');
let number1 = Math.floor(Math.random()*1000)
let number2 = answer1+answer2
let number3 = Math.floor(Math.random()*1000)
let gameNums = [number1, number2,number3]
shuffle(gameNums)
console.log(gameNums)
document.getElementById("button1").innerHTML = gameNums[0]
document.getElementById("button2").innerHTML = gameNums[1]
document.getElementById("button3").innerHTML = gameNums[2]
function handleClick(event) {
if (event.target.tagName !== "BUTTON") {
return;
}
let buttonValue = event.target.innerText;
if (buttonValue == answer1+answer2){
document
.querySelector("#result")
.innerText = "Correct!";
score++
document.getElementById("score").innerHTML = `Score = ${score}`
game()
}
else if (buttonValue == number1 || number3){
document
.querySelector("#result")
.innerText = "Incorrect!";
score--
document.getElementById("score").innerHTML = `Score = ${score}`
}
}
//listner
document
.querySelector(".buttons")
.addEventListener("click", handleClick);
//end
}
function shuffle(array) {
let currentIndex = array.length, randomIndex;
// While there remain elements to shuffle...
while (currentIndex != 0) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
// And swap it with the current element.
[array[currentIndex], array[randomIndex]] = [
array[randomIndex], array[currentIndex]];
}
return array;
}
如果有人能指出我做错了什么,将不胜感激。谢谢!
问题出在你的else if
降低分数的条件:else if (buttonValue == number1 || number3)
。
你告诉编译器如果前面的 if 条件不为真且(如果 buttonValue == number1 OR if number3 为 truthy[=26 则它应该进入该块=]).
您可能想写 else if (buttonValue == number1 || buttonValue == number3)
。
一些额外的建议:您根本不需要 else 语句中的条件,buttonValue 不是正确答案就足够了,没有必要检查它是哪个错误答案。
你可以 else {
.