# C4-A02 — Gère plusieurs niveaux

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-A02"
  title="Construis un jeu multi-niveaux avec une machine à états"
  cycle="4"
  level="5e, 4e, 3e"
  duration="50 min"
  tool="Scratch avancé"
  difficulty="Entraînement"
  needsAdult={false}
  mission="Structure un jeu complet en 3 étapes : Écran d'accueil → Niveau 1 (Forêt) → Niveau 2 (Château volcanique). Utilise une variable d'état pour contrôler l'évolution de la partie."
/>

<PrintableVersion
  pdfColorUrl="/downloads/c4-a02-gere-plusieurs-niveaux.pdf"
  pdfColorName="Fiche méthode : Machine à états et multi-niveaux (A4)"
/>

<StarterProject
  title="Projet Scratch de départ"
  type="scratch"
  downloadUrl="/projects/c4-a02-niveaux-etats-depart.sb3"
  filename="c4-a02-niveaux-etats-depart.sb3"
  size="0.5 KB"
  preparedItems={[
    "Arrière-plans 'Titre', 'Niveau1_Foret' et 'Niveau2_Chateau'",
    "Lutin Joueur et Ennemis préconfigurés",
    "Variable 'Etat_Jeu' déjà créée",
  ]}
/>

---

## 🪜 Les étapes de ta machine à états

<StudentStep
  number={1}
  title="Initialise l'état MENU au démarrage"
  check="Au drapeau vert, la variable Etat_Jeu vaut 'MENU'."
>
  Sur la **Scène** : ```text quand le drapeau vert est cliqué mettre [Etat_Jeu v] à [MENU] basculer
  sur l'arrière-plan [Titre v] ```
</StudentStep>

<StudentStep
  number={2}
  title="Passe au Niveau 1 au clic sur Jouer"
  check="L'état passe à 'NIVEAU_1' et le décor de forêt apparaît."
>
  Sur le **Bouton Jouer** : ```text quand ce lutin est cliqué mettre [Etat_Jeu v] à [NIVEAU_1]
  cacher envoyer à tous [lancer_niveau_1 v] ```
</StudentStep>

<StudentStep number={3} title="Déclenche la transition vers le Niveau 2" check="Quand Score atteint 5, la scène bascule sur le Château et les ennemis accélèrent.">
  Sur la **Scène**, surveille le score :
  ```text
  quand je reçois [lancer_niveau_1 v]
  basculer sur l'arrière-plan [Niveau1_Foret v]
  attendre jusqu'à <(Score) > 4>
  mettre [Etat_Jeu v] à [NIVEAU_2]
  basculer sur l'arrière-plan [Niveau2_Chateau v]
  envoyer à tous [lancer_niveau_2 v]
  ```
</StudentStep>

---

## 🧪 Teste ton jeu multi-niveaux

<TryIt expected="Le jeu commence sur l'écran titre. Clique sur Jouer : le Niveau 1 démarre. Ramasse 5 pièces : le décor change instantanément pour le Niveau 2 du château avec de nouveaux défis !">
  Termine les deux niveaux consécutifs pour tester la chaîne d'états.
</TryIt>

---

## 💡 Indices progressifs

<Hint
  hints={[
    {
      level: 1,
      title: "Indice 1 — Pourquoi le joueur bouge dans le menu ?",
      content: (
        <p>
          Conditionne les déplacements du joueur :{" "}
          <code>
            si &lt;&lt;(Etat_Jeu) = [NIVEAU_1]&gt; ou &lt;(Etat_Jeu) = [NIVEAU_2]&gt;&gt; alors
            [déplacement...]
          </code>
          .
        </p>
      ),
    },
    {
      level: 2,
      title: "Indice 2 — Réinitialiser la position du joueur au niveau 2",
      content: (
        <p>
          Sur le joueur : <code>quand je reçois lancer_niveau_2 -&gt; aller à x: -180 y: 0</code>{" "}
          pour le replacer à l'entrée du nouveau monde.
        </p>
      ),
    },
    {
      level: 3,
      title: "Indice 3 — Gérer l'écran de pause",
      content: (
        <p>
          Quand la touche P est pressée : si <code>Etat_Jeu = NIVEAU_1</code>, mets{" "}
          <code>PAUSE</code>, sinon remets <code>NIVEAU_1</code>.
        </p>
      ),
    },
  ]}
/>

---

## 🔍 Solution et explications

<ActivitySolution
  title="Voir les scripts complets de la machine à états"
  downloadUrl="/projects/c4-a02-niveaux-etats-corrige.sb3"
  filename="c4-a02-niveaux-etats-corrige.sb3"
  size="0.5 KB"
>

```text
// Sur la Scène (Contrôleur des états)
[quand le drapeau vert est cliqué]
mettre [Etat_Jeu v] à [MENU]
basculer sur l'arrière-plan [Titre v]

[quand je reçois [lancer_niveau_1 v]]
mettre [Score v] à 0
basculer sur l'arrière-plan [Niveau1_Foret v]
attendre jusqu'à <(Score) > 4>
mettre [Etat_Jeu v] à [NIVEAU_2]
basculer sur l'arrière-plan [Niveau2_Chateau v]
envoyer à tous [lancer_niveau_2 v]
attendre jusqu'à <(Score) > 9>
mettre [Etat_Jeu v] à [VICTOIRE]
basculer sur l'arrière-plan [Victoire v]
stop [tout v]
```

</ActivitySolution>

---

## 🌟 Défi bonus

<BonusChallenge title="Défi bonus : Ajoute un écran de pause avec la touche P !">
  Programme la touche P pour geler le déplacement de tous les lutins et afficher un bandeau
  semi-transparent *« PAUSE - Appuie sur P pour reprendre »*.
</BonusChallenge>

---

<CompletionCheck
  activityId="C4-A02"
  nextActivityUrl="/activites/cycle-4/c4-a03-utilise-une-liste"
  nextActivityTitle="C4-A03 — Gère un inventaire avec une liste"
  cycleUrl="/activites/cycle-4"
/>

<TeacherAccess
  lessonId="C4-S03"
  lessonTitle="États d'un programme"
  lessonUrl="/cycle-4/c4-s03-etats-dun-programme"
/>
