Я делаю RPG (текстовую) игру в Eclipse.
Я попытался отладить свой код с помощью "System.err.println", однако консоль ничего не показывает и, похоже,быть в бесконечном цикле печати новых строк ("\ n")
Это цикл, который я должен запустить до сих пор:
while(Health > 0) {
if(!ENEMY) {
output("\n");
ERRoutput("CHECK1");
encounterEnemy(classBase.lvl);
}
move();
if(Health > MAX_HEALTH) {
Health = MAX_HEALTH;
output("\n");
ERRoutput("CHECK2");
}
if(!ENEMY && classBase.XP >= classBase.neededXP){
classBase.lvlUp();
output("\n");
}
if(classBase.LVLUP()) {
output("\n");
ERRoutput("CHECK3");
distributePoints();
if(Strength < 2) Strength = 2;
}
}
Это также единственное место, которое использует"\ n" (создает новую строку)
Я ожидаю, что выходной код будет:
- Создает врага, если противник еще не создан
- Запрашивает пользователяубить врага, пока враг не умер (метод перемещения)
- Проверить, достаточно ли опыта (XP) для повышения уровня
- Перезапустить цикл
Что на самом деле происходит:
- Появляет врага
- Предлагает пользователю убивать врага до тех пор, пока враг не умер (метод перемещения)
- Проверяет, достаточно ли опыта (XP) для повышения уровня
- Создает врага
- Консоль очищается и застревает в бесконечном цикле
Консоль показывает NO выход вообще
Для человека, который спросил, где назначен "ENEMY":
static boolean ENEMY = false;
public static void encounterEnemy(int lvl) {
eHealth = 20;
eHealth *= lvl + 1;
eStamina *= lvl;
eStamina *= lvl;
eStrength *= lvl;
eSpeed *= lvl;
eSpeed /= 2;
eDamage = 8;
eDamage *= lvl;
if(lvl > 7) {
eDamage /= 2;
}
ENEMY = true;
output("A LVL" + lvl + " enemy has appeared!");
showEnemyHealth();
}
Он назначен внутри "meetEnemy« (и снова устанавливается в false в« move () », когда враг убит)
Код повышения:
public static void lvlUp() {
upgrade = true;
lvl++;
Main.output(" _ _ _ _ _ _ _ _");
Main.output("| |");
Main.output("| LVL UP |");
Main.output("| LEVEL: " + lvl + " |");
Main.output("| HEALTH:+25 |");
Main.output("| STAMINA:+15 |");
Main.output("| STEALTH:+5 |");
Main.output("| STRENGTH:+15 |");
Main.output("| SPEED:+2 |");
Main.output("| _ _ _ _ _ _ _ |");
Main.Health += 25;
Main.Stamina += 15;
Main.Stealth += 5;
Main.Strength += 15;
Main.Speed += 2;
neededXP = 35*lvl;
XP = 0;
}
Для человека, который спросилчто делает метод повышения уровня во всех заглавных буквах:
public static boolean LVLUP() {
if(upgrade) {
upgrade = false;
Main.points += 2;
return true;
} else {
upgrade = false;
return false;
}
}
Последний, но не менее важный, метод перемещения:
static boolean proceed;
static boolean Continue;
public static void move() {
while(Health > 0 && eHealth > 0 && Health > 0) {
showStats();
proceed = true;
Continue = true;
output("What do you do?");
if(classBase.dmg_Spls == true) {
output("[10] Damage enemy with spell (Damage: " + (7.5*classBase.lvl) + ")");
}
if(classBase.heal_Spls == true) {
output("[2] Heal self with spell (Health Restore: 10 * lvl)");
}
output("[33] Attack with class weapon (Damage: " + (Strength/2) + " (Strength / 2))");
output("[41] Drink Elixer of Death");
try {
validMove = false;
while(!validMove) {
input(" -> ");
int move = Integer.parseInt(scan.nextLine());
if(move < 0 || move > 4) {
proceed = false;
}
if(move != 10 && move != 2 && move != 33 && move != 41) {
proceed = false;
}
if(move == 10 || move == 2 || move == 33 || move == 41) proceed = true;
if(move == 10 && (classBase.sselcClass == "Mage" || classBase.sselcClass == "Demon")) {
Damage = 0;
Damage = (15 * classBase.lvl);
Damage /= 2;
validMove = true;
} else if(move == 2 && (classBase.sselcClass == "Mage" || classBase.sselcClass == "Priest")) {
Damage = 0;
Health += (10*classBase.lvl);
if(Health > MAX_HEALTH) {
Health = MAX_HEALTH;
}
validMove = true;
} else if(move == 33) {
Damage = Strength / 2;
validMove = true;
} else if(move == 41) {
Health = 0;
output("You Killed Yourself! (Health: " + Health + " )");
System.exit(-1);
}
}
} catch (NumberFormatException e) {
ERRoutput("Please enter a valid numberical value!");
}
if(!proceed) {
Continue = false;
while(!proceed) {
output("What do you do? (Select Number)");
if(classBase.dmg_Spls == true) {
output("[10] Damage enemy with spell (Damage: " + (7.5*classBase.lvl) + ")");
}
if(classBase.heal_Spls == true) {
output("[2] Heal self with spell (Health Restore: 10 * lvl)");
}
output("[33] Attack with class weapon (Damage: " + (Strength/2) + " (Strength / 2))");
output("[41] Drink Elixer of Death");
try {
validMove = false;
while(!validMove) {
input(" -> ");
int move = Integer.parseInt(scan.nextLine());
if(move < 0 || move > 4) {
proceed = false;
}
if(move != 10 && move != 2 && move != 33 && move != 41) {
proceed = false;
}
if(move == 10 || move == 2 || move == 33 || move == 41) proceed = true;
if(move == 10 && (classBase.sselcClass == "Mage" || classBase.sselcClass == "Demon")) {
Damage = 0;
Damage = (15 * classBase.lvl);
Damage /= 2;
validMove = true;
} else if(move == 2 && (classBase.sselcClass == "Mage" || classBase.sselcClass == "Priest")) {
Damage = 0;
Health += (10 * classBase.lvl);
if(Health > MAX_HEALTH) {
Health = MAX_HEALTH;
}
} else if(move == 33) {
Damage = Strength / 2;
} else if(move == 41) {
Health = 0;
output("You Killed Yourself! (Health: " + Health + " )");
System.exit(-1);
}
}
} catch (NumberFormatException e) {
ERRoutput("Please enter a valid numberical value!");
}
}
}
eHealth -= Damage;
showEnemyHealth();
int allowed;
int am = 0;
if(Stealth != 0) {
for(int i = 0; i < Stealth/2; i++) {
am++;
}
} else {
am = 0;
}
allowed = r.nextInt(am);
if(allowed == 0) {
if(proceed && eHealth > 0) {
output("Enemy attacked and dealt " + eDamage + " damage!");
Health -= eDamage;
if(Health <= 0) {
output("You have died! (Health: " + Health + ")");
System.exit(-1);
}
} else if(eHealth <= 0) {
output("Enemy defeated!");
classBase.XP += 5;
ENEMY = false;
}
} else {
output("The enemy missed it's attack!");
}
}
if(Health == 0) {
output("You have died! (Health: " + Health + ")");
System.exit(-1);
}
}