2017-02-16 17 views
-2

Пожалуйста, несите меня: я только когда-либо брал один 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 без ввода на вражескую очередь, учитывая, что у нее нет возможности использовать блок?

ответ

0

Это очень много информации, чтобы попросить кого-то прочитать и понять. Возможно, вы можете задать вопрос в терминах программирования вместо полного объяснения игры?

В любом случае, возможно ли, что это вызвано отсутствующими скобками в if в case 2? Код коммутатора всегда будет выполняться, хотя он имеет отступы.

 Смежные вопросы

  • Нет связанных вопросов^_^