Лабораторный практикум №8

Проект Ocean

Разработать систему имитационного моделирования Океан. Моделируется замкнутая экологическая система по принципу хищник-жертва.

В системе рассматриваются сущности:

  • Ocean - двумерная матрица ячеек.
  • Cell - ячейка океана, которая может быть либо пустой, либо содержать объект.
  • Stone - неподвижный объект океана, просто занимающий ячейку.
  • Prey - рыба-жертва. Передвигается случайным образом по океану, размножается и умирает через заданные промежутки времени.
  • Predator - рыба-хищник. Передвигается по океану, поедает рыбу-жертву, размножается. Может умереть от голода.

Консольная версия

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

[[ocean.png]

На приведенном скриншоте показана i-ая итерация океана. Жерты обозначены символом 'f', хищники - 'S'. Видно, что количество жерт существенно больше числа хищников, что создает для последних благоприятные условия для питания и размножения. На экране отображается порядка 5000 объектов.

GUI-версия

Разработать QT-версию программы с отображением данных в графическом окне. Могут быть следующие варианты:

  • объекты в океане отображаются в виде цветных точек (пикселей);

ocean1.png

  • объекты отображаются маленькими пиктограммами (содержимое берется из файлов);

ocean2.png

  • объекты отображаются графическими примитивами (при использовании библиотеки OpenGL).

Сетевая версия

Разработать сетевую версию Океана, в которой моделирование и отображение осуществляются серверной стороной, а клиент получает статистические данные о моделировании (возраст океана, количество объектов). Написать клиентскую часть в виде QT-приложения, отображающую на форме статистические данные в виде графиков.

ocean3.png

Emacs 24.5.1 (Org mode 8.3.3)

Validate