javascript - Hangman Game Javascript:如果猜到单词中的最后一个字符,则单词完成
问题描述
我正在为课堂作业编写一个刽子手游戏。该wordcheck()
函数将单词字符的索引与空格的索引进行比较,但没有正常工作。如果用户猜到单词中间的一个字母,该字母将按应有的方式填充 _ 空间。但是,如果用户猜到单词的最后一个字母,即使前面的空格不匹配,它也会自动进入获胜屏幕并显示完整的单词。我很肯定问题出在这个功能上。我相信这是因为无论字符列表有多长(或单词有多长),循环都会运行,并且如果最后一个值返回等于空格列表中的最后一个值,即使之前的值返回,它也会返回为真作为不平等。尽管如此,即使这是问题所在,我也不知道如何解决它。
谢谢!
function wordCheck() {
var wordComplete = false;
for (var i = 0; i < letters.length; i++) {
if (letters[i] !== blanks[i]) {
wordComplete = false;
}
else {
wordComplete = true;
}
}
if (wordCompleted == true) {
gameWon();
}
}
解决方案
问题是,只有在 true 的条件存在时才需要设置 true 的值(在这种情况下,您只知道在评估了所有字符和空格之后的事实)。在您的代码中,每次评估字符/空格匹配时都设置为 true 或 false(这意味着您可以取消设置您正在寻找的结果)。这个小小的逻辑陷阱一直都在吸引程序员。
可以这样想:我可以问你的名字五次,我只需要猜对一次就能赢,但我总是要猜五次(之后你会告诉我我的猜测是否正确)。如果您每次都评估我的答案,而最后一个答案是错误的,那么我是否正确都无关紧要。只有最后的猜测是正确的,它才会起作用。因此,一旦我猜对了,您要么停止评估答案,要么等待所有五个猜测,然后确定我是否赢/输。
在您的情况下,您需要在确定输赢之前做出所有“猜测”。因此,您只需跟踪它们,然后做出输赢决定。
所以你会做这样的事情:
function wordCheck(){
// track the matches
var matches = 0;
for ( var i = 0; i < spaces.length; i++ ) {
// If there's a match, increment matches. Else, leave it alone.
matches = ( characters [ i ] === spaces [ i ] ? matches + 1 : matches );
}
// Now that you have evaluated ALL matches, you can make the decision.
// If matches === your spaces length, all matches were found, return true, else false
return ( matches === spaces.length );
}
推荐阅读
- typescript - 如何在打字稿上制作多种类型的属性接口
- python - 用重复约束优化
- laravel - 如何在 laravel nova 中隐藏镜头的动作?
- php - 当前 URL 和 if 语句
- python-3.x - AttributeError:“地图”对象没有属性“标记”
- javascript - grid.ajaxRequest() 不传递参数
- sql-server - SSRS订阅父子报表
- api - Jersey ValidationException 消息并不总是相同
- sql-server - sql 使用 sql dynamique 脚本将图片插入到带有参数路径的存储过程中的表中
- python - 我正在提交一个包含两个文件并执行 ajax 发布请求的表单。但我无法在我的 django 视图中获取文件