Задание Альтернативное. ВМК гр 957, 958

Искусственная жизнь.

Технологии: потоки, serialization, ООП, WinForms, Reflection.

Коротко: поле ограниченного размера, существа (дальность видимости, урон, скорость (атаки, поворота и перемещения), хиты), еда.

Подробнее: двумерное поле, существа на нем (их поведение программируется), они появляются и уничтожаются. Этим процессом и руководит программа.

Технические детали: существа являются классами, реализующими интерфейс содержащийся прилагающейся к заданию библиотеке. Каждое существо работает в своем потоке. Программа по команде пользователя добавляет новых существ выбранного типа в случайной свободной ячейке поля.

Этапы разработки:

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

Логика работы программы:

  • Бесконечный цикл ожидания ввода пользователя (в случае с консолью): команда отображения информации о состоянии живых существ (можно в файл), команда завершения, команда добавления существа (может и не быть).
  • При добавлении существа создается новый поток, в котором и будет происходит взаимодействие с существом.
  • При окончании жизней существа поток завершается.

Логика работы потока взаимодействия с существом:

  • Начальное задание общего числа очков для распределения (единожды).
  • Цикл работы:
    • передача объектов в области видимости существа.
    • запрос действия
    • ожидание времени выполнения действия (условно), в зависимости от параметров существа.
    • выполнение действия
    • в случае достижения условий смерти, выход из цикла.
  • Завершение потока выполнения.

Интерфейс существа и назначение свойств.

public interface ICreature {

// определяет общее число очков для распределения
int Points { get; set; }
// урон наносимый существом
int Damage { get; }
// очки жизней int HP {get; set; }
// дальность видимости
int LOS { get; }
// скорость действия (атаки, перемещения, поворота...)
int Speed {get; }
// название существа
string Name {get;}
// идентификатор, устанавливается программой, а не определяется классом
int ID {get; set;}
// функция для передачи объектов в области видимости .
// в параметре передается список объектов находящихся на линии видимости
void ChangeSight (List Objects);
// запрос действия
// возвращает экземпляр перечисления определяющий действие
CreatureAction DoMove();

}

Логика действий существа.

Существо может: перемещаться вперед, поворачивать налево, направо, поедать то что лежит на ячейке впереди, атаковать существо стоящее на ячейке впереди. Вообще существо может принимать совершенно абсурдные решения. В этом случае ваша система должна отсчитывать время но не производить никаких абсурдных действий в ответ.

Распределение очков. Через свойство Points вашему классу передается общее число очков для распределения. Значит set этого свойства должна распределить эти очки между показателями существа (урон, очки жизней, дальность видимости, скорость).

Дальность видимости. Существо видит только на расстоянии определяемом свойством LOS прямо перед собой.

Интерфейс существа прикреплен к материалу.

Прикрепленный файлРазмер
Creature.cs2.01 кб
вернуться назад