如何使用另一个 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
。基元和引用都是按值传递的。分享此信息的原因是,您当前代码的结构方式让我感觉这是您要 运行 解决的下一个问题。
不用勺子喂你代码,这里有一个要考虑的更改列表
- 不要使用
main
方法作为 class 之间的接口。 main
有特殊意义。它应该是您的独立应用程序的 entry
点。理想情况下,只有一个 class 应该有一个 main
方法,在你的情况下这应该是 Game
class。
- 向
Player
和 Enemy
class 中添加一个 int hp
字段。
- 为
Player
和 Enemy
中的 hp
字段添加修改器方法。例如 incrementHp
、decrementHp
、setHp
和 getHp
.
- 在
Game
class 中添加一个名为 startGame
的方法,可以从 main
中调用。
- 在
startGame
方法中,使用 Player player = new Player();
创建 Player
的新实例。使用 player.setHp(10)
; 将 Player
的 hp
设置为 10
- 同样,在
startGame
中创建一个新的 Enemy
对象并将其设置为 hp
。
- 每当您想增加
Player
或 Enemy
的 hp
时,请调用 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;
}
}
这足以让您大致了解从现在开始应该做什么。
我正在制作一个非常简单的基于文本的回合制游戏,为了使其易于阅读,我决定将玩家的回合和敌人的回合分成不同的 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
。基元和引用都是按值传递的。分享此信息的原因是,您当前代码的结构方式让我感觉这是您要 运行 解决的下一个问题。
不用勺子喂你代码,这里有一个要考虑的更改列表
- 不要使用
main
方法作为 class 之间的接口。main
有特殊意义。它应该是您的独立应用程序的entry
点。理想情况下,只有一个 class 应该有一个main
方法,在你的情况下这应该是Game
class。 - 向
Player
和Enemy
class 中添加一个int hp
字段。 - 为
Player
和Enemy
中的hp
字段添加修改器方法。例如incrementHp
、decrementHp
、setHp
和getHp
. - 在
Game
class 中添加一个名为startGame
的方法,可以从main
中调用。 - 在
startGame
方法中,使用Player player = new Player();
创建Player
的新实例。使用player.setHp(10)
; 将 - 同样,在
startGame
中创建一个新的Enemy
对象并将其设置为hp
。 - 每当您想增加
Player
或Enemy
的hp
时,请调用incrementHp
方法。同样调用decrementHp
方法自减hp
.
Player
的 hp
设置为 10
我的回答到此结束。在这里您可以大致了解如何进行进一步的重构。
我会给你一个原始的例子来说明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;
}
}
这足以让您大致了解从现在开始应该做什么。