Math.Random,计算百分比

Math.Random, calculating Percentages

:D 我目前正在制作RPG,制作战斗系统,如果玩家攻击与敌人接触它会造成伤害,现在我想做的是在混合和格挡中加入爆击。

它应该如何运作?好吧,首先它会根据怪物的格挡几率来滚动怪物格挡的几率,如果它格挡了传入的伤害就会减少到零,如果没有它会根据玩家的暴击几率来滚动暴击几率,如果它是关键的将根据玩家的爆击倍数造成 x 的额外伤害。

现在我想知道的是如何计算百分比机会,我看过几个帖子,但他们通常将百分比转化为整数,而且我的玩家可能会从 1.7% 或 3.9 的低掷开始%,但不是 1-2-3-5,固定百分比。有人对如何制作有建议吗?

到目前为止代码是这样的:

public class Player{
private double criticalStrikeChance = 0.009; <--- thats 0.9% chance.
private double criticalStrikeMultiplier = 1.2; <--- thats 120% moar damage

public double getCritStrk(){
   return criticalStrikeChance;
                       }

}

public class Monster(){
private double blockingChance = 0.3; <--- thats 30%
private double blockingReduction = 0.75; <--- thats 75% reduced damage when blocking

}


public class Game(){

public void checkIfDamaged(){

if(intersects){

       // blockroll should be done here based on the monster chance

       if(blockRoll >= minimum he had to roll){
         //means its successfull
          monster.getHit(0); //PEANUT DAMAGE ACHIEVED GREAT SUCCESS 
          }else{

           //Critical strike chance should be rolled here based on player
           //chance
            if(critstrike successful){ 
               incdamage + (incdamage * player.criticalStrikeMultiplier;
                      monster.getHit(incdamage);
                                  }
          }else{//Crit didnt roll with cinnamon
                 monster.getHit(player.getDamage);
               }


       }

}

}

好的,这几乎是伪代码,因为我的代码看起来很不一样,但很简单,应该让你们知道它应该如何工作,所以请帮助我 senpais!我会给你巧克力饼干 + 一个 100% 格挡率的漂亮盾牌 :D 给任何阻止我的人!

如果您只是想滚动随机百分比,可以使用 java 中的 Random class。

    Random rand = new Random(); 
    Double pickedNumber = rand.nextDouble();

运行 将导致 pickedNumber 是介于 0 和 1 之间的某个 double。例如:

0.3650998187710377

然后检查该百分比是否小于您的 block/crit 机会。例如:

if(pickedNumber < blockChange)
    //doBlock();

一个完整的例子,测试用例可能是这样的:

private static Random rand = new Random(); 

public static void main(String[] args) {

    double blockChance = .5; // 50% chance to block the attack

    Double pickedNumber = rand.nextDouble(); // Roll to see if we block the attack

    System.out.println(pickedNumber); // output roll for debug purposes

    if(pickedNumber < blockChance){ // if the attack was blocked
        System.out.println("Blocked"); // do block logic
    }else{ // if the attack wasn't blocked
        System.out.println("Damaged"); // do damage logic
    }
}

这给了我输出:

0.2768592334674802
Blocked

并且:

0.8762124334674802
Damaged

另一种方法: 要获得 0.75:

if (Math.random() < 0.75) {
   //do this with probability 0.75
}