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

Мой блог.

Игра "Жизнь"

Запись от zink0000 размещена 28.07.2016 в 11:24
Показов 2796 Комментарии 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
Комментарии
 
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru