Catalogue des Commandes 07/05/2026 20:00:00 angularforall.com

- Jeu Simon Says Bootstrap 5

Code Templates Collection angularforall.com

- Jeu Simon Says Bootstrap 5

Jeu Simon Says Javascript Bootstrap 5 Concentration Jeu Memoire Interactif Sequences Html Css Js Gaming Snippet Addictif

Jeu Simon Says interactif Bootstrap 5 avec séquences lumineuses et sonores. Mémorisez et reproduisez la séquence pour progresser dans ce jeu addictif et fun.

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8" />
    <meta name="copyright" content="AngularForAll" />
    <meta name="author" content="AngularForAll" />
    <meta name="robots" content="noindex, nofollow" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Cache-Control" content="public, max-age=604800" />
    <title>Snippet Game Simon Says Bootstrap5 2026 05050005 | AngularForAll</title>
<!-- Bootstrap 5 -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
    
    <style>
        body {
            background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
            min-height: 100vh;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
        
        .game-container {
            background: rgba(255,255,255,0.95);
            border-radius: 30px;
            padding: 30px;
            box-shadow: 0 20px 40px rgba(0,0,0,0.3);
        }
        
        .simon-board {
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 20px;
            max-width: 400px;
            margin: 0 auto;
            padding: 20px;
            background: #2c3e50;
            border-radius: 50%;
            box-shadow: 0 10px 30px rgba(0,0,0,0.3);
        }
        
        .simon-btn {
            aspect-ratio: 1 / 1;
            border: none;
            border-radius: 20px;
            cursor: pointer;
            transition: all 0.1s ease;
            opacity: 0.8;
            box-shadow: 0 5px 15px rgba(0,0,0,0.2);
        }
        
        .simon-btn:active {
            transform: scale(0.95);
        }
        
        .simon-btn.active {
            opacity: 1;
            transform: scale(0.98);
            box-shadow: 0 0 20px rgba(255,255,255,0.5);
        }
        
        .btn-rouge { background: #ff4444; }
        .btn-vert { background: #44ff44; }
        .btn-bleu { background: #4444ff; }
        .btn-jaune { background: #ffff44; }
        
        .btn-rouge.active { background: #ff8888; box-shadow: 0 0 20px #ff4444; }
        .btn-vert.active { background: #88ff88; box-shadow: 0 0 20px #44ff44; }
        .btn-bleu.active { background: #8888ff; box-shadow: 0 0 20px #4444ff; }
        .btn-jaune.active { background: #ffff88; box-shadow: 0 0 20px #ffff44; }
        
        .disabled-btn {
            pointer-events: none;
            opacity: 0.5;
        }
        
        .score-card {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            border-radius: 20px;
            padding: 15px;
            color: white;
            text-align: center;
        }
        
        .level-badge {
            background: #ffd700;
            color: #333;
            border-radius: 50px;
            padding: 10px 20px;
            font-weight: bold;
            font-size: 20px;
        }
        
        @keyframes pulse-animation {
            0%, 100% { transform: scale(1); }
            50% { transform: scale(1.05); }
        }
        
        .pulse {
            animation: pulse-animation 0.3s ease-in-out;
        }
        
        @keyframes wrong-animation {
            0%, 100% { background-color: #ff4444; }
            50% { background-color: #ffffff; }
        }
        
        .wrong-flash {
            animation: wrong-animation 0.3s ease-in-out;
        }
        
        .instruction {
            background: #f0f0f0;
            border-radius: 15px;
            padding: 15px;
            text-align: center;
        }
        
        .btn-play {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            border: none;
            padding: 12px 30px;
            font-weight: bold;
            color: white;
            transition: all 0.3s ease;
        }
        
        .btn-play:hover {
            transform: scale(1.05);
            box-shadow: 0 5px 15px rgba(0,0,0,0.2);
        }
        
        .sequence-indicator {
            font-size: 14px;
            font-family: monospace;
            letter-spacing: 5px;
        }
    </style>
</head>
<body>
    <div class="container py-4">
        <div class="row justify-content-center">
            <div class="col-md-8 col-lg-7">
                
                <!-- Titre -->
                <div class="text-center mb-4">
                    <h1 class="text-white display-5 fw-bold">
                        <i class="bi bi-brain"></i> Simon Says
                    </h1>
                    <p class="text-white-50">Mémorise et reproduis la séquence !</p>
                </div>
                
                <!-- Zone de jeu -->
                <div class="game-container">
                    
                    <!-- Score et niveau -->
                    <div class="row g-3 mb-4">
                        <div class="col-6">
                            <div class="score-card">
                                <i class="bi bi-trophy fs-3"></i>
                                <h2 class="mb-0" id="score">0</h2>
                                <small>Score</small>
                            </div>
                        </div>
                        <div class="col-6">
                            <div class="score-card" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);">
                                <i class="bi bi-star fs-3"></i>
                                <h2 class="mb-0" id="bestScore">0</h2>
                                <small>Record</small>
                            </div>
                        </div>
                    </div>
                    
                    <!-- Niveau actuel -->
                    <div class="text-center mb-4">
                        <div class="level-badge d-inline-block">
                            <i class="bi bi-arrow-up-circle"></i> Niveau <span id="level">1</span>
                        </div>
                    </div>
                    
                    <!-- Boutons Simon -->
                    <div class="simon-board">
                        <button id="rouge" class="simon-btn btn-rouge" data-sound="rouge"></button>
                        <button id="vert" class="simon-btn btn-vert" data-sound="vert"></button>
                        <button id="bleu" class="simon-btn btn-bleu" data-sound="bleu"></button>
                        <button id="jaune" class="simon-btn btn-jaune" data-sound="jaune"></button>
                    </div>
                    
                    <!-- Séquence à mémoriser -->
                    <div class="instruction mt-4">
                        <i class="bi bi-eye"></i>
                        <strong>Regarde la séquence :</strong>
                        <div id="sequenceDisplay" class="sequence-indicator mt-2">⚫ ⚫ ⚫ ⚫</div>
                    </div>
                    
                    <!-- Contrôles -->
                    <div class="text-center mt-4">
                        <button id="startBtn" class="btn-play">
                            <i class="bi bi-play-fill"></i> Démarrer le jeu
                        </button>
                        <button id="resetBtn" class="btn-play ms-2" style="background: linear-gradient(135deg, #ff6b6b 0%, #ee5a24 100%);">
                            <i class="bi bi-arrow-repeat"></i> Réinitialiser
                        </button>
                    </div>
                    
                    <!-- Statistiques de concentration -->
                    <div class="row mt-4 g-2 text-center">
                        <div class="col-4">
                            <div class="border rounded p-2 bg-light">
                                <i class="bi bi-check-circle text-success"></i>
                                <h5 id="successCount">0</h5>
                                <small>Réussites</small>
                            </div>
                        </div>
                        <div class="col-4">
                            <div class="border rounded p-2 bg-light">
                                <i class="bi bi-emoji-smile"></i>
                                <h5 id="sequenceLength">0</h5>
                                <small>Séquence</small>
                            </div>
                        </div>
                        <div class="col-4">
                            <div class="border rounded p-2 bg-light">
                                <i class="bi bi-lightbulb"></i>
                                <h5 id="concentration">100</h5>
                                <small>Concentration %</small>
                            </div>
                        </div>
                    </div>
                </div>
                
                <!-- Conseils pour la concentration -->
                <div class="alert alert-info mt-4">
                    <i class="bi bi-info-circle"></i>
                    <strong>Conseils de concentration :</strong>
                    <ul class="mb-0 mt-2">
                        <li>🧘 Respire profondément avant de commencer</li>
                        <li>👀 Regarde attentivement chaque couleur</li>
                        <li>🧠 Répète mentalement la séquence</li>
                        <li>🎯 Ne te précipite pas, prends ton temps</li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
    
    <script>
        // Variables du jeu
        let sequence = [];
        let playerSequence = [];
        let level = 1;
        let score = 0;
        let bestScore = localStorage.getItem('simonBestScore') || 0;
        let successCount = 0;
        let isPlaying = false;
        let isPlayerTurn = false;
        let concentration = 100;
        
        // Sons (utilisation d'oscillateurs pour les notes)
        const sounds = {
            rouge: { frequency: 261.63, note: 'Do' },   // Do
            vert: { frequency: 329.63, note: 'Mi' },    // Mi
            bleu: { frequency: 392.00, note: 'Sol' },   // Sol
            jaune: { frequency: 523.25, note: 'Do' }    // Do aigu
        };
        
        // Éléments HTML
        const rougeBtn = document.getElementById('rouge');
        const vertBtn = document.getElementById('vert');
        const bleuBtn = document.getElementById('bleu');
        const jauneBtn = document.getElementById('jaune');
        const startBtn = document.getElementById('startBtn');
        const resetBtn = document.getElementById('resetBtn');
        const scoreElement = document.getElementById('score');
        const bestScoreElement = document.getElementById('bestScore');
        const levelElement = document.getElementById('level');
        const successCountElement = document.getElementById('successCount');
        const sequenceLengthElement = document.getElementById('sequenceLength');
        const concentrationElement = document.getElementById('concentration');
        const sequenceDisplay = document.getElementById('sequenceDisplay');
        
        // Afficher le meilleur score
        bestScoreElement.textContent = bestScore;
        
        // Jouer un son
        function playSound(color, duration = 300) {
            try {
                const audioContext = new (window.AudioContext || window.webkitAudioContext)();
                const oscillator = audioContext.createOscillator();
                const gainNode = audioContext.createGain();
                
                oscillator.connect(gainNode);
                gainNode.connect(audioContext.destination);
                
                oscillator.frequency.value = sounds[color].frequency;
                oscillator.type = 'sine';
                
                gainNode.gain.value = 0.3;
                
                oscillator.start();
                
                setTimeout(() => {
                    oscillator.stop();
                    audioContext.close();
                }, duration);
            } catch (e) {
                console.log('Son non disponible');
            }
        }
        
        // Animer un bouton
        function animateButton(buttonId) {
            const button = document.getElementById(buttonId);
            button.classList.add('active');
            setTimeout(() => {
                button.classList.remove('active');
            }, 300);
        }
        
        // Jouer la séquence
        async function playSequence() {
            isPlayerTurn = false;
            const buttons = ['rouge', 'vert', 'bleu', 'jaune'];
            
            for (let i = 0; i < sequence.length; i++) {
                await new Promise(resolve => {
                    setTimeout(() => {
                        const color = sequence[i];
                        animateButton(color);
                        playSound(color);
                        resolve();
                    }, i * 600);
                });
            }
            
            // Mettre à jour l'affichage de la séquence
            const sequenceSymbols = sequence.map(color => {
                switch(color) {
                    case 'rouge': return '🔴';
                    case 'vert': return '🟢';
                    case 'bleu': return '🔵';
                    case 'jaune': return '🟡';
                    default: return '⚫';
                }
            });
            sequenceDisplay.innerHTML = sequenceSymbols.join(' ') || '⚫ ⚫ ⚫ ⚫';
            
            setTimeout(() => {
                isPlayerTurn = true;
                playerSequence = [];
                sequenceLengthElement.textContent = sequence.length;
            }, 500);
        }
        
        // Ajouter une nouvelle couleur à la séquence
        function addToSequence() {
            const colors = ['rouge', 'vert', 'bleu', 'jaune'];
            const randomColor = colors[Math.floor(Math.random() * colors.length)];
            sequence.push(randomColor);
        }
        
        // Vérifier la réponse du joueur
        function checkPlayerMove(color) {
            if (!isPlayerTurn || !isPlaying) return;
            
            // Animation et son
            animateButton(color);
            playSound(color, 200);
            
            // Ajouter à la séquence du joueur
            playerSequence.push(color);
            
            // Vérifier si la couleur est correcte
            const currentIndex = playerSequence.length - 1;
            if (playerSequence[currentIndex] !== sequence[currentIndex]) {
                // Erreur
                gameOver();
                return;
            }
            
            // Vérifier si le joueur a fini la séquence
            if (playerSequence.length === sequence.length) {
                // Succès !
                success();
            }
        }
        
        // Succès - passer au niveau suivant
        function success() {
            isPlayerTurn = false;
            successCount++;
            score += sequence.length * 10;
            level++;
            concentration = Math.min(100, concentration + 5);
            
            // Mettre à jour l'affichage
            scoreElement.textContent = score;
            levelElement.textContent = level;
            successCountElement.textContent = successCount;
            concentrationElement.textContent = concentration;
            
            // Mettre à jour le meilleur score
            if (score > bestScore) {
                bestScore = score;
                bestScoreElement.textContent = bestScore;
                localStorage.setItem('simonBestScore', bestScore);
            }
            
            // Ajouter une nouvelle couleur
            addToSequence();
            
            // Jouer la nouvelle séquence
            setTimeout(() => {
                playSequence();
            }, 1000);
        }
        
        // Game Over
        function gameOver() {
            isPlaying = false;
            isPlayerTurn = false;
            concentration = Math.max(0, concentration - 20);
            concentrationElement.textContent = concentration;
            
            // Animation d'erreur
            document.body.classList.add('wrong-flash');
            setTimeout(() => {
                document.body.classList.remove('wrong-flash');
            }, 300);
            
            // Désactiver les boutons
            const buttons = [rougeBtn, vertBtn, bleuBtn, jauneBtn];
            buttons.forEach(btn => {
                btn.style.opacity = '0.5';
                btn.disabled = true;
            });
            
            // Afficher message
            setTimeout(() => {
                alert(`💀 Game Over ! 💀\n\nScore : ${score}\nNiveau atteint : ${level}\nSéquence réussie : ${successCount}\nConcentration : ${concentration}%\n\nClique sur "Démarrer" pour rejouer !`);
            }, 100);
        }
        
        // Démarrer le jeu
        function startGame() {
            // Réinitialiser toutes les variables
            sequence = [];
            playerSequence = [];
            level = 1;
            score = 0;
            successCount = 0;
            concentration = 100;
            isPlaying = true;
            
            // Mettre à jour l'affichage
            scoreElement.textContent = score;
            levelElement.textContent = level;
            successCountElement.textContent = successCount;
            concentrationElement.textContent = concentration;
            sequenceDisplay.innerHTML = '⚫ ⚫ ⚫ ⚫';
            sequenceLengthElement.textContent = '0';
            
            // Activer les boutons
            const buttons = [rougeBtn, vertBtn, bleuBtn, jauneBtn];
            buttons.forEach(btn => {
                btn.style.opacity = '1';
                btn.disabled = false;
            });
            
            // Première couleur
            addToSequence();
            
            // Jouer la séquence
            setTimeout(() => {
                playSequence();
            }, 500);
        }
        
        // Réinitialiser complètement
        function resetGame() {
            if (isPlaying) {
                isPlaying = false;
                isPlayerTurn = false;
            }
            
            sequence = [];
            playerSequence = [];
            level = 1;
            score = 0;
            successCount = 0;
            concentration = 100;
            
            scoreElement.textContent = score;
            levelElement.textContent = level;
            successCountElement.textContent = successCount;
            concentrationElement.textContent = concentration;
            sequenceDisplay.innerHTML = '⚫ ⚫ ⚫ ⚫';
            sequenceLengthElement.textContent = '0';
            
            const buttons = [rougeBtn, vertBtn, bleuBtn, jauneBtn];
            buttons.forEach(btn => {
                btn.style.opacity = '0.5';
                btn.disabled = true;
            });
        }
        
        // Écouteurs d'événements
        rougeBtn.addEventListener('click', () => checkPlayerMove('rouge'));
        vertBtn.addEventListener('click', () => checkPlayerMove('vert'));
        bleuBtn.addEventListener('click', () => checkPlayerMove('bleu'));
        jauneBtn.addEventListener('click', () => checkPlayerMove('jaune'));
        
        startBtn.addEventListener('click', startGame);
        resetBtn.addEventListener('click', resetGame);
        
        // Désactiver les boutons au départ
        resetGame();
        
        // Message de bienvenue
        setTimeout(() => {
            alert('🧠 Simon Says - Jeu de Concentration !\n\nComment jouer :\n1. Mémorise la séquence de couleurs\n2. Répète-la dans le même ordre\n3. Chaque niveau ajoute une couleur\n4. Concentre-toi et bat ton record !');
        }, 500);
    </script>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Télécharger le fichier source

Partager