Форум программистов, компьютерный форум, киберфорум
Наши страницы
bedvit
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 3.

Клеточные автоматы ч.2 - Conway's Game of Life (С++ WinAPI)

Запись от bedvit размещена 01.03.2019 в 21:15
Обновил(-а) bedvit 18.03.2019 в 15:36 (14/03/2019 Обновление версии: Life v1.4.0.0 (v1.4.0.4))

Решил сделать свой велик.
Программа Life
Продукт написан на С++, GUI на WinAPI.

Основные параметры:
1. Размер поля от -2^32 до +2^32 клеток, по каждой из координат (рамка примерно 8,5*8,5 млрд. клеток)
2. Масштаб от 32 пикселей - одна клетка, до 32768 клеток на один пиксель (можно загрузить целиком самый большой космический корабль "Gemini", размером рамки в 4 млн. клеток, посмотреть в подробностях - по ссылке есть загрузочный шаблон в архиве)
3. Замедление хода в мс.(микросекунда=1/1000 сек.)
4. Шаг поколений. В один ход (ход - отрисовка инфо на экране) рассчитываем указанное количество поколений. Параметр нужен для того, что бы посмотреть динамику жизни при скорости выше 60-65 поколений в секунду. Предполагаю, потому как, WinAPI (WM_PAINT) не может отрисовать более 60Гц в секунду (частота обновления экрана).
5. Быстрая отрисовка в WinAPI через CreateDIBSection, с прямым доступом через DIB к битам Bitmap (следующий этап - Dirext3D, пока в разработке).
6. Кнопка "Начало координат" - перемещение в начало координат (левая верхняя точка пользовательского окна - координаты: 0.0). Работает при расчете жизни. Если вдруг потерялись Эта же позиция отрисовывается при запуске программы и при создании нового поля. Загрузка всех шаблонов происходит тоже в начало координат.
7. Горячие кнопки
8. Сочетание кнопок для действий - новый холст, открыть и сохранить файл - стандартные (к примеру, сохранить CTRL+S)
9. Чтение и запись формата RLE, форматы

10. Рисуем/Удаляем левой кнопкой
11. Таскаем холст - правой
12. Масштабирование - колесико мышки

Life на Dirext3D в разработке.


14/03/2019 Обновление версии: Life v1.4.0.0 (1.4.0.4)
- Обновлен интерфейс и сетка игрового поля.
- Оптимизирован алгоритм расчета и отрисовки - теперь быстрее на 30%.
- Добавлены команды:
13. "Инфо.панель" - информация о настройках, игровом поле.
14. "Показать ареал" - показать весь ареал (клетки, где была и есть жизнь) на экране.
15. "Автомасштаб" - автомасштабирование ареала до размеров экрана.
16. "Ареал по живым" - сужения ареала только до живых клеток.

И замеченного: у меня, версия х32 работает на 30% быстрее, чем х64 (win7 x64), что на первый взгляд, кажется парадоксальным (в профилировщике видно, что в версии х64 больше ресурсов уходит на поиск - "std::unordered_map::find")

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

В архиве, прилагаю для теста, несколько простых шаблонов в формате RLE.

На рис. "Желудь" ("Acorn"), "Фабрика космических кораблей" ("p416 60P5H2V0 gun"), "Космический корабль" ("p15 pre-pulsar spaceship") (по ссылкам есть шаблоны, которые можно загрузить в программу)
Миниатюры
Нажмите на изображение для увеличения
Название: Life2.PNG
Просмотров: 52
Размер:	34.6 Кб
ID:	5243   Нажмите на изображение для увеличения
Название: Life1.3.0.0.PNG
Просмотров: 70
Размер:	66.3 Кб
ID:	5244   Нажмите на изображение для увеличения
Название: Life1.4.0.0.PNG
Просмотров: 18
Размер:	32.9 Кб
ID:	5304  

Вложения
Тип файла: zip Life(1.3.0.0).zip (257.8 Кб, 26 просмотров)
Тип файла: rar Шаблоны_фигур_RLE.rar (26.4 Кб, 6 просмотров)
Тип файла: rar Life(1.4.0.4).rar (228.0 Кб, 5 просмотров)
Размещено в Без категории
Просмотров 327 Комментарии 10
Всего комментариев 10
Комментарии
  1. Старый комментарий
    Аватар для vlisp
    gui ужасный, дальше смотреть нет желания
    Запись от vlisp размещена 02.03.2019 в 23:52 vlisp вне форума
  2. Старый комментарий
    Аватар для bedvit
    Красивый будет на Dirext3D, если будет время доделать. Здесь была цель сделать просто и без изысков, с максимальным обзором игрового поля. Хотя на вкус и цвет все помидоры разные, это да.
    Запись от bedvit размещена 03.03.2019 в 09:05 bedvit вне форума
  3. Старый комментарий
    Аватар для Avazart
    "Новый" "Открыть" "Сохранить" должно быть наверное как подменю "Файл" наверное про это речь.
    Запись от Avazart размещена 06.03.2019 в 16:11 Avazart на форуме
  4. Старый комментарий
    Аватар для bedvit
    Так есть и как подменю, просто для удобства (т.к. команд пока мало выложил дополнительно и в основное меню). В следующей версии оставлю только подменю, раз народу не нравится Замечания по делу приветствуются.
    Запись от bedvit размещена 06.03.2019 в 21:41 bedvit вне форума
  5. Старый комментарий
    Аватар для bedvit
    14/03/2019 Обновление версии: Life v1.4.0.0
    Интересны мнения и выявленные баги.
    Запись от bedvit размещена 14.03.2019 в 20:19 bedvit вне форума
  6. Старый комментарий
    Аватар для Вадим Тукаев
    Это просто круто! К сожалению, ничем не могу помочь, это далеко за пределами моей компетенции. Я сам хочу что-то подобное сделать, но сначала попроще. Скажем, на поле 800x600. Подумываю изучить либо Qt, либо SDL. WinAPI для меня слишком сложно. Я вообще почти не работал с графикой. Мне нравится решать задачи на алгоритмы и структуры данных.
    Запись от Вадим Тукаев размещена 15.03.2019 в 09:53 Вадим Тукаев вне форума
  7. Старый комментарий
    Аватар для bedvit
    Вадим Тукаев, спасибо за оценку. По нижепредставленной ссылке начинал данную тему, реализация на VBA, с полем 500*500 клеток, закольцованное и с гибелью на границах. Может будет интересно для начала. Клеточные автоматы ч.1 - Conway's Game of Life in Excel. Реализация на WinAPI тоже не такая сложная. Сейчас, лично для меня, сложнее на DirectX 11 + C++ переложить, чем было перейти с VBA на WinAPI.
    Запись от bedvit размещена 15.03.2019 в 21:54 bedvit вне форума
  8. Старый комментарий
    “написан на С++, GUI на WinAPI.”
    Странный выбор. Сегодня наверно адекватно GUI на Qt. Графика там же. На хабре был вроде как редактор на Web OpenGL. Посмотрел картинки гугла клеточные автоматы…все они скучны и однообразны. Не понимаю чем заинтересовали. Например странные аттракторы Symmetric Icons, IFS fractals https://habr.com/ru/post/328568/
    или Fractal Flames другое дело.
    Запись от Excalibur921 размещена 15.03.2019 в 22:39 Excalibur921 вне форума
  9. Старый комментарий
    Даже играя со старыми фракталами можно парой строк делать красиво.
    http://www.cyberforum.ru/opengl/thread2208557.html
    Запись от Excalibur921 размещена 15.03.2019 в 23:20 Excalibur921 вне форума
  10. Старый комментарий
    Аватар для bedvit
    Был интересен вариант сделать графику без доп.библиотек, на низкоуровневом фундаменте под Win, понять как все работает, прокачать уровень. Будет время, хочу подключить к отрисовке ГП, т.е. DirectX 11. Опять же, по возможности без доп.библиотек, пощупать все своими руками. Может быть возьму минимум из SDK (к примеру вывод шрифтов, писать свой двиган с нуля нет времени и желания).
    Фракталы - это интересно и красиво, спору нет. Посмотрел ваши ссылки.
    Но клеточные автоматы - это больше алгоритмы, чем графика.
    В жизни Конвея можно построить Универсальный компьютер, реализацию машины Тьюринга. К примеру Spartan universal computer-constructor.
    Запись от bedvit размещена 16.03.2019 в 09:26 bedvit вне форума
    Обновил(-а) bedvit 16.03.2019 в 09:34
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru