我只能为此找到一个c#链接并且无法理解,所以这里就是..
我的程序中有一个Player和一个Target类,我希望能够这样做:
public Player(int difficulty)
{
if(difficulty == 1)
health = hArray[0];
else
health = hArray[1];
}
其中hArray是我可能的健康值数组。这样做有效,但我也只是为了易于使用而处理我的Target类中的playerHealth,因为我是java的新手,并且不知道如何做到这一点,所以它有这样的东西:
private int playerHealth;
public int getPlayerHealth()
{
return playerHealth;
}
public void setPlayerHealth(int playerHealth){
this.playerHealth = playerHealth;
}
但是我不知道如何调用它,因为最初我设置为Player总是以100健康开始。我改变了它,因为我需要在Player中设置健康值选项作为要求,现在当我在main中调用它时(psuedo-ish):
Your starting health: " + tgt.getPlayerHealth()
它只是说0,因为健康是在播放器中定义的。所以我知道为什么它不起作用,但我不确定如何解决它,或者我是否可以用我当前的布局修复它。
这是我的声明/实例(这是一个字吗?):
Target tgt = new Target(dif);
Player p1 = new Player(dif);
基于:
System.out.println("\nEnter a difficulty 1-2 (entering an integer "
+ "other than 1 or 2 will default to 2):");
dif = scn.nextInt();
感谢任何帮助
答案 0 :(得分:2)
鉴于您已正确建模了两个类(我有点怀疑):如果您的Target
需要了解玩家的健康状况,那么它应该引用Player
实例并且不保留Player
的某个私人成员的副本。然后,您将通过该实例访问玩家健康状况:
target.getPlayer().getHealth();
target.getPlayer().setHealth(50);
但是,一旦Target
引用了一个Player
,类的名称(如果不是整个设计)似乎就不够了。
答案 1 :(得分:1)
在知道Target
被认为是某种与你Player
战斗并使他们失去健康的实体之后,因此需要目标来了解玩家的健康状况,那么我认为你我希望有一个属于Player
的操作可以对抗Target
s(只是将Target
传递给Player
,或者反之亦然。下面的内容最有可能奏效:
public interface Entity
{
public int getStrength();
public int damageThatCanBeDoneToAnotherEntity(Entity someOtherEntity);
public int getHealth();
public void fightAnotherEntity(Entity someOtherEntity);
}
public class WeakMonster implements Entity...
public class StrongMonster implements Entity...
public class Player implements Entity...
这是你的家庭作业,所以我会让你填补空白。
答案 2 :(得分:0)
而不是像使用hArray那样使用数组,你应该在Player中创建一个函数,如
public static int getPlayerInitialHealth(int difficulty)
然后你可以在你的两个类中使用该函数(导入到第二个类中)