Cas d'utilisation

/

Développement de projets Hobby

Créez des jeux et des applications en toute simplicité, aucune connaissance approfondie de la programmation n'est requise

modèle

Agent ninja

Donnez-moi des instructions étape par étape et un code JavaScript complet pour créer un jeu de cartes à mémoire compatible avec un navigateur. Aucune expérience préalable en tant que développeur de jeu n'est requise.

Essayez Query
Agent ninja
/
codeur

Rapport de recherche sur le développement du jeu de cartes Memory Match

Résumé

Ce rapport fournit des instructions complètes et du code pour créer un jeu de cartes mémoire basé sur un navigateur, conçu pour les développeurs n'ayant aucune expérience préalable en matière de développement de jeux. L'implémentation utilise HTML, CSS et JavaScript pour créer un jeu de correspondance interactif dans lequel les joueurs retournent des cartes pour trouver des paires.

Méthodologie de recherche

Une analyse a été menée sur la conversation fournie, qui comprenait :

  • Examen initial de la mise en œuvre du code
  • Identification des problèmes de code et des améliorations nécessaires
  • Élaboration d'instructions détaillées étape par étape

Exigences techniques

Prérequis

  1. Compréhension de base du HTML, du CSS et du JavaScript
  2. Éditeur de code (Visual Studio Code, Sublime Text ou similaire)
  3. Navigateur Web

Structure du projet

Le jeu nécessite trois fichiers principaux :

  • index.html
  • style.css
  • script.js

Guide de mise en œuvre

1. Implémentation HTML

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>Memory Match Game</title>
7    <link rel="stylesheet" href="style.css">
8</head>
9<body>
10    <div class="game-container">
11        <div class="game-info">
12            <div class="moves">Moves: <span id="moves-count">0</span></div>
13            <button id="restart">Restart Game</button>
14        </div>
15        <div id="game-board"></div>
16    </div>
17    <script src="script.js"></script>
18</body>
19</html>

2. Implémentation CSS

1.game-container {
2    max-width: 800px;
3    margin: 0 auto;
4    padding: 20px;
5}
6
7#game-board {
8    display: grid;
9    grid-template-columns: repeat(4, 1fr);
10    gap: 10px;
11    margin-top: 20px;
12}
13
14.card {
15    aspect-ratio: 1;
16    position: relative;
17    transform-style: preserve-3d;
18    transition: transform 0.5s;
19    cursor: pointer;
20}
21
22.card.flipped {
23    transform: rotateY(180deg);
24}
25
26.card-front, .card-back {
27    position: absolute;
28    width: 100%;
29    height: 100%;
30    backface-visibility: hidden;
31    border-radius: 8px;
32    display: flex;
33    align-items: center;
34    justify-content: center;
35}
36
37.card-front {
38    background-color: #2196F3;
39    transform: rotateY(180deg);
40}
41
42.card-back {
43    background-color: #E0E0E0;
44}
45
46.card.matched {
47    transform: rotateY(180deg);
48    pointer-events: none;
49}

3. Mise en œuvre de JavaScript

1document.addEventListener('DOMContentLoaded', () => {
2    const gameBoard = document.getElementById('game-board');
3    const movesDisplay = document.getElementById('moves-count');
4    const restartButton = document.getElementById('restart');
5    
6    const symbols = ['🐶', '🐱', '🐭', '🐹', '🐰', '🦊', '🐻', '🐼'];
7    let cards = [...symbols, ...symbols];
8    let flippedCards = [];
9    let matchedPairs = 0;
10    let moves = 0;
11    let isProcessing = false;
12
13    function shuffle(array) {
14        for (let i = array.length - 1; i > 0; i--) {
15            const j = Math.floor(Math.random() * (i + 1));
16            [array[i], array[j]] = [array[j], array[i]];
17        }
18        return array;
19    }
20
21    function createCard(symbol) {
22        const card = document.createElement('div');
23        card.className = 'card';
24        card.innerHTML = `
25            <div class="card-front">${symbol}</div>
26            <div class="card-back"></div>
27        `;
28        card.dataset.symbol = symbol;
29        card.addEventListener('click', flipCard);
30        return card;
31    }
32
33    function flipCard() {
34        if (isProcessing || 
35            this.classList.contains('flipped') || 
36            flippedCards.length === 2) return;
37
38        this.classList.add('flipped');
39        flippedCards.push(this);
40
41        if (flippedCards.length === 2) {
42            isProcessing = true;
43            moves++;
44            movesDisplay.textContent = moves;
45            checkForMatch();
46        }
47    }
48
49    function checkForMatch() {
50        const [card1, card2] = flippedCards;
51        const match = card1.dataset.symbol === card2.dataset.symbol;
52
53        if (match) {
54            card1.classList.add('matched');
55            card2.classList.add('matched');
56            matchedPairs++;
57            if (matchedPairs === symbols.length) {
58                setTimeout(() => alert(`Congratulations! You won in ${moves} moves!`), 500);
59            }
60        } else {
61            setTimeout(() => {
62                card1.classList.remove('flipped');
63                card2.classList.remove('flipped');
64            }, 1000);
65        }
66
67        flippedCards = [];
68        setTimeout(() => {
69            isProcessing = false;
70        }, 1000);
71    }
72
73    function initGame() {
74        gameBoard.innerHTML = '';
75        matchedPairs = 0;
76        moves = 0;
77        movesDisplay.textContent = moves;
78        
79        shuffle(cards).forEach(symbol => {
80            gameBoard.appendChild(createCard(symbol));
81        });
82    }
83
84    restartButton.addEventListener('click', initGame);
85    initGame();
86});

Principales caractéristiques

  1. Mise en page réactive de la grille
  2. Animations de retournement de cartes
  3. Logique de vérification des matchs
  4. Compteur de mouvements
  5. Fonctionnalité de redémarrage
  6. Détection des conditions de victoire

Améliorations possibles

  1. Mise en œuvre du timer
  2. Niveaux de difficulté
  3. Sélection du thème
  4. Effets sonores
  5. Système de suivi des scores

Guide de résolution des problèmes

  1. Problèmes liés au retournement de cartes : vérification des propriétés de transformation CSS
  2. Problèmes de correspondance : vérifier la logique de comparaison des symboles
  3. Problèmes de mise en page : ajuster les paramètres de la grille

Conclusion

Cette implémentation fournit une base solide pour un jeu de correspondance de mémoire tout en préservant la lisibilité et l'extensibilité du code. La structure modulaire permet des ajouts et des modifications faciles pour améliorer les fonctionnalités de jeu.

Explorez les cas d'utilisation associés

Découvrez l'assistant IA de Ninja

Essayez gratuitement dès aujourd'hui. Forfaits à partir de 19$ par mois.