# C4-A01 — Répare le jeu (Débogage)

import { ActivityHero } from "../../../src/components/ActivityHero";
import { ActivitySolution } from "../../../src/components/ActivitySolution";
import { BlockImage } from "../../../src/components/BlockImage";
import { BonusChallenge } from "../../../src/components/BonusChallenge";
import { CompletionCheck } from "../../../src/components/CompletionCheck";
import { Hint } from "../../../src/components/Hint";
import { PrintableVersion } from "../../../src/components/PrintableVersion";
import { StarterProject } from "../../../src/components/StarterProject";
import { StudentStep } from "../../../src/components/StudentStep";
import { TeacherAccess } from "../../../src/components/TeacherAccess";
import { TryIt } from "../../../src/components/TryIt";

<ActivityHero
  id="C4-A01"
  title="Répare le jeu d'arcade spatial (Mission Débogage)"
  cycle="4"
  level="5e, 4e, 3e"
  duration="45 min"
  tool="Scratch avancé"
  difficulty="Entraînement"
  needsAdult={false}
  mission="Un jeu d'arcade spatial comporte 3 bogues bloquants : vaisseau qui disparaît sur le bord droit, chronomètre infini négatif et score qui grimpe par paquet de 50. Trouve et corrige chaque anomalie !"
/>

<PrintableVersion
  pdfColorUrl="/downloads/c4-a01-repare-le-jeu.pdf"
  pdfColorName="Fiche d'audit logiciel : Le rapport de bugs (A4)"
/>

<StarterProject
  title="Projet Scratch défectueux à réparer"
  type="scratch"
  downloadUrl="/projects/c4-a01-debogage-depart.sb3"
  filename="c4-a01-debogage-depart.sb3"
  size="0.5 KB"
  preparedItems={[
    "Jeu spatial complet avec 3 dysfonctionnements majeurs",
    "Scripts annotés avec commentaires d'aide",
    "Lutins Vaisseau, Météorite et Étoile",
  ]}
/>

---

## 🪜 Les 3 anomalies à corriger

<StudentStep number={1} title="Bogue 1 : Le vaisseau sort de l'écran" check="Le vaisseau ne dépasse plus la limite X = 220.">
  - **Symptôme :** Quand on maintient la flèche droite, le vaisseau quitte l'écran et ne peut plus revenir.
  - **Diagnostic :** Il manque une condition de bordure d'écran.
  - **Correctif :** `si <(abscisse x) > 220> alors [mettre x à 220]`.
</StudentStep>

<StudentStep number={2} title="Bogue 2 : Le chronomètre devient négatif" check="La partie s'arrête exactement quand Temps = 0.">
  - **Symptôme :** Le temps passe à -1, -2, -3 sans jamais arrêter la partie.
  - **Diagnostic :** La condition d'arrêt `Temps = 0` n'est pas vérifiée dans la boucle ou manque le `stop tout`.
  - **Correctif :** `si <(Temps) < 1> alors [basculer sur arrière-plan Game Over] [stop tout]`.
</StudentStep>

<StudentStep
  number={3}
  title="Bogue 3 : Le score augmente de 50 points d'un coup"
  check="Chaque étoile ne donne qu'un seul point (+1)."
>
  - **Symptôme :** Dès qu'on touche une étoile, elle ne disparaît pas assez vite et le score
  s'emballe. - **Diagnostic :** L'étoile doit être immédiatement téléportée ou masquée dès le
  premier contact. - **Correctif :** Ajouter `aller à x: (aléatoire) y: (aléatoire)` immédiatement
  après `ajouter 1 à score`.
</StudentStep>

---

## 🧪 Teste ton jeu réparé

<TryIt expected="Le vaisseau reste à l'intérieur des bords, le chronomètre stoppe le jeu dès qu'il atteint 0, et chaque étoile rapporte exactement 1 point.">
  Joue une partie complète pour vérifier la non-régression.
</TryIt>

---

## 💡 Indices progressifs

<Hint
  hints={[
    {
      level: 1,
      title: "Indice 1 — Méthode de diagnostic",
      content: (
        <p>
          Teste un seul bogue à la fois ! Corrige le bogue 1, vérifie-le, puis passe au bogue 2.
        </p>
      ),
    },
    {
      level: 2,
      title: "Indice 2 — Où trouver le script du temps ?",
      content: (
        <p>
          Le script qui gère la variable <code>Temps</code> se trouve sur l'arrière-plan de la{" "}
          <strong>Scène</strong> (tout en bas à droite).
        </p>
      ),
    },
    {
      level: 3,
      title: "Indice 3 — Éviter les clics multiples",
      content: (
        <p>
          Sur l'étoile, ajoute un petit bloc <code>attendre 0.2 secondes</code> ou déplace l'étoile
          instantanément après le contact.
        </p>
      ),
    },
  ]}
/>

---

## 🔍 Solution et explications

<ActivitySolution
  title="Voir les scripts corrigés du jeu spatial"
  downloadUrl="/projects/c4-a01-debogage-corrige.sb3"
  filename="c4-a01-debogage-corrige.sb3"
  size="0.5 KB"
>

```text
// 1. Sur le Vaisseau (Rocketship)
quand le drapeau vert est cliqué
aller à x: (0) y: (-120)
répéter indéfiniment
    si <touche la [flèche droite v] pressée ?> alors
        ajouter (10) à x
        si <(abscisse x) > 220> alors [mettre x à 220]
    si <touche la [flèche gauche v] pressée ?> alors
        ajouter (-10) à x
        si <(abscisse x) < -220> alors [mettre x à -220]

// 2. Sur la Scène (Chronomètre)
quand le drapeau vert est cliqué
mettre [Temps v] à 20
mettre [Score v] à 0
répéter (20) fois
    attendre (1) secondes
    ajouter (-1) à [Temps v]
basculer sur l'arrière-plan [Game Over v]
stop [tout v]
```

</ActivitySolution>

---

## 🌟 Défi bonus

<BonusChallenge title="Défi bonus : Ajoute un record persistant (Highscore) !">
  Crée une variable `Meilleur_Score`. Si `Score > Meilleur_Score` à la fin de la partie, mets à jour le record !
</BonusChallenge>

---

<CompletionCheck
  activityId="C4-A01"
  nextActivityUrl="/activites/cycle-4/c4-a02-gere-plusieurs-niveaux"
  nextActivityTitle="C4-A02 — Gère plusieurs niveaux"
  cycleUrl="/activites/cycle-4"
/>

<TeacherAccess
  lessonId="C4-S01"
  lessonTitle="Diagnostic et consolidation"
  lessonUrl="/cycle-4/c4-s01-diagnostic-et-consolidation"
/>
