ООП в Java, принципы

217
08 декабря 2017, 03:46

В 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()
    {
    }

}
Answer 1

Из объекта класса 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;

READ ALSO
Передача данных из php в json через ajax

Передача данных из php в json через ajax

Добрый вечер, подскажите пожалуйста как в js (можно с использованием jQuery) через ajax передать данные массива структуры из php файла в json формате...

390
Распределение процентов между блоками jQuery

Распределение процентов между блоками jQuery

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

386
Как перебрать объект и взять нужные значения

Как перебрать объект и взять нужные значения

Есть объект в нем есть значения мне надо вытаскивать из него значения, с этим я справился вот так:

311
Каким образом создается подобное?

Каким образом создается подобное?

Хочу реализовать подобное, как на сайте http://platinum-garageru/ , а точнее смену изображений при ховер на маркеры

202