# C3-A06 — Construis un jeu complet

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="C3-A06"
  title="Construis ton jeu de collecte d'objets complet"
  cycle="3"
  level="CM1, CM2, 6e"
  duration="60 min"
  tool="Scratch"
  difficulty="Projet"
  needsAdult={false}
  mission="C'est le grand projet du Cycle 3 ! Assemble tous les mécanismes : contrôle du joueur au clavier, collecte d'étoiles aléatoires, compte à rebours de 30 secondes et écran de victoire."
/>

<PrintableVersion
  pdfColorUrl="/downloads/c3-a06-construis-un-jeu.pdf"
  pdfColorName="Cahier de projet élève : Le jeu de collecte (A4)"
/>

<StarterProject
  title="Projet Scratch de départ"
  type="scratch"
  downloadUrl="/projects/c3-a06-jeu-complet-depart.sb3"
  filename="c3-a06-jeu-complet-depart.sb3"
  size="0.5 KB"
  preparedItems={[
    "Lutin Joueur 'Goblin' prêt à être animé",
    "Lutin Étoile 'Star' prêt à être ramassé",
    "Variables 'Score' et 'Temps' déjà créées",
    "Arrière-plans 'Accueil', 'Jeu', 'Victoire' et 'Défaite'",
  ]}
/>

---

## 🪜 Les 4 étapes de construction de ton jeu

<StudentStep number={1} title="Programme le pilotage du joueur" check="Le joueur se déplace de gauche à droite avec les flèches du clavier.">
  Sur le **Joueur** :
  ```text
  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 <touche la [flèche gauche v] pressée ?> alors [ajouter (-10) à x]
  ```
</StudentStep>

<StudentStep number={2} title="Programme la chute et la collecte des étoiles" check="Chaque étoile touchée augmente le score de 1 et réapparaît en haut.">
  Sur l'**Étoile** :
  ```text
  quand le drapeau vert est cliqué
  aller à x: (nombre aléatoire entre -200 et 200) y: (160)
  répéter indéfiniment
      ajouter (-6) à y
      si <touche le [Goblin v] ?> alors
          ajouter (1) à [Score v]
          jouer le son [Collect v]
          aller à x: (nombre aléatoire entre -200 et 200) y: (160)
      si <(ordonnée y) < (-160)> alors
          aller à x: (nombre aléatoire entre -200 et 200) y: (160)
  ```
</StudentStep>

<StudentStep number={3} title="Programme le chronomètre et la victoire" check="Le temps s'écoule seconde par seconde. Si Score >= 10, c'est gagné !">
  Sur la **Scène** (Arrière-plan) :
  ```text
  quand le drapeau vert est cliqué
  mettre [Score v] à 0
  mettre [Temps v] à 30
  basculer sur l'arrière-plan [Jeu v]

répéter (30) fois
attendre (1) secondes
ajouter (-1) à [Temps v]
si <(Score) > 9> alors
basculer sur l'arrière-plan [Victoire v]
jouer le son [Cheer v]
stop [tout v]

basculer sur l'arrière-plan [Defaite v]
stop [tout v]

```
</StudentStep>

---

## 🧪 Teste ton jeu complet

<TryIt expected="Lance une partie : attrape 10 étoiles avant la fin des 30 secondes pour déclencher l'écran de Victoire. Si le temps arrive à 0 avant les 10 étoiles, l'écran de Défaite apparaît.">
Fais tester ton jeu à deux camarades pour voir s'ils réussissent le défi !
</TryIt>

---

## 💡 Indices progressifs

<Hint
hints={[
  {
    level: 1,
    title: "Indice 1 — Les limites horizontales du joueur",
    content: <p>Pour éviter que le joueur sorte de l'écran, ajoute : <code>si &lt;(abscisse x) &gt; 220&gt; alors [mettre x à 220]</code>.</p>,
  },
  {
    level: 2,
    title: "Indice 2 — Accélérer le jeu",
    content: <p>Si le jeu est trop facile, augmente la vitesse de chute de l'étoile : <code>ajouter (-10) à y</code>.</p>,
  },
  {
    level: 3,
    title: "Indice 3 — Masquer les lutins sur les écrans de fin",
    content: <p>Envoie un message <code>victoire</code> et ajoute sur les lutins : <code>quand je reçois victoire -&gt; cacher</code>.</p>,
  },
]}
/>

---

## 🔍 Solution et explications

<ActivitySolution
title="Voir le projet complet et commenté"
downloadUrl="/projects/c3-a06-jeu-complet-corrige.sb3"
filename="c3-a06-jeu-complet-corrige.sb3"
size="0.5 KB"
>

Le projet de référence rassemble 5 notions clés du Cycle 3 :
1. **Événements :** Drapeau vert et gestion de boucle de jeu.
2. **Coordonnées (X, Y) :** Déplacements relatifs du joueur et chute des étoiles.
3. **Variables :** Double gestion de `Score` (incrémenté) et `Temps` (décrémenté).
4. **Aléatoire :** Réapparition des étoiles à des abscisses X imprévisibles.
5. **Conditions :** Détection de victoire (Score >= 10) et défaite (Temps = 0).

</ActivitySolution>

---

## 🌟 Défi bonus

<BonusChallenge title="Défi bonus : Ajoute un obstacle éclair qui fait perdre 2 points !">
Ajoute un lutin Éclair qui tombe du ciel : si le joueur le touche, il perd 2 points et un son d'orage retentit !
</BonusChallenge>

---

<CompletionCheck
activityId="C3-A06"
nextActivityUrl="/activites/cycle-4/c4-a01-repare-le-jeu"
nextActivityTitle="Cycle 4 : C4-A01 — Répare le jeu (Débogage)"
cycleUrl="/activites/cycle-3"
/>

<TeacherAccess
lessonId="C3-S12"
lessonTitle="Projet final Cycle 3"
lessonUrl="/cycle-3/c3-s12-projet-final"
/>
```
