Пожалуйста, несите меня: я только когда-либо брал один Java-класс, мои идеи слишком велики для моего уровня знаний, но я все равно пытаюсь их реализовать. Поэтому мое понимание Java надуманно, мой код запутан.Java: ошибка в do while loop
int int in my java do-while цикл возвращается как 0, затем после нескольких циклов цикла он появляется снова как 10, когда на него не должно было воздействовать, и это не должно быть возможным для него идти до 10.
Ниже приводится выход из текста программы игры
1. Attack 2. Block 3. Dodge 4. Escape & Evade 2 Block: 0 Damage: 4 KEELBREAKER Physical readiness: 44/50 (FNG) 1. Attack 2. Block 3. Dodge 4. Escape & Evade 1 Attack: 6 - Block: 10 = Damage -4 MUGGER Physical readiness: 54/50 (FNG) Damage: 5 KEELBREAKER Physical readiness: 25/50 (FNG) 1. Attack 2. Block 3. Dodge 4. Escape & Evade
См жирным шрифтом. В первом цикле выбирается 2 «блок», игра вычисляет значение нуля, никакого эффекта. Шесть циклов позже (удаленный) вариант 1 выбрана «атака». Игра вычисляет значение блока 10, применяет отрицательный урон «исцеляя» объект противника на 4 пункта выше его максимального здоровья.
Очевидно, что здесь много чего не так. Но моя непосредственная забота - это функция блока. Учитывая входные данные от игроков и объектов противника, не может быть до десяти. Кроме того, каждый раз, когда игрок выбирает блок, он возвращает значение 0. Кроме того, я не реализовал функцию блока для поворота вражеского объекта, чтобы враг не мог блокировать. Таким образом, моя инициация функции блока возвратила 0, ничего не делая, тогда значение каким-то образом переработало через цикл 6 раз ничего не делая и не отображалось каждый раз. Затем волшебным образом превратился в 10 без причины, в очередь вражеского объекта, где он даже не должен существовать. Я очень смущен. Это уже очень долго, поэтому я сожалею об этом, но теперь я приложу код. Код ... беспорядок. Я постараюсь изо всех сил почистить его как можно больше.
public class Combat {
public static void indivCombat(Player playerObject, Enemy enemyObject)
{
boolean inCombat = true;
int combatChoice = 0;
int compResponse = 0;
int damage = 0;
int defense = 0;
double evadeChance = 0;
int exp = 0;
int loot = 0;
int sum = 0;
Scanner keyboard = new Scanner(System.in);
Random randNum = new Random();
System.out.println(enemyObject.getType() + " is engaging!");
//do while inCombat is true
do
{
System.out.println("1. Attack\n2. Block\n3. Dodge\n4. Escape & Evade");
combatChoice = keyboard.nextInt();
//player's turn
switch(combatChoice)
{
case 1:
compResponse = (randNum.nextInt(151)+50)/100;
if (compResponse < evadeChance)
{
System.out.println(enemyObject.getType() + " evaded attack!");
damage=0;
}
else
{
damage = playerObject.getAttack() - enemyObject.getDefense() + randNum.nextInt(playerObject.getAttack() + 1);
if (damage<0)
damage = 0;
enemyObject.setHealth(enemyObject.getHealth() - damage + defense);
if (defense != 0)
{
sum = damage - defense;
System.out.println("Attack: "+damage + " - Block: " + defense + " = Damage " + sum);
}
else
{
System.out.println("Damage: "+damage);
}
enemyObject.displayEnemyHealth();
}
evadeChance = 0;
defense = 0;
break;
case 2:
defense = playerObject.getDefense() - enemyObject.getAttack();
if (defense > 0)
defense = randNum.nextInt(playerObject.getDefense())*9/10;
else if (defense == 0)
compResponse = randNum.nextInt(1);
switch (compResponse)
{
case 0: defense = 0;
case 1: defense = playerObject.getDefense()*5/10;
}
defense = randNum.nextInt(playerObject.getDefense())*1/10;
System.out.println("Block: " + defense);
break;
Функция блока содержится в случае 2 внизу. Я включил все с самого начала в случае, если что-то из того, что происходит сверху. Я отказался от всего ниже, потому что это ... слишком долго.
Теперь в этом случае playerObject.getDefense() равен 4, а enemyObject.getAttack() равен 5. Независимо от того, как это вычисляется до 10. То, что я действительно не понимаю, - это то, как это вычисляется по умолчанию как 0, а затем перерабатывается через цикл 6 раз, даже если он должен завершиться после следующей атаки противника. Затем стало 10 без ввода на вражескую очередь, учитывая, что у нее нет возможности использовать блок?