JavaScript猜狗游戏if语句逻辑修复技术求助
修复猜狗游戏的JavaScript逻辑问题
修复后的完整代码
var allDogs = getColumn("Dogs", "Name"); var allDogsPicturesList = getColumn("Dogs", "Image"); var questionNumber = 0; // 初始化题目计数 var correctDog; var userChoice; var score = 0; // 初始化分数 setScreen("startScreen"); // 开始按钮点击事件 onEvent("readyButton", "click", function() { setScreen("quizScreen"); generateNewQuestion(); // 单独拆分生成题目的函数,逻辑更清晰 }); // 图片点击事件:每个按钮对应自己的图片URL onEvent("dog1", "click", function() { checkAnswer(getImageURL("dog1")); }); onEvent("dog2", "click", function() { checkAnswer(getImageURL("dog2")); }); onEvent("dog3", "click", function() { checkAnswer(getImageURL("dog3")); }); onEvent("dog4", "click", function() { checkAnswer(getImageURL("dog4")); }); // 生成新题目函数 function generateNewQuestion() { // 随机选一个正确的狗的索引 var correctDogIndex = randomNumber(0, allDogs.length - 1); correctDog = allDogsPicturesList[correctDogIndex]; // 设置问题文本 setText("dogBeingGuessed", "Which dog is a \n" + allDogs[correctDogIndex]); // 随机选一个位置放正确图片 var correctPosition = randomNumber(1, 4); setProperty("dog" + correctPosition, "image", correctDog); // 给其他三个位置设置不重复的错误图片 for (var i = 1; i <= 4; i++) { if (i !== correctPosition) { var wrongImage; // 确保错误图片不等于正确图片 do { var wrongIndex = randomNumber(0, allDogsPicturesList.length - 1); wrongImage = allDogsPicturesList[wrongIndex]; } while (wrongImage === correctDog); setProperty("dog" + i, "image", wrongImage); } } } // 检查答案并处理得分、生成新题目 function checkAnswer(selectedImage) { // 判断是否答对 if (selectedImage === correctDog) { score++; } else { score--; } questionNumber++; // 达到10题切换结束界面 if (questionNumber === 10) { setScreen("screen1"); // 可添加显示最终分数的逻辑,比如 setText("scoreText", "Final Score: " + score); } else { // 生成下一题 generateNewQuestion(); } }
核心修复点
- 点击事件修正:原代码所有图片点击后都错误取
dog1的URL,现在每个按钮对应自身的图片URL,确保用户选择的是点击的目标图片 - 变量初始化:给
questionNumber和score设置初始值0,避免出现NaN的计算错误 - 函数职责拆分:把生成题目和检查答案拆成两个独立函数,避免原函数逻辑混乱
- 条件逻辑修正:
- 移除原代码中把字符串
"dog1"和狗名、索引错误对比的逻辑,改为随机分配正确图片的位置 - 正确答案判断改为对比用户选择的图片URL和正确图片URL,逻辑准确
- 移除原代码中把字符串
- 错误图片去重:添加
do-while循环,确保错误图片不会和正确图片重复 - 无效循环移除:删掉原函数中重复执行11次的
for循环,符合每次点击生成一题的需求 - 流程逻辑理顺:首次进入游戏只生成题目,用户点击后再检查得分、计数,之后生成下一题或切换结束界面
内容的提问来源于stack exchange,提问作者Walker
相关产品推荐
相关产品推荐

