Jeu Pong classique revisité avec interface moderne, intelligence artificielle adaptative et mode multijoueur local.
flowchart TB
HTML["index.html<br/>menu · jeu · paramètres"]
CSS["style.css<br/>thème · responsive"]
INPUT["Entrées<br/>clavier · solo ou multi"]
INIT["initGame(mode)<br/>solo vs IA · multijoueur"]
LOOP["gameLoop()<br/>requestAnimationFrame"]
UPDATE["update()<br/>physique balle · score"]
PADDLE["movePaddles · aiLogic<br/>4 niveaux d'IA · prédiction"]
COLLISION["collision()<br/>rebonds raquettes"]
RENDER["render()<br/>canvas 2D"]
HTML --> CSS
HTML --> INPUT
INPUT --> INIT
INIT --> LOOP
LOOP --> UPDATE
UPDATE --> PADDLE
UPDATE --> COLLISION
UPDATE --> RENDER
- 🤖 Solo vs IA : Affrontez une intelligence artificielle avec 4 niveaux de difficulté
- 👥 Multijoueur Local : Jouez à deux sur le même clavier
- Facile : IA lente avec réaction basique
- Moyen : IA équilibrée avec prédiction moyenne
- Difficile : IA rapide avec bonne anticipation
- Impossible : IA parfaite avec prédiction totale
- ⚙️ Difficulté IA : 4 niveaux ajustables
- 🎯 Vitesse de la balle : 3 à 10 (ajustable)
- 🏃 Vitesse des raquettes : 3 à 12 (ajustable)
- 🏆 Score pour gagner : 3 à 21 points
- 🎮 Contrôles fluides : Détection clavier optimisée
- 📊 Système de score : Affichage en temps réel
- ⏸️ Pause : Menu de pause avec options
- 🏆 Écran de victoire : Modal avec score final
- 🎨 Effets visuels : Traînée de balle, animations
- 📱 Responsive : Adaptation mobile et desktop
- HTML5 Canvas : Rendu graphique haute performance
- JavaScript ES6 : Logique de jeu et IA
- CSS3 : Interface moderne avec animations
- RequestAnimationFrame : Boucle de jeu optimisée
git clone https://github.com/Adam-Blf/Pong-Game.git
cd Pong-GameOuvrez simplement 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
- W : Monter
- S : Descendre
- ↑ : Monter
- ↓ : Descendre
- Esc : Pause / Reprendre
- Bouton Pause : Ouvrir le menu pause
- Bouton Quitter : Retour au menu principal
Pong-Game/
│
├── index.html # Structure HTML du jeu
├── style.css # Styles et animations
├── script.js # Logique du jeu et IA
├── README.md # Documentation
└── .gitignore # Fichiers à ignorer
- Interface élégante avec 3 options
- Affichage des contrôles
- Bouton Paramètres
- Canvas 800x600px
- Affichage des scores en temps réel
- Ligne centrale pointillée
- Raquettes colorées (bleu/vert)
- Balle blanche avec effet de traînée
L'IA utilise un algorithme de prédiction adaptatif :
const aiConfig = {
easy: { speed: 0.4, prediction: 0.3, reaction: 0.6 },
medium: { speed: 0.6, prediction: 0.5, reaction: 0.4 },
hard: { speed: 0.8, prediction: 0.7, reaction: 0.2 },
impossible: { speed: 1, prediction: 1, reaction: 0 }
};- Speed : Vitesse de déplacement de la raquette IA
- Prediction : Précision de l'anticipation de la trajectoire
- Reaction : Délai de réaction (plus bas = plus rapide)
- Collision avec raquettes : Angle de rebond basé sur le point d'impact
- Accélération progressive : La balle accélère à chaque toucher (max 15)
- Rebonds muraux : Inversion de la direction verticale
- Reset après point : Direction aléatoire pour chaque nouveau point
- Objectif : Marquer des points en faisant passer la balle derrière la raquette adverse
- Score : Premier à atteindre le score défini (par défaut 11) gagne
- Vitesse : La balle accélère progressivement au fil du jeu
- Rebonds : L'angle de rebond dépend de l'endroit où la balle touche la raquette
function gameLoop() {
update(); // Mise à jour physique et logique
render(); // Rendu graphique
requestAnimationFrame(gameLoop);
}Collision précise entre la balle et les raquettes :
function collision(ball, player) {
return ball.x - ball.radius < paddleX + paddle.width &&
ball.x + ball.radius > paddleX &&
ball.y - ball.radius < player.y + paddle.height &&
ball.y + ball.radius > player.y;
}L'IA prédit la position future de la balle :
const timeToReach = (paddle.player2.x - ball.x) / ball.velocityX;
const targetY = ball.y + ball.velocityY * timeToReach * config.prediction;| Navigateur | Version Minimale |
|---|---|
| Chrome | 90+ |
| Firefox | 88+ |
| Safari | 14+ |
| Edge | 90+ |
| Opera | 76+ |
- Power-ups : Bonus modifiant la taille, vitesse, etc.
- Modes de jeu : Survival, Time Attack
- Effets sonores : Bruitages de collision et score
- Multijoueur en ligne : Via WebRTC ou WebSockets
- Classement : Sauvegarde des meilleurs scores
- Replay : Revoir les parties
- Thèmes visuels : Personnalisation des couleurs
- Obstacles : Murs mobiles dans l'arène
- Utilisation de
requestAnimationFramepour 60 FPS fluides - Canvas rendering optimisé
- Calculs mathématiques pré-calculés
- Canvas adaptatif pour mobile
- Menu overlay pour petits écrans
- Contrôles tactiles (à venir)
- Canvas API et contexte 2D
- RequestAnimationFrame pour animation fluide
- Event Listeners (clavier, boutons)
- Algorithmes de collision
- Intelligence artificielle prédictive
- Vecteurs de vitesse (velocityX, velocityY)
- Rebonds élastiques
- Accélération progressive
- Angle de collision dynamique
Les contributions sont les bienvenues !
- 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 Pong original (1972) d'Atari
- Physique de collision basée sur les principes classiques
- Design moderne inspiré des interfaces actuelles
⭐ N'oubliez pas de mettre une étoile si vous aimez ce projet ! ⭐
Par Adam Beloucif · Data Engineer & Fullstack Developer · GitHub · LinkedIn