Я пытаюсь перенести свою игру, которую я сделал в 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 в
Java не требует закрытия ваших '{}' скобок с помощью ';'. –