♾️ Часть 61: Симуляция бесконечности — рекурсивная реальность

Мы создадим систему, которая симулирует бесконечную рекурсивную реальность, где каждая вселенная содержит другую вселенную внутри себя!

Рекурсивная вселенная:

cpp

#include <avr/pgmspace.h>

#define UNIVERSE_LEVELS 4
#define GRID_SIZE 8

// Структура вселенной
struct UniverseLevel {
    uint8_t grid[GRID_SIZE][GRID_SIZE];
    uint8_t recursionDepth;
    uint8_t expansionRate;  // Скорость расширения
    uint8_t density;        // Плотность материи
};

UniverseLevel universes[UNIVERSE_LEVELS];
uint8_t currentDepth = 0;

// Инициализация вселенных (рекурсивная)
void initRecursiveUniverses() {
    for (uint8_t level = 0; level < UNIVERSE_LEVELS; level++) {
        universes[level].recursionDepth = level;
        universes[level].expansionRate = 50 + level * 20;
        universes[level].density = 100 - level * 15;
        
        // Заполняем материей
        for (uint8_t x = 0; x < GRID_SIZE; x++) {
            for (uint8_t y = 0; y < GRID_SIZE; y++) {
                universes[level].grid[x][y] = (random(100) < universes[level].density) ? 
                    random(256) : 0;
            }
        }
    }
}

// Эволюция вселенной (законы физики зависят от уровня)
void evolveUniverse(uint8_t level) {
    UniverseLevel* u = &universes[level];
    uint8_t newGrid[GRID_SIZE][GRID_SIZE];
    memcpy(newGrid, u->grid, sizeof(newGrid));
    
    for (uint8_t x = 0; x < GRID_SIZE; x++) {
        for (uint8_t y = 0; y < GRID_SIZE; y++) {
            // Соседи
            uint8_t neighbors = 0;
            for (int8_t dx = -1; dx <= 1; dx++) {
                for (int8_t dy = -1; dy <= 1; dy++) {
                    if (dx == 0 && dy == 0) continue;
                    uint8_t nx = (x + dx + GRID_SIZE) % GRID_SIZE;
                    uint8_t ny = (y + dy + GRID_SIZE) % GRID_SIZE;
                    neighbors += (u->grid[nx][ny] > 0);
                }
            }
            
            // Разные законы для разных уровней
            if (u->grid[x][y] > 0) {
                // Выживание зависит от уровня
                uint8_t survivalThreshold = 2 + u->recursionDepth;
                if (neighbors < survivalThreshold || neighbors > 4 + u->recursionDepth) {
                    newGrid[x][y] = 0;
                } else {
                    newGrid[x][y] = min(255, u->grid[x][y] + u->expansionRate / 50);
                }
            } else {
                // Рождение зависит от плотности
                uint8_t birthThreshold = 3 - u->recursionDepth / 2;
                if (neighbors >= birthThreshold && neighbors <= 3 + u->recursionDepth) {
                    newGrid[x][y] = random(256);
                }
            }
        }
    }
    
    memcpy(u->grid, newGrid, sizeof(newGrid));
}

// Рекурсивное наблюдение (вселенная внутри вселенной)
void recursiveObservation() {
    // Наблюдатель на каждом уровне
    for (uint8_t level = 0; level < UNIVERSE_LEVELS; level++) {
        // Каждая вселенная содержит подвселенную
        if (level < UNIVERSE_LEVELS - 1) {
            // Копируем состояние в следующую вселенную
            for (uint8_t x = 0; x < GRID_SIZE; x++) {
                for (uint8_t y = 0; y < GRID_SIZE; y++) {
                    universes[level + 1].grid[x][y] ^= universes[level].grid[x][y];
                }
            }
        }
    }
}

// Визуализация рекурсивной реальности
void renderRecursiveReality() {
    clearScreen();
    
    // Отображаем текущий уровень
    UniverseLevel* u = &universes[currentDepth];
    
    for (uint8_t x = 0; x < GRID_SIZE; x++) {
        for (uint8_t y = 0; y < GRID_SIZE; y++) {
            uint8_t val = u->grid[x][y];
            if (val > 0) {
                uint8_t screenX = x * 4 + 2;
                uint8_t screenY = y * 4 + 2;
                drawPixel(screenX, screenY, val > 100);
            }
        }
    }
    
    // Информация об уровне
    for (uint8_t i = 0; i < currentDepth + 1; i++) {
        drawPixel(i, 60, 1);
    }
    
    updateDisplay();
}

// Переключение между уровнями реальности
void switchRealityLevel() {
    currentDepth = (currentDepth + 1) % UNIVERSE_LEVELS;
    Serial.print("🔮 Переключено на уровень реальности: ");
    Serial.println(currentDepth);
}

void setup() {
    initLEDMatrix();
    Serial.begin(115200);
    randomSeed(analogRead(A0));
    
    initRecursiveUniverses();
    Serial.println("♾️ РЕКУРСИВНАЯ РЕАЛЬНОСТЬ АКТИВИРОВАНА");
    Serial.println("Уровень 0: Базовая реальность");
}

void loop() {
    // Эволюционируем все уровни
    for (uint8_t level = 0; level < UNIVERSE_LEVELS; level++) {
        for (uint8_t step = 0; step < 5; step++) {
            evolveUniverse(level);
        }
    }
    
    // Рекурсивное наблюдение
    recursiveObservation();
    
    // Автоматическое переключение уровней
    static uint32_t lastSwitch = 0;
    if (millis() - lastSwitch > 10000) {
        switchRealityLevel();
        lastSwitch = millis();
    }
    
    // Визуализация
    renderRecursiveReality();
    delay(100);
}

Вам также может понравиться

About the Author: ардуинчиков

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *