|
The Game of Life — Игра Жизнь | Описание | Информация | Простая реализация игры Жизнь на C++ MFC (есть и консольный вариант). Прилагаются исходные тексты на C++ — проект для Visual C++ 6. Может пригодиться для знакомства с Windows-программированием с использованием MFC (а также консольных функций) на C++ с ассемблерными вставками, использующими инструкции MMX.
===
Life — результат объединения User Interface от Jeff Prosise: "Programming Windows 95 with MFC" Part VII: The Document/View Architecture, Microsoft Systems Journal, February 1996 (MSDN-98) и рабочей части, написанной изначально как консольное приложение в конце 1990-х.
Так же, как и в микро-часах для рабочего стола: http://old-dos.ru/files/file_3785.html прилагается изначальная программа (с исходными текстами), есть возможность сравнить, что очень полезно при изучении программирования.
Дополнительная информация -------------------------
Википедия: https://ru.m.wikipedia.org/wiki/Жизнь_(игра)
Wikipedia: https://en.m.wikipedia.org/wiki/Conway's_Game_of_Life
Сайт игры Жизнь Николая Белюченко: http://beluch.ru/ru/index.htm
Словарь Жизни — перевод на русский язык Николая Белюченко: http://beluch.ru/life/lifelex/lexr.htm
Pentadecathlon — Game of Life Site: http://pentadecathlon.com/index.php
Pentadecathlon — Game of Life Dictionary: http://pentadecathlon.com/dictionary/dictionary.php
Life32: http://psoup.math.wisc.edu/Life32.html файл находится в google: http://www.google.ru/search?q=Life32v215.zip
Golly is an open source, cross-platform Game of Life simulator: http://golly.sourceforge.net/
Реализация Машины Тьюринга посредством Игры Жизнь: http://rendell-attic.org/gol/tm.htm
Prosise: 1995.11.09, необходимы библиотеки MFC40D.DLL и MSVCR40D.DLL. LifeExe: 2004.09.09, необходима библиотека MFC42.DLL.
// | Раздел: ПРОГРАММИРОВАНИЕ

Скриншоты Операционная система: Windows Требования: - Автор: SergeCpp Издатель: -
Добавил: SergeCpp (2013.09.21) | Доступные файлы - сортировка по имени и версии, времени добавления Файлов: 3. Все файлы на этой странице проверены ![Качество гарантировано! [100%]](http://old-dos.ru/img/verified.png) Файл | Размер | Выпуск | Версия | Язык | Загрузил | | 26.5 Кб | 2004.09.09 | | Английский | SergeCpp 2013.09.21 | | 102.5 Кб | 2005.04.03 | | Английский | SergeCpp 2013.09.21 | Файлы Interface\LifeView.cpp, Worker\Header.h, Worker\Conway.cpp и _common\misc.cpp изменены позже 2004.09.09, я уже не помню, что там и как, увы.
| | 20.7 Кб | 1995.11.09 | | Английский | SergeCpp 2013.09.21 | Версия Jeff Prosise — скорее иллюстративного плана, отсюда взят изначальный интерфейс (скорее — его идея, так как переделано почти всё). Программа взята из примеров MSDN-98. Исходные тексты — присутствуют.
|
 |
Комментарии | #1 Автор: SergeCpp (2013.09.21 22:09) | Это скорее, конечно, в раздел Программирование (считаю, что полезно будет ознакомиться при обучении: MFC, C++ и Assembler), хотя я не уверен, вот и поместил сюда, так как по определению — это всё же симулятор.
То, что взято от Jeff Prosise, изменено совершенно радикально (множество оптимизаций экранного вывода; сама же логика "Жизни" была написана много ранее, независимо), изначальный вариант (там совсем уж базово) даётся для сравнения, а сравнение при изучении — очень полезно.
Да, MFC ныне — "каменный век", так и сайт у нас — для "старенького".
Разумеется, для более-менее серьёзной работы с игрой Жизнь рекомендуется Life32 (она уже старенькая, но всё же) и Golly — супер-разработка.
P.S. То есть я не возражаю против возможного дальнейшего переноса в Программирование. Но это надо бы обговорить.
|
#2 Автор: Nika (2013.09.21 22:24) | SergeCpp, Вообще-то, да, это классический пример при обучении программированию.
Пару версий этой же игрули на Паскале есть в примерах к TurboPascal5.5: http://old-dos.ru/index.php?page=files&mode=files&do=show&id=3285
|
#3 Автор: SergeCpp (2013.09.21 22:30) | Хорошо, тогда я предварительно перенесу в Программирование (так как тут вместе C++ и Assembler), а там — посмотрим.
|
#4 Автор: SergeCpp (2013.09.21 22:31) | Вот, на всякий случай, архив, где игра — в "Симуляторах": http://archive.is/Dajkw
|
#5 Автор: SergeCpp (2013.09.21 22:33) | ...не переносится. Нет выбора такого. Ну да ладно. Пусть будет тут. По названию найти можно будет.
|
#6 Автор: Nika (2013.09.21 22:36) | SergeCpp, да, я это давно заметил, что "Игры" и "Файлы" изолированы друг от друга.
SR ?
|
#7 Автор: SergeCpp (2013.09.21 22:37) | Да я не возражаю особо, всё же это симулятор. |
#8 Автор: SergeCpp (2013.09.21 22:53) | ...по поводу памяти: некогда я где-то читал (возможно, что это приукрашено, конечно), как старый уже Дюма, живший на склоне лет у сына, зачитался одной книжкой _неизвестного_ему_автора_ (неясно, может, без обложки была или ещё как), а потом сказал сыну: я увлёкся чтением, как хорошо написано. Это были Три Мушкетёра.
То есть уже про свои писанные вещи не можешь сказать, что там и как, и даже порой удивляешься, глядючи, и ничего уже почти не понимая. Хорошо, что хоть сохранились исходные тексты.
|
#9 Автор: SergeCpp (2013.09.21 22:58) | Вот что помню хорошо — то, что там кое-где есть названия трёх частей одного романа Диккенса. И — подходят по смыслу там делаемого! |
#10 Автор: SR (2013.09.21 23:21) | В принципе, можно в ручном режиме перенести. В адресной строке исправить mode=files на mode=games, и будет выбор игровых категорий |
#11 Автор: SergeCpp (2013.09.22 00:02) | Спасибо! Перенёс в программирование пока. Там посмотрим.
|
#12 Автор: Nika (2013.09.22 00:14) | SergeSpp, а я где-то читал, что Дюма был одним из первых известных литераторов, построивших свой успех на найме "литературных негров". Рассказанная вами история тому подтверждение. |
#13 Автор: SergeCpp (2013.09.22 02:41) | Всё же хочется считать, что "базу": {Мушкетёров, 20 лет, 10 лет}, Графа, {Марго, Монсоро, 45} — он написал сам. |
#14 Автор: Nika (2013.09.22 05:03) | Да трудно судить - в оригинале я тексты читать не могу, а в переводе - тут уже и так 30% (если не больше) принадлежит переводчику. |
#15 Автор: SergeCpp (2013.09.22 13:24) | http://archive.is/p32Uw
Сами французы именно эти романы отмечают и пишут, что авторство лишь некоторых работ -- под сомнением. Да и если рассудить, как мог нанимать писателей тот, кто пишет плохо и книги его плохо покупают? |
#16 Автор: Nika (2013.09.22 14:08) | SergeCpp, это всё так, но вспомните вещь под названием "Малая Земля" (я её не читал, но её было много всюду). Или те же мемуары Жукова. Люди со статусом могут иногда невозможное...
|
#17 Автор: SergeCpp (2013.09.22 16:38) | В скриншотах размещены найденные иллюстрации логики используемого алгоритма:
http://old-dos.ru/screens/4010/Life_Algorithm_1_Brief.jpg http://old-dos.ru/screens/4010/Life_Algorithm_2_Detailed.jpg
Ещё есть третья страница, там достаточно много текста и расплывчато довольно. Сейчас размещу, а дальше, кому будет интересно, может специальные программы применить, см: http://habrahabr.ru/post/147828/ и http://habrahabr.ru/post/152885/ (архив: http://archive.is/2HJsl и http://archive.is/c8lzh).
|
#18 Автор: SergeCpp (2013.09.22 16:53) | http://old-dos.ru/screens/4010/Life_Algorithm_3_Line_0_a.jpg http://old-dos.ru/screens/4010/Life_Algorithm_3_Line_0_b.jpg
|
#19 Автор: SergeCpp (2013.09.29 16:15) | Методы Windows-программирования, применённые в Life (файл LifeView.cpp) -----------------------------------------------------------------------
1. "Двойная буферизация" / "Double Buffering" — для устранения мерцания при выводе в окно (см. 6).
2. Создание и работа с окном, имеющим собственный контекст отображения (CS_OWNDC) — для повышения быстродействия.
3. "Суперклассинг" / "Superclassing" — создание нового класса окна на основе стандартного MFC-класса для реализации 2.
4. Прямой вызов процедуры Paint (сообщение WM_PAINT) в обход оконной процедуры MFC — для повышения быстродействия (незначительно).
5. "Субклассинг" / "Subclassing" — установка собственной оконной процедуры для реализации 4.
6. Реализация обработки сообщения WM_ERASEBKGND — устранение мерцания (см. также 1) и вывод фоновым рисунком "глайдера" (он виден при первоначальном запуске, а также при изменении размеров окна). Глайдер рисуется с использованием двойной буферизации (см. 1).
7. Реализация обработки сообщений WM_HSCROLL и WM_VSCROLL — для исправления некоторых "шероховатостей" MFC, а также для обхода "the 16-bit barrier of the WM_?SCROLL".
Методы языка C++, применённые в Life (файл LifeView.cpp) --------------------------------------------------------
8. Использование указателя на член-переменную структуры/класса, применяется в 7.
9. Использование указателя на член-метод класса, применяется при обработке сообщений WM_WINDOWPOSCHANGING и WM_WINDOWPOSCHANGED (в частности, для того, чтобы некоторое время был виден "глайдер" в 6).
Метод ускорения графического вывода -----------------------------------
Кроме упомянутых выше методов, используется массив из 256 (ADJ_OBJECTS) заранее созданных (при создании окна) bitmap, заранее (там же) загруженных каждая в свой контекст отображения (DC) — это 256 "полосок" по 8 (ADJ_ELEMS) смежных клеток, находящихся во всех возможных (2^8 = 256) состояниях. Эти созданные "bitmap-in-DC" (массив m_hAdjDC) используются в дальнейшем для того, чтобы выводить на экран не по одной клетке, а сразу по 8. Оценить изменение быстродействия можно, перекомпилируя программу с меньшими значениями ADJ_ELEMS (файл LifeView.h): 1 << 2, 1 << 1.
Сетка между клетками как таковая не рисуется, она "встроена" в сами клетки, см. файлы Blue??.bmp и Gray??.bmp для размеров 8, 16, 32.
Размер используемых клеток можно изменить, установив значение CELL в файле App.h (доступно 2, 4, 8, 16, 32) и перекомпилировав программу.
Использование реестра: HKEY_CURRENT_USER\Software\Serg\<имя-файла-программы>.
//
|
| |
|