需要通过 main-class 方法中的 setHP 更新 HP(在 main-class 方法中使用非主类方法 (setHP))

Need to update HP via setHP in a Method in main-class (use non main-class method (setHP) in main-class method)

提问人:benshee 提问时间:6/21/2023 最后编辑:benshee 更新时间:6/21/2023 访问量:70

问:

因此,我正在创建一个基于文本的小型 RPG,目前我正在尝试将 HPUpdate 实现到方法中。

由于主类中的方法无法从对象类中访问 getter 和 setter,因此我需要找到不同的解决方案。

我找到了一个,不知道它是否正确,但它似乎只更新了一次 HP,之后它总是重复相同的 HPUPdate。

“哥布林损失了10点生命值!” “哥布林还剩下40点生命值!”

再次攻击后,还是一样。

所以不是剩下的 30HP,而是 40HP。

我制作了第二个主类,它在那里工作,没有使用方法。但我想用一种方法来做。

代码如下:


Characters Fiona = new Characters(100, 10, 50, "Fiona"); // PLAYER CHARACTER INIT, FIONA = TEMP NAME
        Enemies Goblin = new Enemies(50, 10, 10, "Goblin"); // GOBLIN ENEMY INIT

battlesystem(Fiona.getSpd(), Goblin.getSpd(), Fiona.getName(), Goblin.getName(), Fiona.getDmg(),
                Goblin.getDmg(), Fiona.setHp(setHPChar(Fiona.getHp(), Goblin.getDmg())),
                Goblin.setHp(setHPEnem(Goblin.getHp(), Fiona.getDmg())), Fiona.Statstostring(), Goblin.Statstostring());

    }

    // BATTLE_SYSTEM --> WIP
    public static int battlesystem(int playerspeed, int enemyspeed, String playername, String enemyname, int enemyDMG,
            int playerDMG, int playerHPUpdate, int enemyHPUpdate, String playerstats, String enemystats) {

        Scanner sc1 = new Scanner(System.in);
        int newplayerhp = 0;
        System.out.printf(" Battle start! %n"); // Begin Battle-Scenario
        if (playerspeed <= enemyspeed) {
            System.out.printf(" Goblin attacks! %n");
            System.out.printf(" You lose %d HP! %n", enemyDMG);
            System.out.printf(" You have %d HP left!%n", playerHPUpdate);
        } else {

            System.out.printf(" %n What is your Strategy? %n");
            int i = 0;
            while (i < 1) {
                System.out.printf(" %n%n (A)ttack %n (D)efend %n (I)tems %n (S)tats %n (F)lee %n");
                String choice = sc1.nextLine();
                switch (choice.toUpperCase()) {
                case "A":
                    System.out.printf(" You decide to attack the Goblin! %n");
                    System.out.printf(" %S attacks!", playername);
                    System.out.printf(" %S loses %d HP%n", enemyname, enemyDMG);
                    System.out.printf(" Goblin has %d HP left!%n", enemyHPUpdate);

                    break;

编辑:

下面是 UpdateHP 方法:

public static int setHPChar(int oldcharHP, int enemDMG) { // UPDATE Character HP through subtraction of the Enemy
                                                            // Damage

    int updateCharHP = oldcharHP - enemDMG; // setHP = getHP - getDMG
    return updateCharHP;

}

public static int setHPEnem(int oldenemHP, int charDMG) { // // UPDATE Enemy HP through subtraction of the Character
                                                            // Damage

    int updateEnemHP = oldenemHP - charDMG; // setHP = getHP - getDMG
    return updateEnemHP;
}

下面是对象类:

    private int hp; // Health Points STAT OF OBJECT
    private int dmg; // Damage Points STAT OF OBJECT
    private int spd; // Speed Points STAT OF OBJECT
    private String name; // Name OF OBJECT
    private boolean haskey = false; // BOOLEAN if OBJECT HAS A KEY --> only used in first    Scenario at the moment

    public int getHp() { // PRINTS Health Points of Character

        return hp;
    }

    public int setHp(int hp) { // INCREASES OR DECREASES Character Health Points
        this.hp = hp;
        return hp;
    }

所以回顾一下,角色攻击敌人,敌人通过角色伤害失去生命值。

EnemyHP - CharacterDMG = newEnemyHP。

Java 对象 方法

评论

1赞 Hovercraft Full Of Eels 6/21/2023
您的整个程序结构看起来可能已经关闭。不应将玩家和敌方对象属性传递到需要直接与这些对象交互的任何方法中。取而代之的是,通过玩家和敌人的物体本身。但话虽如此,你甚至不应该这样做。这些对象应通过构造函数或 setter 方法传递到 Game 对象中,然后它们应该可以在 Game 对象中自由地相互交互。重新思考你的结构。
1赞 Hovercraft Full Of Eels 6/21/2023
顺便说一句,您将需要学习和使用 Java 命名约定。变量名应全部以小写字母开头,而类名应以大写字母开头。学习并遵循这一点将使我们能够更好地理解您的代码,并让您更好地理解其他人的代码。
2赞 Hovercraft Full Of Eels 6/21/2023
“因为主类中的方法无法访问对象类中的 getter 和 setter,所以我需要找到不同的解决方案。”——这是你的问题。main 或 Game 类应该能够调用这些方法。不要试图用笨拙来修复糟糕的程序设计。再次,重新考虑您的程序结构。我不得不怀疑这个问题是否不适合这个网站,因为它非常广泛。
0赞 benshee 6/21/2023
@HovercraftFullOfEels,感谢您对 Java 命名的提醒。我忙于程序的想法,以至于忽略了变量名称。我也在考虑重组,所以谢谢你的评论!

答: 暂无答案