No description
- Rust 86.3%
- CSS 13.7%
| public/assets | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| Dioxus.toml | ||
| README.md | ||
🎮 Game of Life - Rust + Dioxus
Un jeu de la vie élégant et performant écrit en Rust avec l'interface Dioxus pour desktop.
✨ Fonctionnalités
🎛️ Panneau de contrôle (barre latérale droite)
- ▶️ Contrôles : Play/Pause, Step, Clear, Reset, Random
- 📐 Taille de la grille : 50×50, 100×100, 200×200, 500×500, 1000×1000 (triées alphabétiquement)
- ⚡ Vitesse : Slider pour contrôler les générations par seconde (1-60 gen/s)
- 📜 Règles : Conway's Life, HighLife, Day & Night, Seeds, Diamoeba, Anneal, Morley, Life without Death
- 🔄 Type de grille : Standard (bords fixes) ou Toroïdale (wrap-around)
- 🎨 Thèmes de couleurs : 6 presets (Néon, Classique, Feu, Océan, Rose, Matrix) avec option de dégradé
- 🔷 Patterns prédéfinis : 18 patterns classiques (Glider, LWSS, Pulsar, Gosper Gun, etc.)
- 📊 Statistiques : FPS, Génération, Population, Densité
🎨 Caractéristiques visuelles
- Interface moderne avec thème sombre
- Grille avec couleurs personnalisables et dégradés
- Affichage des statistiques en temps réel
- Zoom et pan supportés
- Rendu SVG performant
⚡ Performance
- Stockage bit-packed des cellules (8 cellules par octet)
- Algorithme sparse pour n'évaluer que les cellules actives et leurs voisins
- Support des grilles jusqu'à 1000×1000 cellules
- Optimisé pour le rendu 60 FPS
🚀 Lancement
Prérequis
- Rust 1.85 ou plus récent
- Dioxus CLI (optionnel)
Compilation et exécution
# Compilation en mode release (optimisé)
cargo build --release
# Exécution
./target/release/life-game
Développement
# Compilation rapide pour le développement
cargo build
# Exécution en mode debug
cargo run
🏗️ Architecture
src/
├── components/ # Composants Dioxus
│ ├── app.rs # Composant principal
│ ├── sidebar.rs # Barre latérale de réglages
│ ├── game_canvas.rs # Rendu du jeu
│ └── stats.rs # Overlay des statistiques
├── game/ # Logique du jeu
│ ├── grid.rs # Grille et algorithmes
│ ├── patterns.rs # Patterns prédéfinis
│ ├── rules.rs # Règles du jeu
│ └── state.rs # État global
├── utils/ # Utilitaires
│ ├── canvas.rs # Rendu canvas
│ └── timing.rs # Timer et FPS
└── main.rs # Point d'entrée
🎯 Algorithmes utilisés
Stockage des cellules
- Bit-packing : 8 cellules par octet pour économiser la mémoire
- Set sparse : HashSet pour itérer uniquement sur les cellules vivantes
Mise à jour de la grille
- Algorithme sparse : Ne calcule que les voisins des cellules vivantes
- Early exit : Arrêt du comptage si plus de 3 voisins trouvés
Complexité
- Espace : O(n) où n est le nombre de cellules vivantes
- Temps : O(m) où m est le nombre de cellules à évaluer (généralement << n)
🎨 Règles disponibles
| Règle | Notation B/S | Description |
|---|---|---|
| Conway's Life | B3/S23 | Le classique |
| HighLife | B36/S23 | Permet la réplication |
| Day & Night | B3678/S34678 | Symétrique on/off |
| Seeds | B2/S | Croissance explosive |
| Diamoeba | B35678/S5678 | Formes amiboïdes |
| Anneal | B4678/S35678 | Also called Majority |
| Morley | B368/S245 | Support des vaisseaux |
| Life without Death | B3/S012345678 | Croissance infinie |
🔷 Patterns inclus
Vaisseaux (Spaceships)
- Glider (c/4 diagonal)
- LWSS (Lightweight Spaceship)
- MWSS (Middleweight Spaceship)
- HWSS (Heavyweight Spaceship)
Oscillateurs
- Blinker (période 2)
- Toad (période 2)
- Beacon (période 2)
- Pulsar (période 3)
- Pentadecathlon (période 15)
Vie stable (Still Lifes)
- Block
- Beehive
- Loaf
- Boat
- Tub
Canons (Guns)
- Gosper Glider Gun (période 30)
Méthuselahs
- R-pentomino (1103 générations)
- Diehard (disparaît après 130 générations)
- Acorn (5206 générations)
- Gliders by the Dozen (12 planeurs)
🛠️ Technologies
- Rust 2024 - Langage de programmation
- Dioxus 0.7.3 - Framework UI déclaratif
- Tokio - Runtime async
- Serde - Sérialisation
📄 Licence
Ce projet est sous licence MIT.
Créé avec ❤️ en Rust