# Fluffles Simulator ![Fluffles Simulator](./screenshot.png) ## Overview Fluffles Simulator is an evolutionary simulation that models a population of small creatures called "Fluffles" in a dynamic ecosystem. The simulation demonstrates natural selection, genetic inheritance, and emergent behaviors as Fluffles compete for resources, reproduce, and adapt to their environment. ## Features - **Genetic Evolution**: Fluffles inherit traits from their parents with slight mutations, allowing populations to evolve over time. - **Complex Behaviors**: Fluffles make decisions based on their needs, genetic traits, and environmental conditions. - **Life Cycle**: Fluffles are born, mature, reproduce, and eventually die of old age or other causes. - **Predation**: Hungry or aggressive Fluffles may attack others to survive. - **Environmental Challenges**: Natural disasters like earthquakes, droughts, disease, and cold snaps create evolutionary pressure. - **Terrain Variety**: The world contains grass (food), water, and rocks, each affecting movement and survival. - **Population Dynamics**: Overcrowding creates pressure that affects reproduction and resource availability. ## Genetic Traits Fluffles have various genetic traits that influence their behavior and survival: - **Size**: Affects energy consumption and appearance - **Speed**: Determines movement efficiency and hunting/escape success - **Metabolism**: Controls energy usage and hunger rate - **Intelligence**: Affects decision-making quality - **Aggression**: Influences tendency to attack other Fluffles - **Friendship**: Counteracts aggression and promotes social behavior - **Social Behavior**: Determines desire to be near other Fluffles - **Reproductive Urge**: Affects frequency of mating attempts - **Lifespan**: Determines maximum age - **Maturity Age**: Sets when a Fluffles can reproduce - **Fur Color**: Visual trait with no survival impact ## Controls - **Left/Right Arrows**: Select previous/next animal - **H**: Toggle help screen - **+/-**: Increase/decrease simulation speed - **Q** or **Esc**: Quit the simulation - **P**: Pause/Unpause the simulation ## Visual Indicators - **F, f**: Adult Fluffles (different sizes) - **•**: Baby Fluffles (not mature yet) - **♥**: Fluffles that are mating - **♣, ♠, ·**: Grass (different densities) - **≈**: Water - **▲**: Rocks/Mountains ## Life Cycle 1. Fluffles are born as babies (•) 2. They mature around age 25 (varies by genetics) 3. They can mate only when mature (takes 4 turns) 4. Their lifespan is around 100 (varies by genetics) 5. Population pressure affects reproduction success ## Technical Details The simulation is built with TypeScript and uses the Blessed library for terminal-based UI. It implements: - A genetic system with inheritance and mutation - A tile-based world with different terrain types - A decision-making system based on needs and traits - Environmental challenges and disasters - Detailed logging and statistics **NOTE:** This has been coded using Claude 3.7 Sonnet as a guide and is a fun project to play around with. Don't take it too seriously. ## Running the Simulation To run the simulation: 1. Make sure you have Node.js and Bun installed 2. Clone the repository 3. Run `bun install` to install dependencies 4. Run `bun start` to start the simulation Logs are saved to the `logs` directory for later analysis. ## Development The codebase is organized into several key components: - **Animal**: Base class for all creatures - **Fluffles**: Implementation of the specific animal type - **DNA**: Handles genetic traits, inheritance and mutation - **World**: Manages the terrain, resources, and population - **Simulation**: Controls the overall simulation flow - **Renderer**: Handles the terminal-based UI - **Logger**: Records events for analysis ## License This project is licensed under the MIT License. See the LICENSE file for details.