我的do-while声明似乎不起作用

时间:2014-07-30 11:47:52

标签: java if-statement while-loop boolean do-while

我对编码完全不熟悉,我想知道你们是否可以帮助我。这是你与吸血鬼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);
}
}

3 个答案:

答案 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;
祝你好运。