Я выбрал другой подход и добавил свой код в публичный репозиторий 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
Вот вывод в его текущем состоянии, немного глючный из-за тупой компьютерной стратегии, но контроллер работает.