# C4-S04 — Variables locales et globales

import { AssessmentGrid } from "../../src/components/AssessmentGrid";
import { Correction } from "../../src/components/Correction";
import { ExerciseCard } from "../../src/components/ExerciseCard";
import { LearningObjectives } from "../../src/components/LearningObjectives";
import { LessonHeader } from "../../src/components/LessonHeader";
import { LessonNavigation } from "../../src/components/LessonNavigation";
import { TeacherTip } from "../../src/components/TeacherTip";
import { WatchOut } from "../../src/components/WatchOut";

<LessonHeader
  id="C4-S04"
  title="Portée des variables : Variables pour tous les sprites vs pour ce sprite uniquement"
  cycle="4"
  levels="5e, 4e, 3e"
  duration="55 minutes"
  tool="Scratch"
  grouping="Binômes"
  expressPrep={{
    objective: "Distinguer les variables globales (partagées) et locales (propres à un lutin ou clone).",
    material: "Projet multi-lutins avec vitesse individuelle.",
    trap: "Cocher par mégarde 'Pour tous les lutins' lors de la création d'un clone.",
    timing: "15' Notion de portée • 25' Application multi-lutins • 15' Synthèse",
  }}
/>

<LearningObjectives
  objectives={[
    "Distinguer la portée globale (`Pour tous les sprites`) et la portée locale (`Pour ce sprite uniquement`).",
    "Comprendre les effets de bord indésirables lorsqu'une variable globale est modifiée par plusieurs lutins simultanément.",
    "Utiliser des variables locales pour stocker des propriétés propres à chaque entité (vitesse, point de vie individuel).",
  ]}
/>

---

## 🎒 Matériel & Préparation

- Projet avec 3 ennemis identiques (ex : 3 chauves-souris ayant des vitesses différentes).

---

## ⏱️ Déroulé de la séance

### 1. La catastrophe de la variable partagée (15 min)

Si on crée une variable globale `vitesse` pour tous les sprites et que la Chauve-Souris 1 la met à 10, la Chauve-Souris 2 à 2 et la Chauve-Souris 3 à 5, elles vont toutes avancer à 5 en saccadant !  
Solution : créer une variable **locale** `vitesse` cochée _« Pour ce sprite uniquement »_.

### 2. Atelier pratique (30 min)

<ExerciseCard title="Mission : Les 3 monstres aux vitesses personnalisées" difficulty="Moyen">
  1. Créer une variable locale `vitesse_locale` (Pour ce sprite uniquement) sur le lutin Monstre. 2.
  Dupliquer le lutin en 3 exemplaires (Monstre 1, Monstre 2, Monstre 3). 3. Attribuer une vitesse
  différente à chaque monstre (5, 10, 15) et observer leur course indépendante.
</ExerciseCard>

<Correction title="Architecture des variables locales">

```text
// Sur le Monstre 1 (vitesse_locale = 5)
[quand le drapeau vert est cliqué]
mettre [vitesse_locale (ce sprite) v] à 5
répéter indéfiniment
    avancer de (vitesse_locale) pas
    si sur le bord, rebondir

// Sur le Monstre 2 (vitesse_locale = 12)
[quand le drapeau vert est cliqué]
mettre [vitesse_locale (ce sprite) v] à 12
répéter indéfiniment
    avancer de (vitesse_locale) pas
    si sur le bord, rebondir
```

</Correction>

### 3. Règle de bonne pratique de programmation (10 min)

- **Variable globale :** Utilisée uniquement pour ce qui est partagé par tout le jeu (ex : `Score_Global`, `Temps`, `Etat_Jeu`).
- **Variable locale :** Utilisée pour ce qui appartient à un seul lutin ou un seul clone (ex : `pv_monstre`, `vitesse_x`, `vitesse_y`).

<WatchOut title="Portée irréversible">
  Dans Scratch, on ne peut pas changer la portée d'une variable après sa création. Il faut la
  supprimer et la recréer en cochant la bonne option.
</WatchOut>

---

## 📊 Grille d'évaluation

<AssessmentGrid
  criteria={[
    {
      label: "Choisit la bonne portée à la création de la variable",
      withHelp: "Crée toujours des variables globales par défaut",
      autonomous: "Coche délibérément `Pour ce sprite uniquement` selon le besoin",
      transfer: "Explique la différence entre variable d'instance et variable globale",
    },
    {
      label: "Évite les conflits et effets de bord",
      withHelp: "Écrase les variables d'un autre sprite sans s'en rendre compte",
      autonomous: "Compartimente les données individuelles",
      transfer: "Prépare l'utilisation des clones autonomes",
    },
  ]}
/>


<LessonNavigation
  prevUrl="/cycle-4/c4-s03-etats-dun-programme"
  prevId="C4-S03"
  prevTitle="États d'un programme"
  nextUrl="/cycle-4/c4-s05-listes"
  nextId="C4-S05"
  nextTitle="Listes"
  cycleUrl="/cycle-4"
  cycleTitle="Vue d'ensemble du Cycle 4"
/>
