Редактирование: Игра жизни Конвея
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 112: | Строка 112: | ||
[[Файл:Long gun.gif|400px|thumb|right|Планерная пушка в тороидальном массиве. Поток планеров в конце концов оборачивается и уничтожает пушку.]] | [[Файл:Long gun.gif|400px|thumb|right|Планерная пушка в тороидальном массиве. Поток планеров в конце концов оборачивается и уничтожает пушку.]] | ||
[[Файл:Игра "Жизнь".gif|400px|thumb| | [[Файл:Игра "Жизнь".gif|400px|thumb|left|Красный планер на квадратной решетке с периодическими граничными условиями]] | ||
В принципе, поле Game of Life бесконечно, но компьютеры имеют конечную память. Это приводит к проблемам, когда активная область посягает на границу массива. Программисты использовали несколько стратегий для решения этих проблем. Самая простая стратегия - предположить, что каждая ячейка вне массива мертва. Это легко запрограммировать, но приводит к неточным результатам, когда активная область пересекает границу. Более сложный трюк состоит в том, чтобы считать левый и правый края поля сшитыми вместе, а также верхний и нижний края, что дает тороидальный массив. В результате активные области, которые перемещаются по краю поля, снова появляются на противоположном краю. Неточность все еще может привести, если шаблон становится слишком большим, но нет никаких патологических краевых эффектов. Также можно использовать методы динамического распределения памяти, создавая все большие массивы для хранения растущих шаблонов. Игра жизни на конечном поле иногда явно изучается; некоторые реализации, такие как Golly, поддерживают выбор стандартного бесконечного поля, поля, бесконечного только в одном измерении, или конечного поля, с выбором топологий, таких как цилиндр, тор или полоса Мебиуса. | В принципе, поле Game of Life бесконечно, но компьютеры имеют конечную память. Это приводит к проблемам, когда активная область посягает на границу массива. Программисты использовали несколько стратегий для решения этих проблем. Самая простая стратегия - предположить, что каждая ячейка вне массива мертва. Это легко запрограммировать, но приводит к неточным результатам, когда активная область пересекает границу. Более сложный трюк состоит в том, чтобы считать левый и правый края поля сшитыми вместе, а также верхний и нижний края, что дает тороидальный массив. В результате активные области, которые перемещаются по краю поля, снова появляются на противоположном краю. Неточность все еще может привести, если шаблон становится слишком большим, но нет никаких патологических краевых эффектов. Также можно использовать методы динамического распределения памяти, создавая все большие массивы для хранения растущих шаблонов. Игра жизни на конечном поле иногда явно изучается; некоторые реализации, такие как Golly, поддерживают выбор стандартного бесконечного поля, поля, бесконечного только в одном измерении, или конечного поля, с выбором топологий, таких как цилиндр, тор или полоса Мебиуса. | ||
Строка 119: | Строка 119: | ||
Для изучения больших паттернов на больших глубинах времени могут быть полезны сложные алгоритмы, такие как Hashlife. Существует также метод реализации Игры жизни и других клеточных автоматов с использованием произвольных асинхронных обновлений, в то же время точно эмулируя поведение синхронной игры. Примеры исходного кода, реализующие базовый сценарий Game of Life на различных языках программирования, включая C, C++, Java и Python, можно найти в Rosetta Code. | Для изучения больших паттернов на больших глубинах времени могут быть полезны сложные алгоритмы, такие как Hashlife. Существует также метод реализации Игры жизни и других клеточных автоматов с использованием произвольных асинхронных обновлений, в то же время точно эмулируя поведение синхронной игры. Примеры исходного кода, реализующие базовый сценарий Game of Life на различных языках программирования, включая C, C++, Java и Python, можно найти в Rosetta Code. | ||
==Вариации== | ==Вариации== | ||
Основная статья: [[Жизнеподобный клеточный автомат]] | Основная статья: [[Жизнеподобный клеточный автомат]] |