Evolution Simulator
Simulador de Seleção Natural (MonoGame / C#)
Visualização estrutural de ruído coerente, base para a geração dos biomas no simulador.
Este projeto é um laboratório virtual construído nativamente em MonoGame. Diferente de usar uma engine comercial, aqui a fundação técnica — das lógicas de física ao loop de atualização — foi escrita em C#. É um ambiente computacional onde entidades interagem e evoluem em um mundo estruturado dinamicamente.
⚙️ Arquitetura & Implementação
1. Otimização O(1) com Tabelas Hash (Spatial Hashing)
O maior desafio de um simulador 2D com centenas de entidades é a detecção de colisão e proximidade. Fazer cada entidade checar a posição de todas as outras gera uma complexidade O(N²), o que afeta severamente o processamento. Para resolver isso, implementei um sistema de Spatial Hashing.
Dividi o espaço em um grid virtual. Cada entidade, ao se mover, atualiza sua posição em uma Dictionary<int, List<Entity>> (Tabela Hash), onde a chave é o ID da célula do grid. Assim, quando uma entidade precisa analisar seus arredores, ela só processa as demais cadastradas na mesma célula que ela ou nas células vizinhas imediatas. Isso transformou buscas massivas em consultas localizadas de tempo quase constante O(1).
2. Geração Procedural Orgânica com Perlin Noise
As matrizes do mapa são geradas utilizando o algoritmo de Perlin Noise bidimensional. Apliquei múltiplas camadas de ruído (oitavas) combinando diferentes frequências e amplitudes para esculpir a topologia de forma orgânica.
Uma camada define a estrutura base, enquanto outras camadas sobrepostas ditam zonas de influência do ambiente. Cruzando esses dados em tempo de execução, o sistema determina as divisões estruturais do espaço com precisão lógica, garantindo que a geração faça sentido sem intervenção manual.
3. Algoritmos Genéticos e IA Adaptativa
As entidades do simulador são governadas por redes neurais simples e algoritmos genéticos fundamentais. Suas decisões de navegação reagem diretamente às variáveis geradas pelo mapa. As entidades que conseguem se adaptar melhor ao ambiente e sobreviver aos ciclos repassam seus traços dominantes de adaptação para a próxima geração, com leves taxas de mutação. A simulação demonstra a seleção natural ao longo do tempo através da otimização desses genomas matemáticos, dispensando comportamentos pré-programados estaticamente.
4. Arquitetura de Game Loop Nível Engine
O desenvolvimento em framework (MonoGame) exigiu o desenho do próprio ciclo de vida da aplicação. Estruturei a separação estrita entre o pipeline de atualização lógica (Update) e a renderização (Draw). O uso de DeltaTime em todas as equações de movimento garante que a simulação corra de forma consistente, independente da capacidade de processamento da máquina executando o código.