实现小概率函数?

Implement small % chance function?

我已经为我的 discord 机器人 (v13) 创建了一个命令,它的工作方式如下:

user 1 pings user 2
bot checks db to see if user 1's reputation is higher than user 2
if higher or equal to, user 1 wins and user 2 receives health decrease
if lower, user 1 loses and receives health decrease.

但是,我想补充一点,即使用户 1 的最大值少了 50 分,他们仍然有(小,25%)获胜的机会。因此,如果用户 1 有 70,用户 2 有 100,用户 2 仍然可能被击败。我不确定具体该怎么做,如有任何帮助,我们将不胜感激。

const profileModel = require("../models/profileSchema");
module.exports = {
  name: "challenge",
  description: "challenge a user",
  async execute(client, message, args, cmd, discord, profileData) {
    if (!args.length) return message.channel.send("You need to mention the user you are trying to challenge.");
    const randomNumber1 = Math.floor(Math.random() * 15) + 1;
    const randomNumber2 = Math.floor(Math.random() * 15) + 1;
    const target = message.mentions.users.first();
    const user = message.author || message.author;

    if (!target) return message.channel.send("This user does not exist.");

    try {
    const targetData = await profileModel.findOne({ userID: target.id });
    const userData = await profileModel.findOne({ userID: user.id });

    if (userData.reputation >= targetData.reputation){
        await profileModel.findOneAndUpdate(
            {
              userID: target.id,
            },
            {
              $inc: {
                health: -randomNumber1,
              },
            }
          );
        return message.channel.send(`You were victorious! ${target} took ${randomNumber2} damage!`);
    } else {
        await profileModel.findOneAndUpdate(
            {
              userID: user.id,
            },
            {
              $inc: {
                health: -randomNumber1,
              },
            }
          );
        return message.channel.send(`You were defeated! ${user} took ${randomNumber2} damage!`);
    }
  } catch (err) {
      console.log(err);
  }
  }
};
    let profileData;
    try {
        profileData = await profileModel.findOne({ userID: message.author.id });
        if(!profileData){
            let profile = await profileModel.create({
                name: message.author.id,
                userID: message.author.id, 
                serverID: message.guild.id, 
                reputation: 0,
                health: 100,
            });
            profile.save();
        }
    } catch (err) {
      console.log(err);
    }

使用Math.random()是一种方法。你可以这样做:

// User 1 has challenged user 2
if(user1.reputation < user2.reputation) {
  // user1 presumably loses, but...
  if(Math.floor(Math.random() * 4) === 0) {
    // Here, we generate a random number, either 0, 1, 2, or 3. If 0 is picked (25% chance)...
    // User 1 is lucky!
    // User 1 still wins because of chance
  } else {
    // Oops, bad choice user1, you just lost. Luck didn't like you either
  }
} else {
  // User 1's reputation is higher
}

关于 Math.random() 的更多文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random