在Hangman游戏中使用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

非常感谢您的帮助。

您的代码中有几个逻辑错误:

  • 每次运行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",
}, ...
]}, ...
]

因此,当检索一个单词时,您就是在检索关于它的所有信息——这时单词列表变得更易于管理,操作也变得更容易了。

相关内容

最新更新