Jeu Snake classique revisité avec système de niveaux, obstacles dynamiques, classement et paramètres personnalisables.
- 🐍 Serpent fluide avec animations et yeux directionnels
- 🍎 Nourriture : Collectez pour grandir et marquer des points
- 📈 Système de niveaux : Progression avec augmentation de vitesse
- 🧱 Obstacles dynamiques : Apparition aléatoire aux niveaux élevés
- 🏆 Système de score : Points multipliés par le niveau
- ⚙️ 4 Niveaux de difficulté :
- 🟢 Facile (lent)
- 🟡 Moyen (normal)
- 🔴 Difficile (rapide)
- 💀 Extrême (très rapide)
- 🎯 3 Tailles de grille : 15x15, 20x20, 25x25
- 🧱 Murs activables : Game Over ou traversée (wrap-around)
- 🔊 Effets sonores : Activables/désactivables
- 🏆 Classement : Top 10 des meilleurs scores sauvegardés
- 💾 Sauvegarde locale : LocalStorage pour scores et préférences
- ⏸️ Pause : Menu de pause avec statistiques
- 🎮 Contrôles doubles : Flèches ou WASD
- 📱 Responsive : Adaptation mobile et desktop
- 🎨 Animations : Dégradés, wiggle du titre, effets visuels
- HTML5 Canvas : Rendu graphique optimisé
- JavaScript ES6 : Logique de jeu complète
- CSS3 : Interface moderne avec animations
- LocalStorage API : Persistance des données
- Web Audio API : Effets sonores procéduraux
git clone https://github.com/Adam-Blf/Snake-Game.git
cd Snake-GameOuvrez index.html dans votre navigateur :
# Windows
start index.html
# macOS
open index.html
# Linux
xdg-open index.htmlOu avec un serveur local :
# Python 3
python -m http.server 8000
# Node.js
npx http-serverPuis ouvrez http://localhost:8000
- Flèches ↑ ↓ ← → : Diriger le serpent
- W A S D : Alternative pour diriger
- Espace : Pause / Reprendre
- R : Recommencer
- Boutons interface : Navigation complète
Snake-Game/
│
├── index.html # Structure HTML du jeu
├── style.css # Styles et animations CSS
├── script.js # Logique du jeu
├── README.md # Documentation
└── .gitignore # Fichiers à ignorer
- Canvas 600x600px adaptatif
- Grille visible avec lignes subtiles
- Tailles configurables (15, 20, 25 cases)
- Tête avec yeux qui suivent la direction
- Corps avec dégradé de transparence
- Collision avec soi-même détectée
- Croissance à chaque nourriture
Points = 10 × Niveau actuel
Exemple :
- Niveau 1 : 10 points par nourriture
- Niveau 5 : 50 points par nourriture
- Niveau up : Tous les 5 nourritures (50 points)
- Vitesse : Augmente de 10ms par niveau (minimum 40ms)
- Obstacles : Apparaissent aléatoirement (30% de chance) à partir du niveau 3
- Objectif : Manger la nourriture (pomme rouge) pour grandir
- Game Over :
- Collision avec les murs (si activés)
- Collision avec son propre corps
- Collision avec un obstacle
- Niveaux : Progression automatique tous les 50 points
- Obstacles : Blocs gris qui apparaissent aux niveaux élevés
setInterval(() => {
update(); // Logique de jeu
render(); // Rendu graphique
}, gameSpeed);| Difficulté | Intervalle (ms) | FPS |
|---|---|---|
| Facile | 150 | ~6.7 |
| Moyen | 100 | 10 |
| Difficile | 60 | ~16.7 |
| Extrême | 40 | 25 |
Algorithme garantissant une position valide :
while (!validPosition) {
food.x = Math.floor(Math.random() * gridSize);
food.y = Math.floor(Math.random() * gridSize);
// Vérifier que la position n'est pas sur le serpent ou obstacle
validPosition = !collisionWithSnake && !collisionWithObstacles;
}// Empêche le serpent de faire demi-tour instantané
if (newDirection.x === -currentDirection.x &&
newDirection.y === -currentDirection.y) {
return; // Direction invalide
}Chaque partie est enregistrée avec :
- Score : Points totaux
- Niveau : Niveau atteint
- Longueur : Taille finale du serpent
- Difficulté : Mode de jeu
- Date : Date de la partie
Top 10 des meilleurs scores avec médailles :
- 🥇 1ère place
- 🥈 2ème place
- 🥉 3ème place
- Positions 4-10
localStorage.setItem('snakeLeaderboard', JSON.stringify(leaderboard));
localStorage.setItem('snakeHighScore', highScore);Sons procéduraux générés avec Web Audio API :
- Manger : Son court à 400 Hz (0.1s)
- Level Up : Son moyen à 600 Hz (0.3s)
- Game Over : Son grave à 200 Hz (0.5s)
Tous les sons sont désactivables dans les paramètres.
| Navigateur | Version Minimale |
|---|---|
| Chrome | 90+ |
| Firefox | 88+ |
| Safari | 14+ |
| Edge | 90+ |
| Opera | 76+ |
- Power-ups : Vitesse, invincibilité, raccourcissement
- Thèmes visuels : Différents styles graphiques
- Mode multijoueur : 2 serpents sur la même grille
- Obstacles prédéfinis : Niveaux avec patterns
- Mode infini : Sans augmentation de vitesse
- Statistiques détaillées : Temps de jeu, meilleures séries
- Contrôles tactiles : Support mobile complet
- Replay : Revoir les meilleures parties
- Canvas rendering optimisé
- Collision detection en O(n)
- Pas de re-render inutiles
- Intervalles plutôt que RAF pour contrôle précis de la vitesse
- Canvas adaptatif
- Interface modulaire
- Menus overlay
- Separation of concerns (rendering, logic, UI)
- Event-driven architecture
- LocalStorage pour persistance
- Canvas 2D API (fillRect, arc, gradients)
- setInterval pour game loop
- Event listeners (keyboard, clicks)
- LocalStorage API
- Web Audio API
- Array methods (some, forEach, push, pop)
- Détection de collision
- Placement aléatoire valide
- Queue (snake body management)
- Grid-based movement
- State management
- Configuration objects
- Modular functions
Contributions bienvenues ! Pour contribuer :
- Fork le projet
- Créez une branche (
git checkout -b feature/NewFeature) - Committez (
git commit -m 'Add NewFeature') - Push (
git push origin feature/NewFeature) - Ouvrez une Pull Request
Projet open source - libre d'utilisation pour projets personnels ou éducatifs.
Adam Beloucif
- GitHub: @Adam-Blf
- Portfolio: Voir mes projets
- Inspiré du jeu Snake original (Nokia, 1997)
- Design moderne basé sur Material Design
- Algorithmes de collision classiques
⭐ Mettez une étoile si vous aimez ce projet ! ⭐
Par Adam Beloucif · Data Engineer & Fullstack Developer · GitHub · LinkedIn