我对编码完全不熟悉,我想知道你们是否可以帮助我。这是你与吸血鬼RPG风格作斗争的代码的一部分。在我将转码设置为靠近代码底部的转弯后,我的程序不会循环回到我的角色,为什么会这样?
/**
* Created by f on 7/30/2014.
*/
import java.util.Scanner;
import java.util.Random;
public class rpgBattle {
public static void main(String[] args) {
// Declarations
int charHp = 3941;
int enemyHp = 5200;
String charName;
int numDmg;
int dmgMultiplier = 1;
String playerInputSt;
int playerInput;
int turn = 1;
int miss;
//Processes
Scanner user_input = new Scanner(System.in);
System.out.println("Enter your name.");
charName = user_input.next();
System.out.println();
System.out.println("A vampire emerged!");
do {
System.out.println();
System.out.println(charName + "'s HP: " + charHp + "/3941");
System.out.println("The Vampire's HP: " + enemyHp + "/5200");
System.out.println("What will you do?");
System.out.println("Enter the number corresponding to the action you would like to perform.");
System.out.println("1. Attack");
System.out.println("2. Defend");
System.out.println(turn);
playerInputSt = user_input.next();
playerInput = Integer.parseInt(playerInputSt);
if (playerInput == 1) {
Random rand = new Random();
miss = rand.nextInt(19);
if (miss == 0) {
System.out.println();
System.out.println("The Vampire protected itself.");
numDmg = 0;
} else {
numDmg = rand.nextInt(100) + 550;
}
enemyHp = enemyHp - numDmg / 1;
System.out.println();
System.out.println(charName + " attacks!");
System.out.println("The Vampire took " + numDmg / dmgMultiplier + " damage!");
turn = 2;
} else if (playerInput == 2) {
System.out.println();
System.out.println(charName + " guards");
System.out.println(charName + " recovered 394 HP!");
charHp = charHp + 394;
dmgMultiplier = 2;
turn = 2;
};
} while (charHp > 0 && enemyHp > 0 && turn !=2);
do {
Random rand = new Random();
miss = rand.nextInt(19);
if (miss == 0) {
System.out.println();
System.out.println(charName + " braced himself.");
numDmg = 0;
} else {
numDmg = rand.nextInt(500) + 200;
charHp = charHp - numDmg / dmgMultiplier;
}
System.out.println("The Vampire attacks!");
System.out.println(charName + " took " + numDmg / dmgMultiplier + " damage!");
dmgMultiplier = 1;
turn = 1;
} while (turn == 2);
}
}
答案 0 :(得分:0)
它永远不会结束,因为在顶级循环中,离开的条件是角色的生命值降至0以下。但是,你永远不会降低他的HP。你只是在减少吸血鬼的HP,而不是角色。如果你想让游戏结束,也让吸血鬼攻击角色。这样,在某些时候他的HP会降到0以下,游戏就会结束。
但是,为了使其更逼真,你应该在吸血鬼的HP或角色为0时结束游戏,而不是当它们都低于0时结束游戏。要实现这一点,而不是使用3个循环,请使用2,但改变条件,以便当其中任何一个没有HP时,它将结束:
do {
do {
...
} while (turn == 1);
} while (charHp > 0 && enemyHp > 0);
答案 1 :(得分:0)
如果不花太多时间分析所有代码,看起来你已经为charHp嵌套了一个Do..While循环,并为enemyHp嵌套了一个Do..While循环。我认为你只需要一个Do..While循环循环,直到 charHp或enemyHp为零。
do {
do {
//.... Lots of code removed for brevity in the answer .....
} while (turn == 1);
} while ((enemyHp > 0) && (charHp > 0));
或应该是这样的,只有一个Do..While Loop
do {
//.... Lots of code removed for brevity in the answer .....
} while ((turn == 1) && (enemyHp > 0) && (charHp > 0));
答案 2 :(得分:0)
变量转弯的目的是什么?一旦输入有效值,其值将为2,直到游戏结束,因此内部while将始终仅循环一次。 但是每次外部循环继续循环时,代码仍将执行,直到分数降至0。
如果你想知道你正在玩的转数,你应该增加转弯:
turn++;
并删除最内部的while循环。
如果你想循环直到用户输入了一个有效值,你应该在最内圈的开头初始化turn:
turn=1;
祝你好运。