В Java приложении есть класс World, где создаются объекты игры ArrayList с доступом public. Есть также класс Player. Объекты класса Player создаются в конструкторе класса World.
В чём собственно проблема:
Из объекта класса Player не доступны поля ArrayLists объекта World.
public class World {
public Deck deck;
public Player CPU;
public Player human;
public boolean gameOver = false;
public ArrayList<Card> cpuCards;// карты ПК на столе
public ArrayList<Card> humanCards;// карты игрока на столе
public World()
{
deck = new Deck();
deck.shuffle();
CPU = new Player(true);
human = new Player(false);
cpuCards = new ArrayList<>();
humanCards = new ArrayList<>();
}
public class Player {
static boolean AI; // Игрок ИИ || человек?
public Hand hand;
public Player(boolean AI)
{
hand = new Hand();
this.AI = AI;
}
public void takeCard(Card c)
{
hand.addCard(c);
}
public Card attack(int i)// здесь должен быть void метод, который убирает карту из руки и кидает на world.humanCards но unresolved symbol
{
Card c;
if(!AI) {
if(i < hand.getCardCount() ) {
c = hand.getCard(i);
hand.removeCard(i);
return c;
} else return null;
}
else {
c = hand.getCard(1);
hand.removeCard(1);
return c;
}
}
public void defend()
{
}
}
Из объекта класса Player не доступны поля ArrayLists объекта World.
Потому, что у класса Player нет полей для обращения к World. Тут вопрос в том, кому принадлежать колоды карт. По логике они принадлежать игрокам, а не миру, поэтому и владеть ими должны игроки.
Вы можете создавать их в классе World, а при создании объекта Person передавать ему его колоду.
CPU = new Player(true, cpuCards);
human = new Player(false, humanCards);
И тогда вам не придется лезть в чужой класс за вашими данными.
И второй момент, заметил, что у вас boolean AI статична, а значит она принадлежит не объектам, а классу. По вашей логике, лучше сделать её нестатической.
Статические переменные имеют 1 экземпляр на все классы. Создавая первого person вы присваиваете ей значение true, создавая второго false и в итоге у обоих игроков AI = false;
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости