我正在构建一个简单的格斗游戏来测试循环和 if 语句,但是我遇到了一种复杂的逻辑问题。
当玩家或敌人的 HP 归零时循环结束,但我发现我的代码无法检测到哪个 HP 先归零导致玩家总是获胜。
是否有一种简单的方法来跟踪哪个数字首先达到零从而打破循环?
do {
@SuppressWarnings("resource")
Scanner reader = new Scanner(System.in);
System.out.println("1: Attack. 2: Defend");
int n = reader.nextInt();
if (n == 1){
PHP = (PHP-EATK);
EHP = (EHP-PATK);
} else if (n == 2){
PHP = (PHP-Math.max(0, EATK-PDEF));
}
System.out.println("P "+PHP);
System.out.println(EHP);
}
while (PHP >= 1 || EHP >= 1);
if(PHP <= 0){
System.out.println("You Lose!");
}else if (EHP <= 0){
System.out.println("You win!");
}
最佳答案
看看你的循环继续条件:
while (PHP >= 1 || EHP >= 1)
这意味着“当玩家或他的敌人可以战斗时,继续前进”。换句话说,你会继续战斗,直到他们都死了,此时你宣布玩家获胜,即使是平局。
将条件更改为“当玩家和他的敌人可以战斗时”将解决此问题。
关于Java计算出哪个数字先为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38932068/