我正在制作一个非常简单的基于文本回合的游戏,为了让它变得可读,我很想把玩家的回合和敌人分成不同的类别,但这引发了很多问题。基本上代码是这样的:
游戏本身,没有相关的东西。
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类获取结果等等,而循环正在工作?
答案 0 :(得分:2)
在Java
中传递参数时,有一条黄金法则。 Java总是pass-by-value
。原语和引用都按值传递。分享这些信息的原因是你的代码结构的方式让我觉得这是你将遇到的下一个问题。
没有勺子喂你代码,这里是一个需要考虑的变化列表
main
方法作为类之间的接口。 main
具有特殊意义。它应该是您的独立应用程序的entry
点。理想情况下,只有一个类应该使用main
方法,这应该是您的Game
类。int hp
和Player
课程中添加Enemy
字段。hp
和Player
中的Enemy
字段添加mutator方法。例如incrementHp
,decrementHp
,setHp
和getHp
。startGame
类中添加一个名为Game
的方法,可以从main
调用。 startGame
方法内,使用Player
创建Player player = new Player();
的新实例。使用hp
将Player
的{{1}}设置为10
; player.setHp(10)
中创建一个新的Enemy
对象并设置为startGame
。hp
或hp
的{{1}}时,请调用Player
方法。同样,调用Enemy
方法递减incrementHp
。这是我的答案将结束的地方。在这里,您可以获得有关如何进一步重构的一般概念。
答案 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;
}
}
从现在开始,你已经足够了解你应该做些什么。