[ R.I.P. ]
MSX Utilities
 Олег Алферов aka Секох 
     

Uplink...

in English...


Утилиты
Windows



Эмулятор
MSX...



О сайте...

Ссылки...

Друзья...

Список
рассылки...

 
Редакторы для BASIC    Визуальные эффекты для BASIC    Игры для BASIC    Учебные программы    Конвертеры файлов

Алгоритм для игры "Жизнь"

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

В начале цикла ячейки игрового поля содержат 0, если соответствующая клетка мертва, или некоторое большое число (например, 100), если клетка жива. Список клеток содержит живые клетки и не содержит мертвых. Список клеток-кандидатов пуст. Первый шаг: для каждой живой клетки из первого списка определяются ее соседи (8 клеток) и увеличиваются на 1 их значения в ячейках игрового поля. После выполнения этого шага каждая ячейка игрового поля содержит количество количество ее живых соседей. (Для клеток, которые живы на текущем шаге — количество соседей плюс 100.)

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

Очистим первый список. Второй шаг: для каждой клетки из второго списка, пометить ее, как живую (то есть, присвоить соответствующей ячейке значение 100), если ее значение было 3, 102 или 103. В противном случае — присвоить 0 (мертвая клетка). Записывать живые клетки в первый список. После завершения этой процедуры очистить второй список.

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


© 2002,
Олег Алферов
ака Секох
secoh@anl.gov