2016-04-09 19 views
0

Я проделал довольно много копания и, похоже, не могу найти ответ, который я ищу, возможно, я задаю неправильный вопрос, потому что я довольно nooby.Основы манипулирования переменными в разных классах

Во всяком случае я пытаюсь построить простую игру Pokemon стиль для практики, и я не могу показаться, чтобы противник или игрок хитпоинтов изменить во время боевого мероприятия ..

Я его так вы выбираете 1. атаковать с помощью следующего кода:

if(select == 1){ 
      System.out.println("You strike at the raccoon!"); 
      System.out.println("You deal " + play1.atk + " damage!"); 
      Math.subtract(raccoon1.hp, play1.atk); 

класс Math.subtract просто

public static int subtract(int x, int y){  
     return (x-y);   
    } 

Где она тянет raccoon1.hp от объекта, который я построил из "соперницы кл что только что имеет:

public class Opponent { 
    public int hp = 5; 
    public int def = 0; 
    public int atk = 1; 
} 

Игрок настроен таким же образом.

Я уверен, что я просто пропустил и/или сделал что-то немое, но любая помощь новому программисту была бы весьма признательна.

Спасибо!

ответ

1
Racoon1.hp = Math.subtract(raccoon1.hp, play1.atk) 

Вы должны установить возвращаемое значение, равное raccoon.hp, либо нет смысла возвращаться значение.

1

Это вопрос правильного объектно-ориентированного программирования. Вместо того, чтобы думать об этом с точки зрения переменных, подумайте об этом с точки зрения методов. Не пытайтесь манипулировать переменной напрямую, старайтесь манипулировать ею через операции, выполняемые классом.

В вашем случае ...

if(select == 1){ 
      System.out.println("You strike at the raccoon!"); 
      System.out.println("You deal " + play1.atk + " damage!"); 
      //reduce the health by the current attack value of the player 
      racoon.reduceHealth(play1.getAttackValue()); 

В вашем Pokemon классе, или как вы назвали класс, который вы создается экземпляр при создании нового покемона, создать метод, как это ...

public void reduceHealth(int attackValue){ 
    this.hp = this.hp - attackValue; 
} 

В вашем Player классе, или как вы назвали, что класс, который вы создается экземпляр при создании нового игрока, создать метод, как это ...

public int getAttackValue(){ 
    return this.atk; 
} 

Таким образом, операции, выполняемые на ваших объектах, выполняются по собственному классу, а не по другим классам. При получении информации создайте методы, которые возвращают нужную вам информацию. При манипулировании переменной объекта используйте методы объекта для манипуляции.

+0

Большое вам спасибо за ваш ответ, это действительно помогло мне понять, как «это» работает. – lael

+0

Нет проблем! Удачи вам в вашей игре! – Zulfe

0

предложения I вы список дел нечто вроде этого

public class Opponent { 
    public int hp = 5; 
    public int def = 0; 
    public int atk = 1; 
    public void attack(Opponent target){ 
     target.hp -= atk; 
    } 
} 

После вы можете просто сделать

Opponent player = new Opponent(); 
Opponent badGuy = new Opponent(); 
player.attack(badGuy); 
Смежные вопросы