如何在另一个类中使用int,更改它并在原始类中返回更改的int

时间:2015-06-28 11:47:25

标签: java int

我正在制作一个非常简单的基于文本回合的游戏,为了让它变得可读,我很想把玩家的回合和敌人分成不同的类别,但这引发了很多问题。基本上代码是这样的:

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

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);
            }
}
}

玩家类:

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

敌人类:

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

如何使Player类从Game类中获取int,Enemy从Player类获取int,然后Game类获取结果等等,而循环正在工作?

2 个答案:

答案 0 :(得分:2)

Java中传递参数时,有一条黄金法则。 Java总是pass-by-value。原语和引用都按值传递。分享这些信息的原因是你的代码结构的方式让我觉得这是你将遇到的下一个问题。

没有勺子喂你代码,这里是一个需要考虑的变化列表

  1. 不要使用main方法作为类之间的接口。 main具有特殊意义。它应该是您的独立应用程序的entry点。理想情况下,只有一个类应该使用main方法,这应该是您的Game类。
  2. int hpPlayer课程中添加Enemy字段。
  3. hpPlayer中的Enemy字段添加mutator方法。例如incrementHpdecrementHpsetHpgetHp
  4. startGame类中添加一个名为Game的方法,可以从main调用。
  5. startGame方法内,使用Player创建Player player = new Player();的新实例。使用hpPlayer的{​​{1}}设置为10;
  6. 同样,在player.setHp(10)中创建一个新的Enemy对象并设置为startGame
  7. 每当您想要增加hphp的{​​{1}}时,请调用Player方法。同样,调用Enemy方法递减incrementHp
  8. 这是我的答案将结束的地方。在这里,您可以获得有关如何进一步重构的一般概念。

答案 1 :(得分:1)

我将给你一个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; 
    }
}

从现在开始,你已经足够了解你应该做些什么。