Лисья Нора

Оглавление


§ Описание

lifeforce.gif
Думаю что даже нет большого резона представлять описание самого алгоритма классической реализации клеточного автомата. Могу лишь только дать краткие пояснения о реализации.

§ Программный код

#include <qblib.h>
 
// Текущее состояние поля: 0=Старое и 1=новое поле
int Life[2][320][200];
 
void load();
void conway();
 
// Основная программа
int main(int argc, char** argv)
{
screen();
load();
 
while (loop(50)) {
conway();
}
 
return quit();
}
 
// Инициализация случайными точками
void load() {
 
srand(3);
for (int i = 0; i < 8192; i++) {
 
int x = rand() % 320;
int y = rand() % 200;
Life[0][x][y] = rand() % 16;
}
}
 
// Выполнить шаг
void conway() {
 
// Перебрать каждую клетку
for (int y = 0; y < 200; y++)
for (int x = 0; x < 320; x++) {
 
int n = 0, cl = 0;
 
// 2-3 соседа - клетка живет
for (int a = -1; a <= 1; a++)
for (int b = -1; b <= 1; b++) {
 
if (a == 0 && b == 0) {
continue;
}
 
int cr = Life[0][ (320 + x + a) % 320 ][ (200 + y + b) % 200 ];
if (cr > 0) { n++; cl += cr; }
}
 
// Если 3 соседа, то зарождение
if (n == 3) Life[1][x][y] = (cl % 15) + 1;
// Если <2 или >3, то погибает
else if (n < 2 || n > 3) Life[1][x][y] = 0;
}
 
// Копирование новой области в старую
for (int y = 0; y < 200; y++)
for (int x = 0; x < 320; x++) {
pset(x, y, (Life[0][x][y] = Life[1][x][y]) + 16);
}
}