Присваиваем персонажам по 9 жизней, однако 1) порождается бесконечный цикл 2) количество жизней в тысячах у обоих. Как это? 3) если исправить в 38 строке ИЛИ на И => результат получается, компилируется и бесконечный цикл приобретает конечность, но 1) странненько, что так 2) если у нас ИЛИ , то ведь максимум через 9 операций (убивание Диабло) цикл while все равно должен завершиться, ведь жизни не прибавляются ...
*дело в методе battle () строка 30*
package com.javarush.task.pro.task06.task0622;
import java.util.Scanner;
public class Solution {
//(2)
public static int amigoLives = 9;
public static int diabloLives = 9;
public static void amigoLostLife() {
amigoLives--;
}
public static void diabloLostLife() {
diabloLives--;
diabloLives--;
diabloLives--;
}
public static int amigoAttacks() {
return getRandomNumber(3);
}
public static int diabloDefends() {
return getRandomNumber(3);
}
//(2)
//(3)
public static void battle(){
do {
if (amigoAttacks() != diabloDefends()){ //зона защиты Диабло не совпала с зоной атаки Амиго.
diabloLostLife(); //Диабло теряет "жизни"
System.out.println (amigoAttackPhrase);
}else { //зона защиты Диабло совпала с зоной атаки Амиго.
amigoLostLife(); // Диабло защитился, он сразу контратакует и Амиго теряет "жизнь".
System.out.println (diabloDefendPhrase);}}
while (amigoLives!=0 || diabloLives!=0);
}
//(3)
//(1)
public static String getFirstPositionPhrase = "Помоги Амиго определить, где спрятался Диабло? Введи номер позиции (1, 2, 3 или 4):";
public static String getPositionPhrase = "Диабло не обнаружен. Давай попробуем снова. Введи номер позиции (1, 2, 3 или 4):";
public static String findDiabloPhrase = "Амиго обнаружил Диабло.";
public static String diabloDefendPhrase = "Амиго атакует. Диабло отбил атаку Амиго и нанес ответный удар.";
public static String amigoAttackPhrase = "Удар Амиго достиг цели. Диабло потерял 3 жизни.";
public static String winPhrase = "Амиго одержал победу над Диабло и выбил из его головы загадочный кристалл.";
public static String loosePhrase = "Диабло победил Амиго.";
public static int diabloPosition;
public static void main(String[] args) {
getRandomNumber(4);
diabloPosition = getRandomNumber(4);
findDiablo();
battle();
}
public static int getRandomNumber(int range) {
return (int) (Math.random() * range) + 1;
}
public static void findDiablo() {
System.out.println(getFirstPositionPhrase);
Scanner console = new Scanner(System.in);
int potentialPosition /*= console.nextInt()*/;
while (true) {
potentialPosition = console.nextInt();
if (diabloPosition != potentialPosition) {
System.out.println(getPositionPhrase);
} else {
System.out.println(findDiabloPhrase);
break;
}
}
//(1)
}
}
//
// do {
// potentialPosition = console.nextInt();
// System.out.println(getPositionPhrase);
// }
// while (diabloPosition != potentialPosition);
// if (diabloPosition != potentialPosition)
// System.out.println(findDiabloPhrase);
//
// while (true) {
// potentialPosition = console.nextInt();
//
// if (diabloPosition == potentialPosition) {
// System.out.println(findDiabloPhrase);
// }
// else
// System.out.println(getPositionPhrase);
// while (true) {
// if (diabloPosition != potentialPosition) {
// System.out.println(getPositionPhrase);
// potentialPosition = console.nextInt();
// }
// else{
// potentialPosition = diabloPosition;
// System.out.println(findDiabloPhrase);
// continue;
// }
// }