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
}
: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
}