当前位置: 首页 > 知识库问答 >
问题:

不一致js:如何确保机器人不会从列表中选择两个相同的单词

燕飞文
2023-03-14

所以我在discord.js做了一个猜谜游戏,机器人从列表中随机选择4个单词,把它们放在聊天中,你必须用同样的单词回复。以下是我试图做的一个缩写和简单的版本:

const profileModel = require("../models/profileSchema");
module.exports = {
    name: "guess",
    description: "guessing game",
    async execute(client, message, args, Discord, profileData) {
        let words = [
            "red",
             "orange",
             "yellow",
             "green",
             "blue",
             "purple",
             "pink",
             "black",
             "white"
         ]
         let firstWord = words[Math.floor(Math.random() * words.length)];
         let secondWord = words[Math.floor(Math.random() * words.length)];
         let thirdWord = words[Math.floor(Math.random() * words.length)]; 
         let fourthWord = words[Math.floor(Math.random() * words.length)];

         message.reply(`Type the following words into chat: \`${firstWord}\` \`${secondWord}\` \`${thirdWord}\` \`${fourthWord}\``)
           .then((msg) => {
               setTimeout(function() {
                   msg.edit('Type the words into chat!');
               }, 5000)});  
               message.channel.awaitMessages(m => m.author.id == message.author.id, { max: 1, time: 10000 }).then(collected => {
                   if (collected.first().content.toLowerCase() == `${firstWord} ${secondWord} ${thirdWord} ${fourthWord}`) {
                       message.reply('Correct!');
                   } else
                       message.reply('Incorrect');
               }).catch(() => {
                   message.reply('No answer after 10 seconds, time out.');
               });
           });
    }
}

我怎么才能让机器人不会两次选择同一个单词?例如,使它不能说“蓝色蓝色绿色橙色”之类的话。谢谢!

共有1个答案

孙子民
2023-03-14

通过一种非常简单的方式,您可以执行以下操作:

  1. 指定单词后,使用splice()函数将元素从数组中剪断:
index = words.indexOf(firstWord);
words.splice(index, 1);
let firstWord = words[Math.floor(Math.random() * words.length)];
index = words.indexOf(firstWord);
words.splice(index, 1);
let secondWord = words[Math.floor(Math.random() * words.length)];
index = words.indexOf(secondWord);
words.splice(index, 1);
let thirdWord = words[Math.floor(Math.random() * words.length)];
index = words.indexOf(thirdWord);
words.splice(index, 1);
let fourthWord = words[Math.floor(Math.random() * words.length)];
index = words.indexOf(fourthWord);
words.splice(index, 1);

最后,bot将从words[]数组中删除该元素,直到调用该命令为止。

参考文献:

  • splice()函数
 类似资料:
  • 问题内容: 我的SQL Server数据库中有两个表。第一个是,第二个是。两个表中都有一列。 现在,我想从两个表中选择一个特定的值。 这就是我在做的 但是我的查询给出了错误。 问题答案:

  • 问题内容: 有这张桌子 和这个 我如何从表“项目”中选择所有行并显示字段“已删除”,即使在给定用户ID的情况下,即使“ MyList”中不存在itemID? 查询结果示例: 什么是查询,以便我可以得到该结果? 谢谢 问题答案: 我不确定这是否是最好的方法,但它会返回我一直在寻找的内容:

  • 问题内容: 上面的代码创建一个带有两个列表框的窗口。但是,如果要从这两个值中检索值,就会出现问题,因为一旦在一个值中选择一个值,它就会取消选择在另一个值中选择的值。 这仅仅是开发人员必须忍受的限制吗? 问题答案: 简短答案:将所有列表框小部件的属性值设置为False或零。 从列表框小部件的pythonware概述中: 默认情况下,选择被导出到X选择机制。如果您在屏幕上有多个列表框,这确实会使可怜的

  • 问题内容: 如何获得一个函数,该函数返回一个随机的英语单词(最好是一个名词),而无需事先在文件中保留所有可能单词的列表,这将是最好的方法? 问题答案: 单词列表不需要占用太多的空间。 这是一个JSON单词列表,包含超过5000个单词,所有名词。它的时钟频率在50K以下,即中等大小jpeg图像的大小。 我将选择一个随机的练习作为读者的练习。

  • 这就是我的问题所在(在MS SQL SMS 2008 R2): 我有两个表: table1和列id1 name1 table2和列id2 name2 我还有第三个临时表,这些表是由导入的xls创建的,列为name1,name2 我希望使用select,这将导致类似于临时表的副本,但使用id1,id2而不是name1,name2。 这可能吗?

  • 问题内容: 我在表Hyperlink中有两列,即源和目标,用于存储超链接的源和目标。 有两个涉及b和c的超链接。两个超链接之间的区别在于超链接的方向。但是,我的目标是无论任何方向都检索唯一的超链接。因此,对于从b到c和从c到b的超链接,我只想选择其中之一。任何人都会做。 因此,我的结果应如下所示: 到目前为止,我可以使用Java进行一些处理,然后再使用JDBC执行SQL语句。但是,当表很大时,这将