我是一个菜鸟程序员,在我的包含 while 循环的分配中遇到问题。
目前,我正在编写一款游戏的战斗系统,该游戏有两个需要相互循环的阶段(攻击和防御阶段)。它是作为一种方法创建的,我将能够在游戏中多次调用它。我原本打算让代码工作的方式是创建一个 while 循环,该循环将一直持续到演员的一个生命值达到 0。接下来,我在第一个 while 循环中嵌套了 while 循环,以使用满足嵌套循环条件的布尔值继续在两者之间切换。然而,在测试代码并尝试其他循环代码的方法后,它似乎卡在循环防御阶段而不是切换回攻击阶段。
我非常感谢反馈并帮助防止代码这样做。也忽略“使用项目”位代码,我还没有添加它作为选择,所以它现在只是文本。
import java.util.*;
public class CombatSystemTesting
{
// Combat Variables
public static boolean attackStance = true;
public static boolean defenceStance = false;
// Player Variables
public static int playerGold = 0;
public static int playerHP = 20;
public static int playerArmour = 0;
public static int playerShield = 1;
public static int playerAttack = 3;
// Enemy Variables
public static int enemyHP = 12;
public static int enemyDF = 0;
public static int enemyAttack = 3;
public static void main(String[] args)
{
battle1();
}
public static void battle1()
{
int enemyAttackChance = (int)(Math.random()*3)+1;
int enemyDefendChance = (int)(Math.random()*3)+1;
Scanner sc = new Scanner(System.in);
while (playerHP <= 0 || enemyHP <= 0);
{
while (attackStance = true)
{
System.out.println("(Attack Phase)");
System.out.println("");
System.out.println("'1' - [Attack]");
System.out.println("'2' - [Strike]");
System.out.println("'3' - [Use Item]");
System.out.println("");
System.out.println("HP: " + playerHP + " DF: " + playerArmour + " Gold: " + playerGold);
System.out.println("");
System.out.println("Enemy HP: " + enemyHP + " Enemy DF: " + enemyDF);
System.out.println("");
System.out.print("Your choice: ");
int choice = sc.nextInt();
System.out.println("");
System.out.println("----------------------------------------------------------------------------------------------");
System.out.println("");
if (choice == 1)
{
if (enemyDefendChance == 1 || enemyDefendChance == 2)
{
System.out.println("You used: Attack!");
System.out.println("Rat Used: Defend!");
enemyDF = enemyDF + 1;
playerAttack = playerAttack - enemyDF;
enemyHP = enemyHP - playerAttack;
playerAttack = playerAttack + enemyDF;
enemyDF = enemyDF - 1;
attackStance = false;
defenceStance = true;
}
else if (enemyDefendChance == 3)
{
System.out.println("You used: Attack!");
System.out.println("Rat Used: Counter!");
System.out.println("");
playerAttack = playerAttack - enemyDF;
enemyHP = enemyHP - playerAttack;
playerAttack = playerAttack + enemyDF;
attackStance = false;
defenceStance = true;
}
}
if (choice == 2)
{
if (enemyDefendChance == 1 || enemyDefendChance == 2)
{
System.out.println("You used: Strike!");
System.out.println("Rat Used: Defend!");
System.out.println("");
playerAttack = playerAttack * 2;
enemyDF = enemyDF + 1;
enemyHP = enemyHP - playerAttack + enemyDF;
enemyDF = enemyDF - 1;
playerAttack = playerAttack / 2;
attackStance = false;
defenceStance = true;
}
else if (enemyDefendChance == 3)
{
System.out.println("You used: Strike!");
System.out.println("Rat Used: Counter!");
System.out.println("");
playerHP = playerHP - playerAttack * 2 + playerArmour;
attackStance = false;
defenceStance = true;
}
}
while (defenceStance = true)
{
System.out.println("(Defence Phase)");
System.out.println("");
System.out.println("'1' - [Defend]");
System.out.println("'2' - [Counter]");
System.out.println("'3' - [Use Item]");
System.out.println("");
System.out.println("HP: " + playerHP + " DF: " + playerArmour + " Gold: " + playerGold);
System.out.println("");
System.out.println("Enemy HP: " + enemyHP + " Enemy DF: " + enemyDF);
System.out.println("");
System.out.print("Your choice: ");
choice = sc.nextInt();
System.out.println("");
System.out.println("----------------------------------------------------------------------------------------------");
System.out.println("");
if (choice == 1)
{
if (enemyAttackChance == 1 || enemyAttackChance == 2)
{
System.out.println("You used: Defend!");
System.out.println("Rat Used: Attack!");
playerArmour = playerArmour + playerShield;
enemyAttack = enemyAttack - playerArmour;
playerHP = playerHP - enemyAttack;
enemyAttack = enemyAttack + playerArmour;
playerArmour = playerArmour - playerShield;
System.out.println("");
attackStance = true;
defenceStance = false;
}
else if (enemyAttackChance == 3)
{
System.out.println("You used: Defend!");
System.out.println("Rat Used: Strike!");
enemyAttack = enemyAttack * 2;
playerArmour = playerArmour + playerShield;
playerHP = playerHP - enemyAttack + playerArmour;
playerArmour = playerArmour - playerShield;
enemyAttack = enemyAttack / 2;
System.out.println("");
attackStance = true;
defenceStance = false;
}
}
else if (choice == 2)
{
if (enemyAttackChance == 1 || enemyAttackChance == 2)
{
System.out.println("You used: Counter!");
System.out.println("Rat Used: Attack!");
enemyAttack = enemyAttack - playerArmour;
playerHP = playerHP - enemyAttack;
enemyAttack = enemyAttack + playerArmour;
attackStance = true;
defenceStance = false;
}
else if (enemyAttackChance == 3)
{
System.out.println("You used: Attack!");
System.out.println("Rat Used: Counter!");
System.out.println("");
playerAttack = playerAttack - enemyDF;
enemyHP = enemyHP - playerAttack;
playerAttack = playerAttack + enemyDF;
attackStance = true;
defenceStance = false;
}
}
}
}
}
//Pending code will be added later
System.out.println("You shouldn't see this message till you or oppenent have reached 0 HP");
}
}
defenceStance = true
是赋值,而不是比较,因此while(defenceStance = true)
将始终为真,因为它正在测试赋值是否成功。您需要使用==
来比较值。但是由于您正在测试 true,因此您可以说while(defenceStance)
因为 bool == true 将始终仅导致 bool 的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句