2014-09-04 6 views
1

я только мог найти переменный ток # ссылки на это и не мог понять, так что здесь идет ..Два из одних и тех же переменных в разных классах

Я игрок и Целевой класс в моей программе, и я хочу чтобы иметь возможность сделать так:

public Player(int difficulty) 
{ 
    if(difficulty == 1) 
     health = hArray[0]; 
    else 
     health = hArray[1]; 
} 

где hArray - это мой массив возможных значений здоровья. Это работает, но я также рассматриваю playerHealth внутри моего целевого класса просто для удобства использования, потому что я новичок в java и не знаю, как это сделать, так что у него есть что-то вроде этого:

private int playerHealth; 
public int getPlayerHealth() 
{ 
    return playerHealth; 
} 


public void setPlayerHealth(int playerHealth){ 
    this.playerHealth = playerHealth; 
} 

Но я не знаю, как назвать это больше, потому что изначально у меня он был установлен для игрока, который всегда начинал со 100 здоровья. Я изменил его, потому что мне нужно установить опцию значение здоровья в проигрывателе, как требование и теперь, когда я называю это в основном (псевдо-иш):

Your starting health: " + tgt.getPlayerHealth() 

Он просто говорит, 0, потому что здоровье было определено в проигрывателе , Поэтому я знаю, почему он не работает, но я не уверен, как его исправить, или я могу исправить его с помощью моего текущего макета.

Вот мои заявления/instanstiations (это слово?):

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

Должен ли действительно быть целевой класс?На мой взгляд, цель - просто для игрока, другого игрока-врага. Я не понимаю, что такое использование класса Target. – Dici

+0

нужны два класса при назначении – brianforan

+0

Что такое цель, враг, который борется с игроком, удаляет часть своего здоровья, следовательно, нужно знать, что такое здоровье игрока? – NESPowerGlove

ответ

2

Учитывая, что вы правильно моделируется ваши два класса (который я сомневаюсь немного): если ваши Target потребности знать о здоровье игрока, у него должна быть ссылка на экземпляр и не содержать копию одного из частных членов Player. Тогда вы будете получить доступ к здоровью игрока с помощью этого экземпляра:

target.getPlayer().getHealth(); 
target.getPlayer().setHealth(50); 

Но как только Target имеет ссылку на один Player, имена классов (если не дизайн в полном объеме), кажется, совершенно недостаточно.

0

вместо того массива, как вы делаете с hArray, вы должны создать функцию в проигрывателе, такую ​​как

public static int getPlayerInitialHealth(int difficulty)

, то вы можете использовать эту функцию в обоих классах (импорт во второй класс)

1

Знаете ли вы, что Target - это сущность, которая борется с вашим Player и заставляет их потерять свое здоровье, поэтому необходимо, чтобы цель знала о здоровье плеера, тогда я думаю, что вы хотите иметь операцию, принадлежащую до Player, который может сражаться Target (просто пройдите 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... 

Это ваше домашнее задание, так что я дам вам заполнить пробелы.

+0

Я получаю то, что все пытаются сказать, но я просто собираюсь изменить его, чтобы он стал бесполезным и превратил проблему int в другую переменную, которая не важна для целевого класса ... таким образом, это будет работайте правильно, и я буду выполнять задание должным образом в одно и то же время, спасибо за ответы. Интерфейс - это то, что мы перешли/узнали немного после того, как я уже был далеко в проекте, поэтому я не хотел рисковать, не закончив его, потому что я пытался использовать что-то новое. – brianforan

+0

@pbrianq Ну, вам не нужно использовать базовый тип для вашего типа «Тип» и «Тип игрока», если вы можете взаимодействовать с другим и по-прежнему пересматривать аналогичные методы, он должен быть прямым. Я только дал вам интерфейсы, поэтому мне не пришлось бы давать вам код для вашего домашнего задания. – NESPowerGlove

Смежные вопросы