簡體   English   中英

如何使用另一個類中的int,對其進行更改並在原始類中返回更改后的int

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

我正在制作一個非常簡單的基於文本回合的游戲,為了使其可讀性,我試圖將玩家的回合和敵人的回合划分為不同的類,但這帶來了很多問題。 基本上,代碼如下所示:

游戲本身,沒有沒有相關的東西。

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,敵人從Player類中獲取int,然后Game類中獲取結果,依此類推?

Java傳遞參數時,有一個黃金法則。 Java總是pass-by-value 基元和引用都按值傳遞。 共享此信息的原因是,您的當前代碼的結構方式使我感到這是您將要遇到的下一個問題。

不用湯匙喂您的代碼,這里是要考慮的更改列表

  1. 不要將main方法用作類之間的接口。 main有特殊的意義。 它應該是獨立應用程序的entry 理想情況下,只有一個類應該具有main方法,並且在您的情況下應該是Game類。
  2. int hp字段添加到PlayerEnemy類。
  3. PlayerEnemyhp字段添加mutator方法。 例如incrementHpdecrementHpsetHpgetHp
  4. Game類中添加一個名為startGame的方法,該方法可以從main調用。
  5. startGame方法中,使用Player player = new Player();創建一個新的Player實例Player player = new Player(); 使用player.setHp(10)Playerhp設置為10
  6. 同樣,在startGame創建一個新的Enemy對象,並將其設置為hp
  7. 每當你想增加的hp一個的PlayerEnemy ,叫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; 
    }
}

從現在起,您對應該做的事情有了一個大致的了解就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM