Java 2013 CW1
Контрольная работа (условие задачи)
Сегодня мы будем писать игру крестики-нолики на поле размером NxN, где для выигрыша необходимо поставить K в ряд. Присутствующие классы:
- Position - текущее состояние игрового поля. В игре крестики-нолики 1 - крестик, 2 - нолик, 0 - ничего нету. Метод toString должен выдавать состояние поля в виде таблицы чисел.
Например,
1100
0100
0222
0000 - Player - ИИ игрока для какой-нибудь игры. Чтобы определить для какой именно есть метод getGameType возвращающий Class самой игры. getName - имя ИИ. move - делает 1 ход и возвращает НОВЫЙ Position (а не измененный старый)
- XOPlayer - ИИ для игры XO.
- Game - класс абстрактной игры принимающий в качестве параметров конструктора двух игроков. Если класс игры не совпадает и классом игры у Player, должен порождаться RuntimeException. Game реализует интерфейс Iterable, что позволяет итерироваться по позициям возникающим в процессе игры. В Game необходимо добавить метод позволяющий определить победителя.
Создайте класс Tournament<T extends Game> implements Iterable<T>, который будет производить турнир среди различных ИИ для конкретной игры. В качестве параметра конструктора Tournament принимает следующее:
- Каталог с class-файлами ИИ
- Class<T> gameClass
- Object[] - набор параметров конструктора соответствующего Game.
При этом должны быть загружены только те ИИ, которые соответствуют данной игре. Должен быть предусмотрен метод, который выдает результат турнира - таблицу вида
Вася Петя Коля
Вася 1 1 0
Петя 2 0 0
Коля 0 1 1
Число - количество побед при двух партиях (в первой ходит первым первый игрок, во второй - второй)
Проведите турнир для игры XO.
В данной работе не требуется написать эффективный ИИ. Задача правильно реализовать предложенную архитектуру (далеко не идеальную :) ). Тем не менее, за хорошо написанный ИИ будут добавляться баллы.