【发布时间】:2017-08-11 20:32:01
【问题描述】:
//in a method that checks players equipment to change damage and armor values
//none of these min/max values should spit out anything less than 0
switch(weapon)
{
case"Knife": minDamage = 3; maxDamage = 12; break;
case"Short Sword": minDamage = 6; maxDamage = 15; break;
case"Long Sword": minDamage = 8; maxDamage = 20; break;
case"Battle Axe": minDamage = 14; maxDamage = 28; break;
case"Death's Blade": minDamage = 20;maxDamage = 60; break;
}
//armor
switch(armor)
{
case"Rags": playerArmor = 0; break;
case"Hide Armor": playerArmor = 5; break;
case"Leather Armor": playerArmor = 8; break;
case"Chainmail": playerArmor = 12; break;
case"Platemail": playerArmor = 20; break;
case"Death's Armor": playerArmor = 50; break;
}
//in a method that handles the combat
//The problem is somewhere in the logic for the damageDealt integer.
int damageDealt = rand.nextInt(maxDamage - minDamage + 1)+minDamage;
int damageTaken = rand.nextInt(enemyDamage - playerArmor);
if(damageDealt >= 0)
{
enemyHealth -=damageDealt;
}
else
{
damageDealt = 0;
}
if(damageTaken>0)
{
playerHealth -=damageTaken;
}
else
{
damageTaken = 0;
}
所以这只是我正在完成的文本冒险中的几行代码。有时我会得到这个错误,弹出说 IllegalArgumentException: Bound must be positive for java's random() method during the battle.
第一段代码是处理玩家物品栏的方法的一部分。请注意,武器的每个最大值都大于相应的最小值,因为它们应该是。第二段代码是战斗方法的一部分。当玩家选择攻击时,这些线就会运行。就我所知,damageDealt 整数似乎是个问题。
我很确定
int damageDealt = rand.nextInt(maxDamage - minDamage + 1)+minDamage;
应该起作用,并且永远不要给出低于 minDamage 值的整数值,甚至为零。但是,出于某种原因,有时它确实如此,并且游戏吓坏了并给出了错误代码。
如果我只使用 maxDamage,则不会出现此问题,但这不是最佳选择,因为超高功率武器的伤害与起始武器一样少。
如果你们能找到一种解决方案来修复我的代码,或者甚至是一种完全不同的方式来处理随机选择整数范围内的数字,我将不胜感激。
【问题讨论】:
-
您确定错误来自
rand.nextInt(maxDamage - minDamage + 1),而不是来自rand.nextInt(enemyDamage - playerArmor)? -
在您的问题中发布堆栈跟踪。没有就无法回答。