[英]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
。 基元和引用都按值傳遞。 共享此信息的原因是,您的當前代碼的結構方式使我感到這是您將要遇到的下一個問題。
不用湯匙喂您的代碼,這里是要考慮的更改列表
main
方法用作類之間的接口。 main
有特殊的意義。 它應該是獨立應用程序的entry
。 理想情況下,只有一個類應該具有main
方法,並且在您的情況下應該是Game
類。 int hp
字段添加到Player
和Enemy
類。 Player
和Enemy
為hp
字段添加mutator方法。 例如incrementHp
, decrementHp
, setHp
和getHp
。 Game
類中添加一個名為startGame
的方法,該方法可以從main
調用。 startGame
方法中,使用Player player = new Player();
創建一個新的Player
實例Player player = new Player();
。 使用player.setHp(10)
將Player
的hp
設置為10
。 startGame
創建一個新的Enemy
對象,並將其設置為hp
。 hp
一個的Player
或Enemy
,叫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.