Java switch语句循环中排除的数据计算
我的期末专题是一个基于文本的游戏。到目前为止,除了1到2个问题外,我都能按照我的意愿工作。第一个大问题是,当我进入“魔术”菜单(switch语句循环)时,所有数据都不会产生任何影响。这意味着如果用户的HP降至0以下,他们不会死亡,直到您退出循环才会发生。我弄糟了它,使它工作,但它破坏了代码的其他部分,所以请帮助,如果你可以 我能做的另一个解决方案是在每个案例之后将布尔值设置为false,让用户输入一个案例,然后它跳出开关,这非常有效,除了它执行整个开关循环,这意味着每一个输入。 这是主代码,请记住它还有另一个类Java switch语句循环中排除的数据计算,java,while-loop,switch-statement,nested-loops,Java,While Loop,Switch Statement,Nested Loops,我的期末专题是一个基于文本的游戏。到目前为止,除了1到2个问题外,我都能按照我的意愿工作。第一个大问题是,当我进入“魔术”菜单(switch语句循环)时,所有数据都不会产生任何影响。这意味着如果用户的HP降至0以下,他们不会死亡,直到您退出循环才会发生。我弄糟了它,使它工作,但它破坏了代码的其他部分,所以请帮助,如果你可以 我能做的另一个解决方案是在每个案例之后将布尔值设置为false,让用户输入一个案例,然后它跳出开关,这非常有效,除了它执行整个开关循环,这意味着每一个输入。 这是主代码,请记
package textRPG;
import java.util.Random;
import java.util.Scanner;
public class LoopyLoop {
private static int maxEnemyHealth = 155;
private static int enemyAttackDmg = 25;
private static int health = 109;
private static int attackDmg = 30;
private static int mana = 15;
private static int numHealthPots = 3;
private static int healthPotionHealAmount = 30;
private static int healthPotionDropChance = 20;
private static int manaPotionRecoveryAmount = 12;
private static int count = 0;
private static int count2 = 0;
private static int expUp = 0;
private static int level = 1;
public static void main(String[] args) {
SpellsAndAbilities spells = new SpellsAndAbilities();
Scanner in = new Scanner(System.in);
Random rand = new Random();
//String Array for enemies, more can be added, or taken away
String[] enemies = {"Skeleton", "Zombie", "Goblin", "Tiny Dragon", "Ben Afleck", "Little weird man", "Huge Bee", "Jeff", "Crazy Ray"};
//Set a variable running to true, to allow the program to run, so that if the user chooses to end the game early, they can do so
boolean running = true;
System.out.println("==================================================================");
System.out.println("Welcome to Mysterical World of Mysterical Things!");
System.out.println("Please press the number corresponding the action you wish to take.");
System.out.println("==================================================================");
//Clause to keep the game running with invalid inputs
GAME:
while(running) {
int enemyHealth = rand.nextInt(maxEnemyHealth);
String enemy = enemies[rand.nextInt(enemies.length)];
System.out.println("\n\t### " + enemy + " has appeared! ###\n");
while (enemyHealth > 0) {
System.out.println("\tYour HP: " + health);
System.out.println("\tYour Mana: " + mana);
System.out.println("\t" + enemy + "'s HP: " + enemyHealth);
System.out.println("\n\tWhat would you like to do?");
System.out.println("\t1. Attack");
System.out.println("\t2. Spells");
System.out.println("\t3. Use potion");
System.out.println("\t4. Run");
String input = in.nextLine();
if (input.equals("1")) {
int damageDealt = rand.nextInt(attackDmg);
int damageTaken = rand.nextInt(enemyAttackDmg);
enemyHealth -= damageDealt;
health -= damageTaken;
System.out.println("\t>>> You hit the " + enemy + " for " + damageDealt + " damage <<<");
System.out.println("\t>>> The " + enemy + " hit you for " + damageTaken + " damage <<<");
System.out.println();
if(health < 1) {
System.out.println("\t=== You died! ===");
break;
}
//
//Problem Starts Here
//
}else if (input.equals("2")) {
boolean set=true;
while(set) {
System.out.println("____________________________________________\n");
System.out.println("1. Fireblast (Cost: 6 mana, Damage: 10-19)");
System.out.println("2. Ice Sickle (Cost: 9 mana, Damage: 22-26)");
System.out.println("3. Whirlwind (Cost: 14 mana, Damage: 31-36)");
System.out.println("4. Earth shard (Cost: 28 mana, Damage: 38-42)");
System.out.println("5. Heal (Cost: 50 mana, Heals: 35 to 55 HP)");
System.out.println("6. Exit this menu");
System.out.println("____________________________________________");
int spellInput = in.nextInt();
switch (spellInput) {
case 1: if(mana >= 6) {
mana -= 6;
int damageDealt = spells.fireBlast();
int damageTaken = rand.nextInt(enemyAttackDmg);
enemyHealth -= damageDealt;
health -= damageTaken;
System.out.println("\t====================");
System.out.println("\tYou cast Fire Blast!");
System.out.println("\t====================");
System.out.println("\n\t>>> Fireblast hits the " + enemy + " for " + damageDealt + " damage <<<");
System.out.println("\t>>> You took " + damageTaken+ " damage<<<");
System.out.println();
break;
}
else {
break;
}
case 2: if (mana >= 9) {
mana -= 9;
int damageDealt = spells.iceSickle();
int damageTaken = rand.nextInt(enemyAttackDmg);
enemyHealth -= damageDealt;
health -= damageTaken;
System.out.println("\t====================");
System.out.println("\tYou cast Ice Sickle!");
System.out.println("\t====================");
System.out.println("\n\t>>> Ice Sickle slashes the " + enemy + " for " + damageDealt + " damage <<<");
System.out.println("\t>>> You took " + damageTaken+ " <<<");
System.out.println();
break;
}
else {
System.out.println("You need more mana");
break;
}
case 3: if(mana >= 14) {
mana -= 14;
int damageDealt = spells.whirlWind();
int damageTaken = rand.nextInt(enemyAttackDmg);
enemyHealth -= damageDealt;
health -= damageTaken;
System.out.println("\t====================");
System.out.println("\tYou cast Whirlwind!");
System.out.println("\t====================");
System.out.println("\n\t>>> Whirlwind ravages " + enemy + " for " + damageDealt + " damage <<<");
System.out.println("\t>>> You took " + damageTaken+ " <<<");
System.out.println();
break;
}
else {
break;
}
case 4: if(mana >= 28) {
mana -= 28;
int damageDealt = spells.earthShard();
int damageTaken = rand.nextInt(enemyAttackDmg);
enemyHealth -= damageDealt;
health -= damageTaken;
System.out.println("\t====================");
System.out.println("\tYou cast Earth Shard!");
System.out.println("\t====================");
System.out.println("\n\t>>> Earth shard pummels " + enemy + " for " + damageDealt + " damage <<<");
System.out.println("\t>>> You took " + damageTaken+ " <<<");
System.out.println();
break;
}
else {
break;
}
case 5: if(mana >= 50) {
mana -= 50;
health += spells.Heal();
int damageTaken = rand.nextInt(enemyAttackDmg);
health -= damageTaken;
System.out.println("\t===============");
System.out.println("\tYou cast Heal!");
System.out.println("\t===============");
System.out.println("\n\t>>> You recover " + spells.Heal() + " HP <<<");
System.out.println("\t>>> You took " + damageTaken+ " damage <<<");
System.out.println("\tYour HP: " + health);
System.out.println("\tYour Mana: " + mana);
System.out.println();
break;
}
else {
break;;
}
case 6: set = false;
default: break;
}
}
}
else if (input.equals("3")) {
if (numHealthPots > 0) {
count2++;
health += healthPotionHealAmount;
mana += manaPotionRecoveryAmount;
numHealthPots--;
System.out.println("\tYou drink a potion, healing for " + healthPotionHealAmount + " HP and recovering " + manaPotionRecoveryAmount + " mana" +
"\n\t>> You now have " + health + " HP and " + mana +" Mana <<" +
"\n\t>> You have " + numHealthPots + " potions left <<");
}
else {
System.out.println("\tYou have no potions left! Defeat enemies for a chance to get one!");
}
} else if (input.equals("4")) {
System.out.println("\tYou run away from the " + enemy + "!");
continue GAME;
}
else {
System.out.println("-------------------------------------");
}
}
if(health < 1) {
System.out.println("You pitifully limp out of the dungeon, too weak to go on!");
break;
}
count++;
System.out.println("=========================================");
System.out.println(" *** " + enemy +" was defeated! ***");
System.out.println("### You have " + health + " HP ### \n### And " + mana + " mana ###");
expUp += expUp + 25;
if (rand.nextInt(100) < healthPotionDropChance) {
numHealthPots++;
System.out.println(" # The " + enemy + " dropped a health potion");
System.out.println(" # You now have " + numHealthPots + " health potion(s) # ");
}
if(expUp > 99) {
level++;
health = health+22;
attackDmg = attackDmg + 2;
mana = mana + 7;
System.out.println("****** LEVEL UP!!! ******");
System.out.println("You are now level " + level + "!");
System.out.println("Each level up rewards 22 to total health, +2 to attack, and +7 to mana!");
}
System.out.println("=========================================");
System.out.println("What would you like to do now?");
System.out.println("Press 1 to continue fighting");
System.out.println("Pess 2 to exit");
String input = in.nextLine();
while (!input.equals("1") && !input.equals("2")) {
System.out.println("Invalid command");
input = in.nextLine();
}
if (input.equals("1")) {
System.out.println("You choose to continue, good luck!");
}
else if (input.equals("2")) {
System.out.println("You exit the game");
break;
}
}
System.out.println("####################");
System.out.println("Thanks for playing!");
System.out.println("####################");
System.out.println("Press 5 to see your score!");
String input2 = in.nextLine();
if (input2.equals("5")){
System.out.println("You defeated " + count + " enemies");
System.out.println("Max level achieved: " + level);
System.out.println("And you used " + count2 + " potions");
}
else {
System.out.println("Invalid input");
input2 = in.nextLine();
}
in.close();
}
}
案例1和案例2在else子句中没有break语句,如果您不以
break结束案例代码>当前案例下的案例也将被执行,如果该案例没有break语句,那么该案例下的案例也将被执行,因此我无法强烈建议您将代码重构为离散方法。我为混乱感到抱歉,这真的很糟糕,没有任何借口。我应该写一些方法来执行这一切,所以我真诚地为寻求帮助而道歉,
6. Exit this menu
____________________________________________
6
=========================================
*** Tiny Dragon was defeated! ***
### You have 136 HP ###
### And 6 mana ###
****** LEVEL UP!!! ******