Как заставить моего человека и игрока играть по очереди в игре Connect4? - PullRequest
1 голос
/ 06 мая 2019

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

Однако как мне убедиться, что Человек и Компьютер по очереди играют по моему основному методу? Если я в данный момент запускаю этот код, он позволяет игроку 1 играть до тех пор, пока он не выиграет, а затем переходит на компьютер.

Ответы [ 2 ]

3 голосов
/ 06 мая 2019

Я выбрал другой подход и добавил свой код в публичный репозиторий github. В заключение я создал объекты для BoardPositions, создал интерфейс для Player с двумя классами, которые его реализуют, Human Player и Computer Player. Интерфейс Player имеет метод makeMove (), и в реализации человеческого плеера он будет использовать sysout, sysin для получения значения. Для Computer Player я создал абстрактный класс ComputerStrategy, который позволяет реализовывать несколько компьютерных стратегий и делегировать методу метод makeMove компьютерного проигрывателя. Я также создал GameController, который создается в методе Main класса Main, и он позволяет вам настраивать игру, спрашивая, сколько человек-игроков (затем имя каждого игрока-человека) и сколько компьютерных игроков. Я также заставил каждого игрока выбрать уникального персонажа, который представляет их фигуры на доске.

Это не полностью реализовано, необходимо добавить логику, которая проверяет победителя, контроллер также рандомизирует порядок игроков, и ему необходим цикл для поворотов игроков, пока игровое поле не заполнено без победителя или не найден победитель. ,

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

Это, вероятно, отличается от того, о чем вы думаете, но если вы что-то из этого извлечете, проголосуйте за мой ответ :)

GitHubRepo https://github.com/krebznet/connect4.git

P.S Вот вывод в его текущем состоянии, немного глючный из-за тупой компьютерной стратегии, но контроллер работает.

enter image description here

2 голосов
/ 06 мая 2019

Переместите игровой цикл while в свою основную функцию, в противном случае она ожидает окончания игры в HumanPlayer.getUserInput(). Кроме того, вы должны добавить функцию, которая проверяет, выиграл ли один из игроков, потому что он не соответствует определению getUserInput.

HumanPlayer human = new HumanPlayer();
ComputerPlayer computer = new ComputerPlayer();

while(!human.hasWon() && !computer.hasWon()) { // Remove the loop from getUserInput() !!!
     human.getUserInput();
     computer.getUserInput();
}

Функция public boolean hasWon() должна быть определена в Player и переопределена в HumanPlayer и ComputerPlayer для математического анализа кода, который у вас уже есть, который проверяет, выиграли ли они.


Пожалуйста, дайте мне знать, если у вас есть другие вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...