随机使用JavaScript在Hangman游戏中没有重复的单词

时间:2017-11-07 22:33:25

标签: javascript

我使用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

非常感谢任何帮助。

1 个答案:

答案 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",
        }, ...
    ]}, ...
]

因此,在检索单词时,您正在检索有关它的所有信息 - 此时单词列表变得更易于管理,操作变得更容易。