2013-09-30 6 views
0

Я пытаюсь перенести свою игру, которую я сделал в Python, на Java. В версии Python, я имел все методы и переменные в одном «класс» и игроки словарем, как это:Доступ к общедоступным переменным в основном классе в других классах

game.py

... 
new_player={"name":"","hp":0,...} 
players=[] 
//to add new player 
players.append(new_player.copy()) 

значения данных игрока, затем добавляют отдельно:

... 
players[0]["name"]="bob" 
players[0]["hp"]=50 
... 

В версии Java у меня есть отдельный класс, используемый для определения объекта Player, а также основной метод для игры.

Например (это небольшая версия):

game.java (возвращает опущен)

import java.utils.*; 
public class game 
{ 
    public static ArrayList<player> players = new ArrayList<player>(); 
    public static ArrayList<String> pdead = new ArrayList<String>(); 
    public static int turn = 0; 
    public static void main(String[] args) 
    { 
     //do stuff 
     players.add(new player(name)); 
     //do other stuff 
    } 
    public static void do_move(move) 
    { 
     //some move is selected 
      players.get(turn).set_hp(10); 
      //at this point compiler throws error: cannot find symbol 
      //compiler does not recognize that a player should have 
      //been added to the players variable 
     //other stuff 
    }; 
}; 

player.java (возвращает опущен)

public class player 
{ 
    //arbitrary list of private variables like hp and name 
    public player(new_name) 
    { 
     name = new_name; 
     //other variables defined 
    }; 
    public void set_hp(int amount) //Adding hp 
    { 
     hp += amount; 
    }; 
    public void set_hp(int amount,String type) //taking damage 
    { 
     mana += amount; 
     //go through types, armor, etc. 
      hp -= amount; 
    }; 
    public void display stats() //displays all player's stats before choosing move 
    { 
     //display stats until... 
     //later in some for loop 
      System.out.println(players.get(index).get_hp()); 
      //here compiler throws error again: cannot find symbol 
      //players arraylist is in main class's public variables 
     //other stuff 
    }; 
    //other stuff 
}; 

Предположительно, когда два класса будут скомпилированы вместе, программа сможет работать, поскольку основные переменные являются общедоступными, а переменные игрока определяются как программа. Однако компилятор не распознает это и бросает ошибки, так как классы (в том же каталоге, кстати) не читают друг друга, а объекты не «определены» в массиве/arraylist, проверяя его.

Как вы можете получить переменные, которые будут рассматриваться компилятором, как определено? Я могу загрузить текущую рабочую версию обоих классов и финальную версию python, если это необходимо, но мне нравится держать мои игры закрытыми.

EDIT: фиксированный инициализации ArrayList в соответствии с ответом sjkm в

+0

Java не требует закрытия ваших '{}' скобок с помощью ';'. –

ответ

0

Определите общий тип списков:

изменения

public static ArrayList players = new ArrayList<player>(); 
public static ArrayList pdead = new ArrayList<String>(); 

в

public static ArrayList<player> players = new ArrayList<player>(); 
public static ArrayList<String> pdead = new ArrayList<String>(); 

иначе вы всегда должны лить объекты, которые вы получаете из списка ...

+0

Спасибо, что исправили ошибки в основном классе, но как мне получить player.java, чтобы увидеть эти переменные? Кроме того, спасибо за быстрый ответ. – greatmastermario

+0

Какие переменные вы хотите получить изнутри класса игроков? – sjkm

+0

Игрокам ArrayList принадлежит все, что мне нужно для доступа, чтобы отображать статистику и добавлять hp на основе эффекта состояния, основанного на players.size(). Если у меня есть другие, я могу использовать тот же метод. Постскриптум Почему мы просто не болтаем? – greatmastermario

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