【问题标题】:How to create a loop that will attack an enemy until the enemy is dead如何创建一个循环攻击敌人直到敌人死亡
【发布时间】:2019-11-29 08:09:24
【问题描述】:

我才刚开始编程 2 个月,所以我为我写得不好的代码道歉。如果您能给我关于如何改进代码的提示和建议,我将不胜感激。

我创建了一个创建英雄的程序。(在本例中,我使用了 dota 英雄) 程序首先询问英雄名称、生命值、法力值、攻击速度和攻击伤害。 在我创建了一个方法来询问用户它是什么类型的英雄之后。 选择是 1. 力量 2. 敏捷 3. 智力。每次选择都会设置英雄每级的攻击伤害、每级的攻击速度、每级的生命值和每级的mp。 在此之后,程序将要求用户选择一个级别(最高级别仅为 25) 选择级别后,程序将在升级后显示新属性。例如,如果用户选择 25,那么 Healthpool = healthpool + (hp per level * selected level) 等等。 在此之后程序将显示一个选择的敌人,在这个例子中是塔和肉山。 在用户选择一个敌人后,程序将显示一个选项,例如 1. 攻击 2. 结束。 我想要发生的是当用户选择攻击时,我希望程序在攻击后显示塔的当前 hp,然后将返回到如何操作的选项。 我真的不知道我应该做什么循环。

import java.util.Scanner;

class Hero {
    Scanner sc = new Scanner(System.in);
    String name, heroType, heroOpponent;
    double baseHp, baseMp, baseAs, baseAd, asplvl, adplvl, hplvl, mplvl, tower;
    int lvl, type, opponent, option;

    void UserInput() {
        System.out.print("Please enter hero name: ");
        name = sc.nextLine();
        System.out.print("Please enter your base Health Pool: ");
        baseHp = sc.nextDouble();
        System.out.print("Please enter your base Mana Pool: ");
        baseMp = sc.nextDouble();
        System.out.print("Please enter your base Attack Speed: ");
        baseAs = sc.nextDouble();
        System.out.print("Please enter your base Attack Damage: ");
        baseAd = sc.nextDouble();
    }

    void TypeMethod() {
        do {
            System.out.println("Please select your hero type");
            System.out.println();
            System.out.println("1.  Strength");
            System.out.println("2.  Agility");
            System.out.println("3.  Intelligence");
            type = sc.nextInt();

            switch (type) {
                case 1:
                    heroType = ("Strength");
                    asplvl = 2.5;
                    adplvl = 5;
                    hplvl = 20;
                    mplvl = 12;
                    break;
                case 2:
                    heroType = ("Agility");
                    asplvl = 7;
                    adplvl = 5;
                    hplvl = 12;
                    mplvl = 12;
                    break;
                case 3:
                    heroType = ("Intelligence");
                    asplvl = 2.5;
                    adplvl = 5;
                    hplvl = 12;
                    mplvl = 20;
                    break;
                default:
                    System.out.println("Selection Error! Try again!");
            }
        } while (type > 3 && type < 1);
    }

    void DisplayUserInput() {
        System.out.println("Hero name: " + name);
        System.out.println("Hero type: " + heroType);
        System.out.println("Base Health Pool: " + baseHp);
        System.out.println("Base Mana Pool: " + baseMp);
        System.out.println("Base Attack Speed: " + baseAs);
        System.out.println("Base Attack Damage: " + baseAd);
    }

    int HeroLevel() {
        do {
            System.out.println("Choose your level! Maximum level is 25");
            lvl = sc.nextInt();
            return lvl;
        } while (lvl > 25 | lvl < 0);
    }

    double MpAfterLevel(int i) {
        return baseMp = baseMp + (mplvl * (double) i);
    }

    double HpAfterLevel(int i) {
        return baseHp + (hplvl * (double) i);
    }

    double AsAfterLevel(int i) {
        return baseAs = baseAs + (baseAs * (double) i);
    }

    double AdAfterLevel(int i) {
        return baseAd = baseAd + (baseAd * (double) i);
    }

    void DisplayHeroAfterLevel() {
        System.out.println("Hero name : " + name);
        System.out.println("Hero type : " + heroType);
        System.out.println("Health Pool after at level " + lvl + " " + baseHp);
        System.out.println("Mana Pool after at level " + lvl + " " + baseMp);
        System.out.println("Attack Damage after at level " + lvl + " " + baseAd);
        System.out.println("Attack Speed after at level " + lvl + " " + baseAs);
        System.out.println();
    }

    void WhotoAttack() {
        System.out.println("Please select an opponent");
        System.out.println("1.  Tower");
        System.out.println("2.  Roshan");
        opponent = sc.nextInt();

        switch (opponent) {
            case 1:
                do {
                    tower = 5000;
                    System.out.println("tower has " + tower + " Health points");
                    System.out.println("Please take action!");
                    System.out.println("1.  Attack ");
                    System.out.println("2.  End");
                    option = sc.nextInt();
                    switch (option) {
                        case 1:
                        case 2:
                    }
                } while (tower != 0);
        }
    }
}

public class DotaHeroV1 {
    public static void main(String args[]) {
        Hero h1 = new Hero();
        int i;

        h1.UserInput();
        h1.TypeMethod();
        h1.DisplayUserInput();
        i = h1.HeroLevel();
        h1.HpAfterLevel(i);
        h1.MpAfterLevel(i);
        h1.AsAfterLevel(i);
        h1.AdAfterLevel(i);
        h1.DisplayHeroAfterLevel();
        h1.WhotoAttack();
    }
}

【问题讨论】:

  • 我建议在 Google 或 DuckDuckGo 中搜索“java 循环”并阅读不同的类型。然后选择最适合您的。
  • 我想你可能想尝试一下 - while 循环你可以在这里阅读:tutorialspoint.com/cprogramming/c_do_while_loop#。所以在 do 部分你会问用户他想做什么,而 while 部分会检查敌人是否有任何 hp 剩余
  • 阅读如何构建游戏以在主事件循环中运行:gameprogrammingpatterns.com/game-loop.html

标签: java for-loop switch-statement


【解决方案1】:

已经一年多了,我刚刚偶然发现了这个问题。

你可能不再需要答案了,但如果你碰巧需要它,我正在制作一款游戏,让敌人互相攻击直到有人死亡。

这是我用于 Player1 攻击 Player2 的 sn-p:

 new Thread(new Runnable() {
                @Override
                public void run() {

                    do {
                        try {
                            System.out.println("DELAYING " + (long) game.getAttackDelay(finalPlayer1));
                            Thread.sleep((long) game.getAttackDelay(finalPlayer1));
                            float p1DamageDealt = game.fight(finalPlayer1, finalPlayer2);
                            game.setCurrentHp(finalPlayer2, p1DamageDealt);
                            if (game.getCurrentHp(finalPlayer1) <= 0 || game.getCurrentHp(finalPlayer2) <= 0) {
                                break;
                            }

                            sendToPlayerOne.writeObject("YOU DEALT " + p1DamageDealt + "!");

                            sendToPlayerTwo.writeObject("YOU TOOK " + p1DamageDealt + "!");
                            sendToPlayerOne.writeObject("ENEMY HAS " + game.getCurrentHp(finalPlayer2) + " HP LEFT!");
                            sendToPlayerTwo.writeObject("YOU HAVE " + game.getCurrentHp(finalPlayer2) + " HP LEFT!");
                            //sendToPlayerOne.writeObject(p1DamageDealt);
                        } catch (InterruptedException | IOException ex) {
                            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    } while (finalPlayer1.getCurrentHp() > 0 && finalPlayer2.getCurrentHp() > 0);
                    if (finalPlayer1.getCurrentHp() <= 0 && finalPlayer2.getCurrentHp() > 0) {
                        gameResult = "YOU LOSE!";
                    } else if (finalPlayer2.getCurrentHp() <= 0 && finalPlayer1.getCurrentHp() > 0) {
                        gameResult = "YOU WIN!";
                    } else {
                        gameResult = "IT'S A TIE!\n"
                                + "Your HP : " + finalPlayer1.getCurrentHp() + "\n"
                                + "Enemy HP:" + finalPlayer2.getCurrentHp();

                    }
                    try {
                        sendToPlayerOne.writeObject(gameResult);
                    } catch (IOException ex) {
                        Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }

            }).start();

这不是很好,但可以满足我的需要,并且可能会通过一些调整对你有用,因为它的基本工作是做一个“做 X(攻击)而 Y(敌人健康不是 0) "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 2015-01-19
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    相关资源
    最近更新 更多