Форум программистов, компьютерный форум, киберфорум
zink0000
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Сарай №XII
(Юрий Зинковский)

Мой блог.

Игра "Жизнь"

Запись от zink0000 размещена 28.07.2016 в 11:24
Показов 2769 Комментарии 0

Программа - игра "Жизнь" (Game of Life).

Алгоритм этой программы был изложен в журнале Scientific American (Martin Gardner - статья Mathematical games
- журнал Scientific American за октябрь 1970 года, страница 120).

Напомню правила расчёта следующего шага развития популяции, если кто забыл:

1. Обитатель ячейки выживает, если рядом есть две или три занятые соседние ячейки. Соседними считаются ячейки,
которые имеют общую сторону или общую вершину.

2. Обитатель ячейки погибает и ячейка становится незанятой, если она окружена четырьмя и более занятыми ячейками (перенаселение), а также если около неё имеется только одна соседняя обитаемая ячейка или вообще нет соседей (изоляция).

3. Рождение в незанятой ячейке происходит только в том случае, если около этой ячейки имеются ровно три соседние обитаемые ячейки.


Игра происходит на поверхности, которая условно считается бесконечной. На самом деле это конечная прямоугольная плоскость, верхняя граница которой соединяется с нижней, а левая граница - с правой. То есть на поверхности тора.

Генерируем случайную начальную популяцию. Занятые поля на экране обозначаются звёздочками, в то время как незанятые поля остаются тёмными. (По крайней мере, так было в оригинале.) Из начальной популяции развивается следующее поколение в соответствии с вышеназванными правилами.

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

Движок игры, если в данном случае так можно выразится это:
Visual Basic
1
2
3
4
5
6
7
' Таблица выживания и гибели (заполнение)
For iI = 1 To 17
  iL(iI) = 0
Next iI
iL(3) = 1
iL(11) = 1
iL(12) = 1
- в Private Sub Form_Load()
и расчёт следующего поколения в таймере:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Private Sub tmrMain_Timer()
  Dim iI As Integer
  Dim iJ As Integer
  Dim iH As Integer
  '
  For iI = 1 To 20
    For iJ = 1 To 20
      iY(iI, iJ) = iX(iI, iJ)
    Next iJ
  Next iI
  For iI = 1 To 20
    iY(iI, 0) = iY(iI, 20)
    iY(iI, 21) = iY(iI, 1)
  Next iI
  For iJ = 0 To 21
    iY(0, iJ) = iY(20, iJ)
    iY(21, iJ) = iY(1, iJ)
  Next iJ
  For iI = 1 To 20
    For iJ = 1 To 20
      iH = 9 * iY(iI, iJ)
      iH = iH + iY(iI - 1, iJ - 1) + iY(iI - 1, iJ) + iY(iI - 1, iJ + 1) + iY(iI, iJ - 1)
      iH = iH + iY(iI, iJ + 1) + iY(iI + 1, iJ - 1) + iY(iI + 1, iJ) + iY(iI + 1, iJ + 1)
      iX(iI, iJ) = iL(iH)
    Next iJ
  Next iI
  lG = lG + 1
  lblG.Caption = "Поколение № " & Trim$(Str$(lG))
  picXY.Cls
  picXY.FillStyle = vbFSSolid
  picXY.FillColor = RGB(0, 255, 0)
  For iI = 1 To 20
    For iJ = 1 To 20
      If 1 = iX(iI, iJ) Then
        picXY.Circle ((CSng(iI) - 1) + 0.5, (CSng(iJ) - 1) + 0.5), 0.3, RGB(0, 255, 0)
      End If
    Next iJ
  Next iI
End Sub
Программа целиком здесь:
_Игра Жизнь 01.zip

А вот как это выглядит:
Нажмите на изображение для увеличения
Название: Game of Life.jpg
Просмотров: 1273
Размер:	31.9 Кб
ID:	3926
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru