Задача 1. Необходимо реализовать консольное приложение (по желанию - с использованием библиотеки Conlib), позволяющее играть в игру (подробности при дальнейшем общении, наподобие шашек) . К классам, создаваемым в рамках данного задания выдвигаются обычные требования (разбиение на файлы, использование private и const, говорящие имена методов и т.д.).
Дополнительные требования:
Программа должна позволять играть двум игрокам
Программа должна сообщать игрокам об окончании игры
Программа не должна допускать некорректных ходов
Задача 2.
Необходимо реализовать требования задачи 1 и дополнительно реализовать графическое приложение (с использованием библиотек FLTK или wxWidgets) для игры (подробности при дальнейшем общении). Необходимо разделить логику и пользовательский интерфейс и максимально переиспользовать (не копировать!) код из задачи 1.
Задача 3.
Необходимо реализовать требования задачи 2 и дополнительно реализовать режим игры против искуственного интеллекта (ИИ) (как в консольной, так и в графической версиях игры). Для работы ИИ достаточно выбрать простейший случайный алгоритм (выбирать следующий ход случайным образом из доступных ходов).
Дополнительная информация при согласовании.
Обязательные требования:
По возможности максимально понятный код с комментариями.
Для начала ознакомьтесь с полным условием задания. Оно для вас выполнимо?)
Задача 5.D (Игра "Сложные крестики-нолики")
В рамках данной задачи необходимо реализовать графическое приложение, позволяющее сыграть в игру "сложные крестики-нолики".
Правила игры:
Игра ведется на поле размером 8 * 8 клеток, каждая из клеток может быть пустой, либо в ней может быть "крестик" (x), "нолик" (O), "закрашенный крестик" (Ⓧ), "закрашенный нолик" (⬤).
Областью будем называть некоторое множество смежных клеток (смежными называются две клетки, являющимися соседями по горизонтали, вертикали или диагонали)
В начале игры все клетки поля пустые, кроме двух: в левой нижней клетке располагается "крестик" (x), в верхней правой клетке располагается "нолик" (O)В игре участвуют 2 игрока, которые ходят по очередиИгрок 1 ходит "крестиками", игрок 2 ходит "ноликами"Каждый ход состоит из трех последовательных "ходиков" (то есть сначала 3 "ходика" делает первый игрок, затем - 3 "ходика" второй и так далее)
Игрок может пропустить ход целиком, выполнить ход целиком (сделать все три "ходика") или выполнить ход частично (только в том случае, если у него нет возможных "ходиков")Доступной территорией для игрока 1 называются все клетки поля, которые являются
Смежными с клетками, в которых находятся "крестики" (x)Смежными с любой клеткой области, состоящей из "закрашенных ноликов" (⬤) в том и только в том случае, когда хотя бы одна клетка этой области является смежной с "крестиком" (x)
Доступная территория для игрока 2 определяется аналогичноВо время игрового "ходика" игрок 1 может:Поставить "крестик" (x) в любую пустую клетку из доступной территорииЗакрасить любой "нолик" (O), находящийся в любой клетке из доступной территории (в этом случае вместо "нолика" (O) в клетку записывается "закрашенный нолик" (⬤))Игровые "ходики" для второго игрока определяются аналогично
Игра считается законченной, если выполняется одно из условий:На доске не осталось полей с "крестиками" (x) (победа игрока 2)На доске не осталось полей с "ноликами" (O) (победа игрока 1)
У обоих игроков нет доступных ходов (ничья)
Оба игрока в течение трех ходов подряд пропустили ход (ничья)
Для оценки 3:
Необходимо реализовать консольное приложение (по желанию - с использованием библиотеки Conlib), позволяющее играть в игру "сложные крестики-нолики". К классам, создаваемым в рамках д