Сайт Романа ПарпалакаЗаметкиЖизньО лицееКурсовыеКурсовая 10-го класса: игра «Жизнь»

Курсовая 10-го класса: игра «Жизнь»

9 сентября 2005 года

После того, как я впервые услышал об автоморфных числах, мне захотелось узнать о них побольше. Когда мы в школе проходили Паскаль, я написал небольшую программу, которая находила эти числа. Но она использовала тип LongInt (4 байта), и работала только с девятизначными цифрами. Найти такие числа можно и на калькуляторе. В девятом классе я вернулся к проблеме автоморфных чисел и нашел несколько интересных свойств. Например, сумма двух автоморфных чисел с  данным количеством цифр равна числу 1000...001, таких чисел всего два и  заканчиваются они одно на 5, а другое на 6. Еще я вывел правило, по которому зная одно автоморфное число, можно было найти число с количеством цифр, на единицу большим. И мне захотелось, используя это правило, посчитать большие автоморфные числа. Ведь цифры в них могли чередоваться по какому-нибудь простому правилу.

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

Со мной оставались Денис Пономарёв и Андрей Калин. Мы практиковались в программировании. Вскоре я вспомнил еще одну интересную вещь — игру «Жизнь». О ней я узнал классе в седьмом, и меня это очень заинтересовало. Но я всё проделывал вручную и проверил поведение только небольших конфигураций. А теперь у  меня появилась реальная возможность запрограммировать «Жизнь» и провести более серьезные исследования. Я ее упускать не стал. Самый первый вариант программы выводил на поле размером 10*10 клеток эволюцию простейшей конфигурации — мигалки. Андрей тоже написал свой вариант. Но у него где-то была ошибка, и из одной единственной точки у  него рождалась целая колония, которая с каждым ходом становилась всё больше и больше. Мы с Андреем решили совершенствовать мою версию.

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

К середине 10 класса я так и не нашел тему для курсовой. Татьяна Ивановна Антоненко предлагала работу по фотоэффекту. Мне она казалась слишком простой по сравнению со «световым давлением». И я решил выполнить работу по информатике по игре «Жизнь». Работа состояла из двух смысловых частей: в одной я излагал известные сведения об игре «Жизнь» и о клеточных автоматах, а в другой — конфигурации, найденные мною и полученные выводы.

Андрей написал тогда редактор логических схем. Сначала это была программа на Паскале. Потом он ее переписал на C++ Builder с использованием объектно-ориентированного программирования. Идея очень хорошая, но, к сожалению, Андрей потом забросил разработку. Однако можно было хотя бы обновить интерфейс.

Я нашел в интернете замечательную программу Mirek's Cellebration. Мой вариант не мог идти ни в какое сравнение с ней ни по быстродействию, ни по функциональности. Так как она разрабатывалась для MS-DOS, то ограничение на память в 640 Кб было существенным, из-за этого размер поля был маленьким. Чтобы на конференции «Способность. Труд. Талант.» выглядеть более-менее прилично, я решил написать «Жизнь» на Delphi для Windows. Получившаяся программа Life 2.0 была тоже медленной, да и, к тому же, малофункциональной.

На конференции "Способность. Труд. Талант."На  конференции работа заняла только третье место. Возможно, ее не оценили до конца. И я полностью для себя не решил, на что следовало обратить внимание при защите: на клеточные автоматы и возможности их применения, или на особенности реализации программы.

После конференции я продолжал практиковаться в программировании, дорабатывая программу. Весь основной цикл расчетов я переписал на ассемблере с использованием прямого доступа в видеопамять для вывода графики, это значительно увеличило быстродействие. Потом я придумал совершенно другой алгоритм, отладил его, а потом написал на ассемблере. Он лег в основу The Game Of Life 3, написанной на Delphi с нуля.

В последней курсовой работе я тоже создавал программу. Но об этом — в следующем рассказе.

Поделиться

Комментарии

#1. 1 декабря 2007 года, 16:27. Елена пишет:
замечатеоьная программа,было бы очень интересно посмотреть на исходные файлы на делфи хотя бы
1й из первых версий!заранее благодарна
#2. 1 декабря 2007 года, 20:06. пишет:
А Вы думаете, что исходники Вам помогут? Интерфейс разрабатывался стандартным для Делфи способом. Главный алгоритм там на ассемблере. Ранние версии файлов не сохранялись. Комментариев практически нет. Или Вы хотите разбираться в ассемблерном коде?
#3. 23 июня 2009 года, 10:40. пишет:
Сможете прислать или выставить сюда исходник игры жизнь с использованием ООП. Буду очень благодарен!!!
#4. 23 июня 2009 года, 12:00. пишет:
Не могу. Я ООП не использовал.
#5. 23 июня 2009 года, 12:11. пишет:
«Потом он ее переписал на C++ Builder с использованием объектно-ориентированного программирования.» Ты же писал...
#6. 24 июня 2009 года, 21:33. пишет:
Андрей написал тогда редактор логических схем. Сначала это была программа на Паскале. Потом он ее переписал на C++ Builder с использованием объектно-ориентированного программирования.
1. Писал мой приятель, а не я.
2. Он писал не игру «Жизнь», а редактор логических схем.

Оставьте свой комментарий

Ваше имя:

Комментарий:

Для выделения используйте следующий код: [i]курсив[/i], [b]жирный[/b].
Цитату оформляйте так: [q = имя автора]цитата[/q] или [q]еще цитата[/q].
Ссылку начните с http://. Других команд или HTML-тегов здесь нет.

Сколько будет 47+7?