如何使用另一个 class 中的整数,更改它并 return 更改原始 class 中的整数

How to use an int from another class, change it and return changed ints in the original class

我正在制作一个非常简单的基于文本的回合制游戏,为了使其易于阅读,我决定将玩家的回合和敌人的回合分成不同的 classes,但这引起了很多问题。基本上代码是这样的:

游戏本身,没有无关的东西。

public class Game {
public static void main(String[] args) {
int hp = 10, enemy_hp = 10;
    while (enemy_hp > 0 && hp > 0) {
        Player.main(args);
        Enemy.main(args);
            }
}
}

玩家class:

public class Player{
    public static void main(String[] args) {
    int hp, enemy_hp;
    enemy_hp = enemy_hp - 2;
    hp++;
    }
    }

敌人class:

    public class Enemy{
        public static void main(String[] args) {
        int hp, enemy_hp;
        hp = hp - 2;
        enemy_hp++;
        }
        }

如何让玩家 class 从游戏 class 获取数据,敌人从玩家 class 获取数据,然后游戏 class 获取结果等等,当循环工作时?

Java 中传递参数有一条黄金法则。 Java 总是 pass-by-value。基元和引用都是按值传递的。分享此信息的原因是,您当前代码的结构方式让我感觉这是您要 运行 解决的下一个问题。

不用勺子喂你代码,这里有一个要考虑的更改列表

  1. 不要使用 main 方法作为 class 之间的接口。 main 有特殊意义。它应该是您的独立应用程序的 entry 点。理想情况下,只有一个 class 应该有一个 main 方法,在你的情况下这应该是 Game class。
  2. PlayerEnemy class 中添加一个 int hp 字段。
  3. PlayerEnemy 中的 hp 字段添加修改器方法。例如 incrementHpdecrementHpsetHpgetHp.
  4. Game class 中添加一个名为 startGame 的方法,可以从 main 中调用。
  5. startGame 方法中,使用 Player player = new Player(); 创建 Player 的新实例。使用 player.setHp(10);
  6. Playerhp 设置为 10
  7. 同样,在 startGame 中创建一个新的 Enemy 对象并将其设置为 hp
  8. 每当您想增加 PlayerEnemyhp 时,请调用 incrementHp 方法。同样调用decrementHp方法自减hp.

我的回答到此结束。在这里您可以大致了解如何进行进一步的重构。

我会给你一个原始的例子来说明Chetan Kinger所说的话。

public class HelloWorld
{
    public static void main(String[] args)
    {
        Player player = new Player(100, 3);
        Enemy enemy = new Enemy(100, 4);
        while(player.isAlive() && enemy.isAlive())
        {
            enemy.takeDamage(player.damage);
            player.takeDamage(enemy.damage);
        }

        if(player.isAlive())
            System.out.println("Player won with " + player.getHp() + " left!");
        else if(enemy.isAlive())
            System.out.println("Enemy won with " + enemy.getHp() + " left!");
        else
            System.out.println("Draw!");

    }
}

public class Player
{
    int hp;
    int damage;

    public Player(int _hp, int _damage)
    {
        hp = _hp;
        damage = _damage;
    }

    public boolean isAlive()
    {
        return (this.hp > 0 ? true : false); 
    }

    public void takeDamage(int damage)
    {
        this.hp -= damage; 
    }

    public int getHp()
    {
       return this.hp; 
    }
}

public class Enemy
{
    int hp;
    int damage;

    public Enemy(int _hp, int _damage)
    {
        hp = _hp;
        damage = _damage;
    }

    public boolean isAlive()
    {
        return (this.hp > 0 ? true : false); 
    }

    public void takeDamage(int damage)
    {
        this.hp -= damage; 
    }

    public int getHp()
    {
       return this.hp; 
    }
}

这足以让您大致了解从现在开始应该做什么。