我使用JavaScript制作了一个Hangman游戏。它工作得很好,但我发现每次点击“新词”时都会发现。开始一个新游戏,它是完全随机的(这是好的),但它没有考虑新单词是否已经发生/已经被播放。所以你从以前的单词中得到了很多重复。
我已经制作了大约50个单词/答案。我只是想要这样每次点击“新词”时,它会随机生成一个新词(来自我的选择),并且不会再次复制相同的词,除非所有其他词选项/单词已经播放。
由于某种原因,这个文本框并没有将我的所有代码放入一个块中,所以为了使事情更容易阅读,这是我在Github中的代码的链接。我已经附上了所有文件,但我非常确定您只需要查看我的JavaScript代码:
HTML:
https://raw.githubusercontent.com/kaw31/hangman/master/hangman.html
CSS :(我已经注释掉了之前版本的一些代码,所以只是忽略它);
https://raw.githubusercontent.com/kaw31/hangman/master/css/style.css
JavaScript的:
https://raw.githubusercontent.com/kaw31/hangman/master/js/script.js
非常感谢任何帮助。
答案 0 :(得分:0)
您的代码中存在一些逻辑错误:
每次运行play
函数时都会设置类别列表 - 对于每个游戏都是相同的(这就是为什么它可以检索以前游戏中检索到的单词),而它应该为给定的浏览器刷新设置一次。因此,您应该将categories
移到顶部(var categories = [list of your categories]
),以使其持久。
从您的单词列表中检索到后,您不会删除所选单词 - 这就是为什么即使使用上述修复程序仍然可以再次检索它的原因。要做到这一点,首先应该获得类别和单词的索引,然后将其删除:
var category_index = Math.floor(Math.random() * categories.length);
var word_index = Math.floor(Math.random() * categories[category_index].length;
categories[category_index] = categories[category_index].splice(word_index, 1);
当然,此时,您还必须删除提示并满足单词列表为空时的情况(两者都是 - 对于每个类别,并且都是空的)
就个人而言,我会更改你的单词的存储方式,而不是使用多个数组,使用对象:
var categories = [{
title: "Sport Teams",
words: [{
word: "ARSENAL",
hint: "Thierry Henry",
}, ...
]}, ...
]
因此,在检索单词时,您正在检索有关它的所有信息 - 此时单词列表变得更易于管理,操作变得更容易。