scl_screen_logo

Мои проекты — SfmlConwayLife

Время от времени я буду публиковать в данный блог то, что я в данный момент делаю или уже когда то сделал. Небольшие проектики с открытым кодом или новости об участии в больших проектах с закрытым кодом, но с подробностями об идеях и моей деятельности. И, кстати, все, что я сделал и на что более-менее можно посмотреть — находится на этой странице: http://tetraquark.ru/projects

Страница данного проекта: http://tetraquark.ru/project-sfmlconwaylife

Собственно, в данный момент, в свободное время я пишу небольшую программку, опять же с использованием графической библиотеки SFML. Из названия — SfmlConwayLife, некоторые могут догадаться о чем эта программка. Это очередная реализация алгоритма клеточного автомата Джона Конвея — Conway’s Game of Life. Коротко, при создании автомата цель была такая — создать машину, которая может воспроизводить сама себя. От сюда и появилась игра «Жизнь».

Суть простая — есть клеточное поле N x N (поле может быть ограничено, бесконечно, либо замкнутое), где каждая клетка может находится в двух состояниях — мертва или жива. Состояние клетки меняется в зависимости от соседних клеток по следующим правилам:

  • если у мертвой клетки есть ровно 3 живых соседа — то в этой мертвой клетке зарождается жизнь.
  • если у живой клетки если 2 или 3 живых соседа — то эта клетка продолжает жить, иначе клетка умирает от одиночества или перенаселения.

Все, на основе этих двух правил все и работает.

На данный момент (вполне возможно, я уже переделал), конкретно моя реализация — самая простая. Есть два вектора, нынешнее поколение клеток и будущее. При обновлении поля происходит просчет, по правилам которые написаны выше, всех клеток нынешнего поколения, а результат обновления заносится в вектор будущего поколения. Это самая простая и крайне неэффективная, с точки зрения производительности, реализация. Представим, что у нас поле размером 200 клеток на 200. Это 2 вектора, которые хранят в итоге 8000 тысяч клеток. Алгоритм таков, что при обработке клетки, происходит просчет всех соседних клеток. То есть при просчете поколения в 4000 клеток просчитывается еще 8 соседних — следовательно за один игровой кадр произойдет 32000 итераций для обновления поля. И это только на обновление состояния. Это очень много и тяжело. Поэтому я слегка оптимизировал это дело, чтобы обновление происходило не для всех клеток, а для живых и их соседей. Это слегка снизило нагрузку, но все равно это является крайне неэффективной реализацией.

scl_screen

Пока на этом все, на данный момент программка не дописана. Более подробную информацию я  буду писать в файл README проекта и вскоре добавлю информацию на страницу с проектами.

Собственно, если есть желание посмотреть на исходный код, то все находится тут: https://bitbucket.org/Tetraquark/sfmlconwaylife

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">