The Game of Life 3.6 beta
13 сентября 2009 года, 19:28
Я нашел время и довел свою программу The Game of Life до состояния, которое можно опубликовать. Да и интерес к игре «Жизнь», судя по всему, не ослабевает. Итак, представляю новую версию The Game of Life 3.6 beta.
Что нового?
- Поддержка OpenGL. Если у вашего компьютера (относительно) мощная видеоплата, ее ресурсы будут использоватсья при прорисовке.
- Многочисленные улучшения интерфейса, в том числе сообщения на русском или английском языке (в зависимости от языка, установленного в системе), а также 32-битные иконки из набора Silk Icons.
- Поддержка распространенных форматов файлов (RLE, LIF) с конфигурациями «Жизни».
- Наконец-то создана справочная система. Я включил в справочную систему Словарь «Жизни», собранный Стивеном Сильвером и переведенный Николаем Белюченко.
- Теперь при копировании и вставке используется буфер обмена Windows и текстовое представление информации. Благодаря этому можно, например, скопировать какую-нибудь конфигурацию из вышеупомянутого словаря и вставить ее в программу.
Системные требования
Особых системных требований у программы нет. Работает в операционных системах Windows 2000, XP, Vista, 7. Windows 9x из-за компиляции в Delphi 2010 больше не поддерживается.
Скачать
The Game of Life 3.6 beta (1 МБ)
Планы на будущее
Перед выпуском финальной версии 3.6 я хочу:
- исправить баги, если таковые будут найдены;
- перевести справку на английский;
- перерисовать некоторые иконки;
- переделать на сайте раздел, посвященный игре «Жизнь».
Если у меня останутся энтузиазм и время, то в версии 4.0 я полностью переделаю алгоритм расчетов (текущий я писал семь лет назад на ассемблере) и постараюсь избавиться от ограничений на размер поля.
Ключевые слова: софт
Комментарии
#1. 13 сентября 2009 года, 22:37. Сергей М. пишет:
999КБ — это мощно.
Всегда обожал эту игру, даже сам писал реализации.
Твоя — неплохая (хотя ту же скорость лучше, конечно, не задержкой выставлять, а временем, отведенным на каждый «ход»). Внедренная энциклопедия — тоже хорошо, хотя я в свое время хотел сделать полноценную библиотеку известных объектов с описаниями, разбитых по темам, для простой вставки на поле.
Ну и не сильно понимаю проблему избавиться от ограничений на размер поля.
Всегда обожал эту игру, даже сам писал реализации.
Твоя — неплохая (хотя ту же скорость лучше, конечно, не задержкой выставлять, а временем, отведенным на каждый «ход»). Внедренная энциклопедия — тоже хорошо, хотя я в свое время хотел сделать полноценную библиотеку известных объектов с описаниями, разбитых по темам, для простой вставки на поле.
Ну и не сильно понимаю проблему избавиться от ограничений на размер поля.
#2. 13 сентября 2009 года, 23:24. пишет:
Про скорость логично, конечно. Хотя для небольших конфигураций время задержки и время на ход — почти одно и то же, а для больших, я думаю, уменьшать скорость не захочется.
По поводу ограничений на размер поля. В текущем алгоритме есть два списка: фишки и пустые клетки, на которых могут появиться фишки. Еще есть несколько вспомогательных списков, заполняемых при выполнении хода. Каждый раз для каждой фишки необходимо определять количество соседей. Для этого я использую двумерный массив 1000*1000, соответствующий полю. В текущей реализации алгоритма на ассемблере двумерный массив должен иметь фиксированную ширину (1000). Если ширина переменная, на нее уйдет регистр, которых всегда не хватает, либо увеличится количество обращений к памяти. Плюс еще один регистр либо одно обращение к памяти в теле цикла потратится в переходе от статического массива к динамическому на хранение указателя на начало массива (подробнее об этом эффекте здесь: ).
Единственное, что я могу сделать — увеличить размер поля, например, до 2000*2000. В общем, гораздо проще придумать новый алгоритм, чтобы он не использовал двумерных массивов.
По поводу ограничений на размер поля. В текущем алгоритме есть два списка: фишки и пустые клетки, на которых могут появиться фишки. Еще есть несколько вспомогательных списков, заполняемых при выполнении хода. Каждый раз для каждой фишки необходимо определять количество соседей. Для этого я использую двумерный массив 1000*1000, соответствующий полю. В текущей реализации алгоритма на ассемблере двумерный массив должен иметь фиксированную ширину (1000). Если ширина переменная, на нее уйдет регистр, которых всегда не хватает, либо увеличится количество обращений к памяти. Плюс еще один регистр либо одно обращение к памяти в теле цикла потратится в переходе от статического массива к динамическому на хранение указателя на начало массива (подробнее об этом эффекте здесь: ).
Единственное, что я могу сделать — увеличить размер поля, например, до 2000*2000. В общем, гораздо проще придумать новый алгоритм, чтобы он не использовал двумерных массивов.
#3. 14 сентября 2009 года, 17:40. пишет:
Да куда идет расход процессорного времени — это понятно. Вот у меня статья уже пять лет в корне лежит :)
Почти столько же я хардкорным программированеим не занимался, поэтому у меня в голове крутится одна сумасшедшая мысль, но это вообще идиотизм, я не буду ее озвучивать :)
Почти столько же я хардкорным программированеим не занимался, поэтому у меня в голове крутится одна сумасшедшая мысль, но это вообще идиотизм, я не буду ее озвучивать :)