задачи по ООП 3 курс фкн вгу

Задача 1 (второй вариант)

2. Библиотека работы с множествами (2 студента, максимум – 100 баллов)
Разработать библиотеку обобщенных классов для работы с множествами данных. В структуру классов входят как минимум:
• ISet: IEnumerable – базовый интерфейс для всех списков;
методы:

  1. void Add(T value);
  2. void Clear();
  3. bool Contains(T value);
  4. void Remove(T value);

свойства:

  • int Count;
  • bool isEmpty;
  • • SetException – класс, описывающий исключения, которые могут происходить в ходе работы с множествами (также можно написать ряд наследников от SetException);
  • • ArraySet: ISet – класс множества на основе массива;
  • • LinkedSet: ISet – класс множества на основе связанного списка;
  • • HashSet: ISet – класс множества на основе алгоритма хеширования (использовать методы GetHashCode и Equals типа T);
  • • UnmutableSet: ISet – класс неизменяющегося множества, является оберткой над любым существующим множеством (должен кидаться исключениями на вызов любого метода, изменяющего множество);
  • • SetUtils – класс различных операций над множеством;

o методы:

  1. static bool Exists(ISet, CheckDelegate);
  2. static ISet FindAll(ISet, CheckDelegate, SetConstructorDelegate);
  3. static ISet ConvertAll(ISet, ConvertDelegate, SetConstructorDelegate);
  4. static void ForEach(ISet, ActionDelegate);
  5. static bool CheckForAll(ISet, CheckDelegate);

o свойства:

  1. static readonly SetConstructorDelegate ArraySetConstructor;
  2. static readonly SetConstructorDelegate LinkedSetConstructor;
  3. static readonly SetConstructorDelegate HashSetConstructor;

Также необходимо разработать серию примеров, демострирующих основные аспекты работы с данной библиотекой множеств.

Задача 2 (второй вариант)

1. Шахматы (команда студентов) (первый вариант)
Необходимо разработать программу для игры с компьютером в шахматы. Естественно, никто не требует, чтобы программа в полной мере обладала искусственным интеллектом и могла выигрывать, но действовать в соответствии с правилами она обязана.
Использумые классы (примерный перечень):
• Игровое поле - Game
• Игра - GameField (например, здесь может учитываться история ходов, время на обдумывание текущего хода и т.д.; данный класс может агрегировать класс игровое поле)
• Фигура (для каждой фигуры свой класс) – Figure и наследники
o Каждая фигура должна определять возможность сделать ход на ту или иную клетку игрового поля
• Игрок (человек или алгоритм) - Player
• Система визуализации и контроля действий пользователя – GameControlForm
• Фигура в системе визуализации
• Вероятно, различные внутренние классы
Используемые паттерны (примерный перечень):
• Фасад для описания текущего состояния игры, т.е. какой ход, какие фигуры стоят в каких клетках, какие фигуры уже вне игры, информация, какой сейчас ход, сколько прошло времени на ход, можно ли сделать ход из клетки А в клетку B, осуществление хода и т.д. Функциональность фасада может на себя взять класс игра, а использовать эту функцинальность могут фигуры при определении возможности хода в ту или иную клетку, подсистема визуализации и т.д.
• Итераторы для представления всех фигур в игре, истории ходов и т.д. (может использоваться системой визуализации).
• Команда для описания хода, которые можно отменять. Т.е. ход в виде команды подается игре от игрока.
• Хранитель для текущего состояния игры, с каждой выполненной командой связывается экземпляр хранителя состояния до выполнения этой команды. Кроме того команды могут использоваться в интеллектуальных стратегиях, которые работают по принципу “сделать ход в уме и посмотреть, к чему он приведет” (возможно на несколько шагов вперед).
• Стратегия для описания алгоритма выбора хода. Стратегия может быть представлена как алгоритмами, так и интерфейсом к действиям пользователя. Для каждого из 2-х игроков должна быть возможность выбора одной из нескольких стратегий. Компьютерные стратегии могут быть автоматически подгружаемыми.
• Адаптер для преобразования действий пользователя в GameControlForm к интерфейсу Player.
• Фабричный метод для создания игры (с нуля или загрузка из файла уже начавшейся игры).
• Наблюдатель, которым выступает система визуализации, наблюдающая за изменением состояния игры, т.е. за ходами каждого из игроков.
• Приспособленец для фигур в системе визуализации
Алгоритм работы приложения может быть следующий:
Создается игра (новая или загружается начавшаяся из файла). Выбираются игроки (стратегии), которые будут отвечать за каждую из команда. После активации игры вызывается асинхронный метод выполнить ход нужному из игроков. После получения данной команды игрок обдумывает ход (алгоритм просчитывает, делегируя при этом выполнение части алгоритма фигурам, а стратегия, отвечающая за человека, ждет его действий). Компьютерные стратегии имеет смысл выделить в отдельные потоки выполнения. Когда решение стратегией получено, она вызывает метод игры “сделать ход”, игра проверяет, что выполняемый ход корректен и, если так, выпоняет его и сообщает другому игроку, что теперь его ход. Игра должна обнаруживать мат. В случае отмены хода, думающему игроку посылается асинхронный метод отмены обдумывания и отменяется последний выпоненный ход. После повторной активации игры все продолжается. Текущее состояние игры может быть записано в файл.

2. Шашки (команда студентов) (второй вариант)
Все то же самое, что и для задачи шашки, только фигура будет одна, но добавляется паттерн состояние, описывающий простые пешки и дамки и соотвественно возможности фигуры в одном из этих состояний.

Задача 3 (второй вариант)

2. Разработать раскрывающийся редактор типа для кисти. Необходимо поддерживать, как минимум, Solid и Gradient-кисти.