我真的是java世界的新手,我现在正在学习,IFs/FORs/WHILEs等等。为了保持对这个主题的兴趣,我让我的书呆子那一面自由了:)
我想模拟1000场战斗,一个英雄和一个地精之间的战斗。两者都有他们的属性和d20投掷来决定他们是否击中((d20+bonus)>敌人护甲)。如果他们击中,他们处理相关的dmg,并不断交换爆炸,直到两人中的一人死亡。每次地精的HPs降到0以下时,英雄的得分为“胜利”,相反的情况下,英雄的得分为“失败”。
当循环重复1000次时,模拟中断,显示英雄有多少胜利和失败。
这是我失败的code.It继续无限计算胜利的数量,没有重置小精灵和英雄的生命,也没有计算失败的数量。有人能用简单的结构来帮助我理解哪里出了问题吗?
import java.util.Random;
public class Random2 {
public static void main(String[] args) {
Random rand = new Random();
int wins = 0, defeats = 0;
int hpHero = 20, armorHero = 8, dmgHero = 4, bonusHero = 1;
int hpGoblin = 10, armorGoblin = 5, dmgGoblin = 3, bonusGoblin = 1;
for (int played = 0; played <= 1000; played++) {
while (hpHero > 0 || hpGoblin > 0) {
int d20Hero = rand.nextInt(19);
d20Hero += 1;
if ((bonusHero + d20Hero) > armorGoblin) {
System.out.println("You hit the goblin with a die result of " + (bonusHero + d20Hero));
hpGoblin -= dmgHero;
System.out.println("HP Goblin: " + hpGoblin);
if (hpGoblin > 0) {
int d20Goblin = rand.nextInt(19);
d20Goblin += 1;
if ((bonusGoblin + d20Goblin) > armorHero) {
System.out.println("Goblin hit the human with a die result of " + (bonusGoblin + d20Goblin));
hpHero -= dmgGoblin;
System.out.println("HP Hero: " + hpHero);
if (hpHero < 1) {
defeats++;
System.out.println("Defeats are: " + defeats);
}
}
} else {
wins++;
System.out.println("Wins are: " + wins);
}
}
}
}
}
}发布于 2019-03-14 17:20:59
有一件事我可以相对肯定地说,您的程序似乎缺少一种在每次战斗之间恢复hpHero和hpGoblin的机制。您可以按如下方式执行此操作。
for (int played = 0; played <= 1000; played++) {
hpHero = 20;
hpGoblin = 10;
while (hpHero > 0 || hpGoblin > 0) {然而,我认为可能还有更多的问题。
发布于 2019-03-14 17:30:49
我试着尽可能少地修改你的代码,但是我建议花点时间重新考虑一下,因为它有点太复杂了。
我注意到的两件事是
这是更新后的版本
public class Random2 {
public static void main(String[] args) {
Random rand = new Random();
int wins = 0, defeats = 0;
int armorHero = 8, dmgHero = 4, bonusHero = 1;
int armorGoblin = 5, dmgGoblin = 3, bonusGoblin = 1;
// fight 1000 times
for (int played = 0; played <= 1000; played++) {
// start with full stats after each fight
int hpHero = 20;
int hpGoblin = 10;
// while both combatants are still alive
while (hpHero > 0 || hpGoblin > 0) {
// hero rolls
int d20Hero = rand.nextInt(19);
d20Hero += 1;
// if hero can hit then do the dmg
if ((bonusHero + d20Hero) > armorGoblin) {
System.out.println("You hit the goblin with a die result of " + (bonusHero + d20Hero));
hpGoblin -= dmgHero;
System.out.println("HP Goblin: " + hpGoblin);
}
// if the goblin is still alive then it rolls
if (hpGoblin > 0) {
int d20Goblin = rand.nextInt(19);
d20Goblin += 1;
// if the goblin can hit then do the dmg
if ((bonusGoblin + d20Goblin) > armorHero) {
System.out.println("Goblin hit the human with a die result of " + (bonusGoblin + d20Goblin));
hpHero -= dmgGoblin;
System.out.println("HP Hero: " + hpHero);
// if hero died then count defeat
if (hpHero < 1) {
defeats++;
System.out.println("Defeats are: " + defeats);
}
}
} else { // if goblin did not survive then count a win for the hero
wins++;
System.out.println("Wins are: " + wins);
}
}
}
}
}https://stackoverflow.com/questions/55158513
复制相似问题