# 💧 Atelier Scratch : Créer et Programmer le Sprite « Bouteille Hayat »
### *Séance Découverte Algorithmics — Jeu « Stika Maa » (ستيكة ماء)*
*Guide pas-à-pas pédagogique illustré (pour enfants de 7 à 12 ans et animateurs)*

---

## 🎯 L'Histoire & Le Rôle des Bouteilles d'Eau

Dans notre jeu **Stika Maa (ستيكة ماء)**, une vague de chaleur frappe la Tunisie en plein été et l'eau potable se fait rare. Les habitants parcourent la ville à la recherche de packs d'eau minérale (*stika maa*).

Soudain, une camionnette chargée de bouteilles de la célèbre marque tunisienne **Hayat (حياة)** arrive sur la magnifique **Corniche de Boujaafar à Sousse**, devant les pierres peintes aux couleurs du pays et le drapeau tunisien !

En roulant sur les pavés de la corniche, la camionnette laisse tomber de précieuses bouteilles d'eau minérale.

Le joueur, vêtu du **maillot rouge de la Tunisie**, doit sprinter pour attraper **20 bouteilles d'eau Hayat** pour approvisionner sa famille et son quartier, tout en esquivant les taxis jaunes, voitures et deux-roues !

> [!NOTE]
> ### 🪄 Le Grand Secret des Développeurs : La Magie des Clones
> Dans un jeu vidéo, on ne va pas s'amuser à créer 20 ou 50 sprites "Bouteille 1", "Bouteille 2", "Bouteille 3"... Ce serait interminable à programmer et le jeu deviendrait extrêmement lourd !
> À la place, les programmeurs utilisent un patron de conception génial : **Le Clonage**.
> On ne dessine qu'**un seul lutin Bouteille original**. Il reste caché dans les coulisses comme un moule de fabrication. Chaque fois qu'on a besoin d'une bouteille sur la route, il fabrique un **clone** (une copie vivante temporaire) qui tombe du ciel, donne des points et disparaît !

---

## 🛠️ Étape 0 : Préparer le Sprite Bouteille dans Scratch

Avant de commencer à assembler les blocs, installons notre lutin et son costume :

1. **Importer le sprite :**
   - En bas à droite de Scratch, survole l'icône de chat bleue et clique sur **« Importer un sprite »**.
   - Sélectionne le fichier `bouteille.svg` (avec le bouchon bleu et le logo rouge **حياة**).
   - Dans la zone des propriétés du lutin, nomme-le exactement : **`Bouteille`**.

2. **Régler la taille :**
   - Dans la case **Taille**, écris **`60`**.
   - Cela donne à la bouteille des proportions parfaites par rapport à la largeur des voies de la corniche et à la taille du coureur.

3. **Vérifier le son de collecte :**
   - Rends-toi dans l'onglet **Sons** (en haut à gauche).
   - Vérifie que le son **`Pop`** est présent dans la liste. C'est ce son joyeux qui retentira chaque fois que le joueur réussira à attraper une bouteille au vol !

---

## 🧩 Vue d'Ensemble des 4 Scripts du Sprite Bouteille

Le comportement complet de la bouteille est découpé en **4 scripts simples et modulaires** :

![Tous les blocs de la Bouteille](captures_ecran/bouteille_scripts_tous.png)

```
┌─────────────────────────────────────────────────────────────────────────────┐
│                        SPRITE « BOUTEILLE HAYAT »                           │
├──────────────────────────────┬──────────────────────────────────────────────┤
│ 1. 🏁 Drapeau vert           │ 3. ⏱️ Réception START                        │
│    └─ Reste caché            │    ├─ Attente 3.5 secondes                   │
│                               │    └─ Boucle infinie de création régulière   │
├──────────────────────────────┼──────────────────────────────────────────────┤
│ 2. 🚚 Réception LANCER BOUT. │ 4. 💧 Vie Complète d'un Clone               │
│    └─ Première vague de 5     │    ├─ Naissance en haut (x: -150 à 150, y:160│
│       bouteilles             │    ├─ Chute vers le bas (-5 par pas)         │
│                               │    ├─ Détection Joueur (+1 Score, Pop, Effet)│
│                               │    └─ Suppression propre du clone (Mémoire)  │
└──────────────────────────────┴──────────────────────────────────────────────┘
```

---

## 📌 Script 1 : Le Modèle Original reste dans les Coulisses

Quand le jeu s'allume avec le drapeau vert, le modèle original de la bouteille doit être invisible pour ne pas rester figé au milieu de la scène.

![Script 1 - Cacher au drapeau vert](captures_ecran/bouteille_script_1_cacher.png)

```scratch
quand le drapeau vert est cliqué
cacher
```

### 🔍 Décorticage Pédagogique Bloc par Bloc :
| Bloc | Catégorie & Couleur | Que fait-il ? | Pourquoi ce bloc est indispensable ? |
| :--- | :--- | :--- | :--- |
| **`quand 🏁 est cliqué`** | 🟡 **Événements** (Jaune) | Déclencheur officiel au lancement. | Dès que l'enfant clique sur le drapeau vert pour démarrer le jeu, ce bloc s'active en premier. |
| **`cacher`** | 🟣 **Apparence** (Violet) | Rend le lutin invisible. | **Le modèle original est une matrice !** Il ne doit jamais courir sur la route. Seuls ses clones vivants se montreront. Sans ce bloc, une grosse bouteille immobile resterait plantée au milieu de l'écran ! |

---

## 📌 Script 2 : La Vague d'Ouverture de 5 Bouteilles 🚚

Au début de la partie, la camionnette de livraison arrive en haut de la rue, klaxonne et s'écrie *"Oups ! Une bouteille est tombée !"*. Elle envoie alors le message radio **`LANCER BOUTEILLES`** pour déclencher une première salve de 5 bouteilles !

![Script 2 - Lancer 5 bouteilles](captures_ecran/bouteille_script_2_lancer_5.png)

```scratch
quand je reçois [LANCER BOUTEILLES v]
répéter (5) fois
    si <(Jeu) = (1)> alors
        créer un clone de [moi-même v]
        attendre (0.6) secondes
```

### 🔍 Décorticage Pédagogique Bloc par Bloc :
| Bloc | Catégorie & Couleur | Que fait-il ? | Pourquoi ce bloc est indispensable ? |
| :--- | :--- | :--- | :--- |
| **`quand je reçois [LANCER BOUTEILLES]`** | 🟡 **Événements** | Reçoit l'ordre diffusé par la camionnette. | Permet de synchroniser l'action : les bouteilles ne tombent qu'au moment exact où la camionnette passe sur la corniche ! |
| **`répéter (5) fois`** | 🟠 **Contrôle** (Orange) | Boucle de répétition fixe. | Envoie exactement 5 bouteilles d'affilée pour lancer le défi au joueur. |
| **`si <Jeu = 1> alors`** | 🟠 **Contrôle** + 🟢 **Opérateurs** | Condition de vérification d'état. | Vérifie que la partie est bien active. Si le joueur a déjà eu un accident, on stoppe immédiatement l'envoi. |
| **`créer un clone de [moi-même]`** | 🟠 **Contrôle** | Fabrique une copie vivante. | Déclenche l'exécution du Script 4 pour cette nouvelle bouteille. |
| **`attendre (0.6) secondes`** | 🟠 **Contrôle** | Intervalle de temps régulier. | **Crucial !** Sans ce délai de 0.6 seconde, les 5 bouteilles apparaîtraient exactement en même temps, superposées les unes sur les autres ! |

---

## 📌 Script 3 : La Pluie Continue de Bouteilles (`START`) ⏱️

Après la première vague, les bouteilles doivent continuer à tomber à des moments imprévisibles pour permettre au coureur d'atteindre le grand objectif des **20 bouteilles (ستيكة ماء)** !

![Script 3 - Cadence START](captures_ecran/bouteille_script_3_cadence_start.png)

```scratch
quand je reçois [START v]
attendre (3.5) secondes
répéter indéfiniment
    si <(Jeu) = (1)> alors
        attendre (nombre aléatoire entre (0.1) et (0.5)) secondes
        si <(Jeu) = (1)> alors
            créer un clone de [moi-même v]
```

### 🔍 Décorticage Pédagogique Bloc par Bloc :
| Bloc | Catégorie & Couleur | Que fait-il ? | Pourquoi ce bloc est indispensable ? |
| :--- | :--- | :--- | :--- |
| **`quand je reçois [START]`** | 🟡 **Événements** | Démarre la machine à sous de bouteilles. | Reçu dès le lancement de la partie par le GameManager. |
| **`attendre (3.5) secondes`** | 🟠 **Contrôle** | Temps d'élan initial. | Laisse le temps à la camionnette de faire sa traversée et à la vague de départ (Script 2) de se terminer. |
| **`répéter indéfiniment`** | 🟠 **Contrôle** | Boucle permanente. | Continue de fabriquer des bouteilles tant que la partie n'est pas terminée. |
| **`si <Jeu = 1> alors`** | 🟠 **Contrôle** + 🟢 **Opérateurs** | Première barrière de sécurité. | Empêche d'attendre et de cloner si la partie est terminée. |
| **`attendre (nombre aléatoire entre 0.1 et 0.5) s`** | 🟢 **Opérateurs** + 🟠 **Contrôle** | Intervalle de temps dynamique et aléatoire. | **Le secret du gameplay !** Si les bouteilles tombaient à heure fixe, le jeu serait prévisible et monotone. Avec un hasard entre 0.1 et 0.5 s, le joueur doit rester ultra-attentif et réactif ! |
| **Double vérification `si Jeu = 1`** | 🟠 **Contrôle** | Deuxième barrière de sécurité. | **Astuce de pro Algorithmics !** Pendant les 0.1 à 0.5 seconde d'attente, le joueur a pu se faire heurter par une voiture. Revérifier juste avant de cloner évite qu'une bouteille fantôme n'apparaisse sur l'écran de Game Over ! |
| **`créer un clone de [moi-même]`** | 🟠 **Contrôle** | Fabrique un nouveau clone. | Met en mouvement une nouvelle bouteille sur la route. |

---

## 📌 Script 4 : La Vie Complète d'un Clone (Chute, Points, Nettoyage) 💧

C'est le **script géant** le plus important du jeu ! Dès qu'un clone est créé, il entre dans ce programme et vit ses 4 actes :

![Script 4 - Vie Complète d'un Clone](captures_ecran/bouteille_script_4_vie_clone.png)

```scratch
quand je commence comme un clone
aller à x: (nombre aléatoire entre (-150) et (150)) y: (160)
montrer
répéter jusqu'à ce que <<<(ordonnée y) < (-165)> ou <touche le [Joueur v] ?>> ou <non <(Jeu) = (1)>>>
    ajouter (-5) à y
si <(Jeu) = (1)> alors
    si <touche le [Joueur v] ?> alors
        ajouter (1) à [Score v]
        ajouter (1) à [Bouteilles v]
        jouer le son [Pop v]
        envoyer à tous [BONUS_EFFET v]
supprimer ce clone
```

### 🔍 Les 4 Actes de la Vie d'une Bouteille Hayat :

#### 🎭 Acte 1 : La Naissance en Haut de la Chaussée
* **`quand je commence comme un clone`** : Ce bloc d'en-tête ne s'exécute **que pour les clones**. Le modèle original ne l'utilise jamais.
* **`aller à x: (nombre aléatoire entre -150 et 150) y: 160`** :
  * `y = 160` : Place la bouteille tout en haut de l'écran, au niveau de la benne de la camionnette.
  * `x entre -150 et 150` : Fait apparaître la bouteille au hasard sur la largeur de la route goudronnée de Boujaafar (jamais sur les trottoirs ni dans l'eau !).
* **`montrer`** : **Indispensable !** Le modèle original étant caché, chaque clone naît invisible par défaut. Ce bloc le rend enfin visible aux yeux du joueur !

#### 🎭 Acte 2 : La Descente Gravitationnelle (La Boucle Triple)
* **`répéter jusqu'à ce que <<(y < -165) ou (touche Joueur ?)> ou (non Jeu = 1)>>`** :
  La bouteille descend vers le bas tant qu'aucun de ces 3 événements n'arrive :
  1. `ordonnée y < -165` : La bouteille a atteint le bas de l'écran (elle est perdue).
  2. `touche le Joueur ?` : Le joueur l'a attrapée avec succès !
  3. `non (Jeu = 1)` : La partie s'est arrêtée (collision de voiture ou fin de partie).
* **`ajouter (-5) à y`** : En repère cartésien Scratch, ajouter un nombre négatif à Y fait descendre le lutin vers le bas. Une valeur de `-5` donne une vitesse de chute équilibrée et fluide.

#### 🎭 Acte 3 : La Collecte & Les Récompenses
Dès que la bouteille sort de sa boucle de chute, on vérifie si c'est bien le coureur tunisien qui l'a attrapée :
* **`si <Jeu = 1> alors`** : On s'assure que la partie est toujours en cours.
* **`si <touche le Joueur ?> alors`** :
  * **`ajouter (1) à [Score]`** : Incrémente le score général de la partie.
  * **`ajouter (1) à [Bouteilles]`** : Augmente le compteur officiel pour se rapprocher des 20 bouteilles (*Stika Maa*) !
  * **`jouer le son [Pop]`** : Retour auditif amusant et immédiat.
  * **`envoyer à tous [BONUS_EFFET]`** : Fait jaillir l'étoile dorée `+1 💧` au-dessus de la tête du coureur !

#### 🎭 Acte 4 : Le Nettoyage de la Mémoire 🧹
* **`supprimer ce clone`** :
  > [!CAUTION]
  > ### ⚠️ Règle d'Or de Scratch : Ne Jamais Oublier de Supprimer les Clones !
  > Scratch impose une limite stricte de **300 clones maximum** simultanés.
  > Si un clone qui touche le bas de l'écran ou le joueur n'est pas supprimé, il reste en mémoire. Au bout de quelques secondes, le moteur de Scratch sature, le jeu ralentit fortement et plus aucune bouteille ne peut apparaître !
  > Le bloc `supprimer ce clone` détruit proprement la copie et libère la mémoire de l'ordinateur.

---

## 🧪 Le Coin des Petits Scientifiques (Défis & Expériences !)

Une fois que le sprite Bouteille fonctionne, propose ces défis d'expérimentation aux élèves :

| Expérience | Modification dans les blocs | Résultat visible dans le jeu |
| :--- | :--- | :--- |
| ⚡ **Chute Météorique** | Remplace `ajouter (-5) à y` par **`ajouter (-10) à y`** | Les bouteilles tombent comme des fusées ! Réflexes de pro exigés ! |
| 🎈 **Mode Apesanteur** | Remplace `ajouter (-5) à y` par **`ajouter (-2) à y`** | Les bouteilles descendent très doucement, idéal pour les plus jeunes. |
| 🌊 **La Tempête d'Eau** | Change l'attente aléatoire en **`0.05 et 0.1`** | Une avalanche incroyable de bouteilles inonde la route de Boujaafar ! |
| ⚠️ **L'Expérience du Bug** | Enlève le bloc `supprimer ce clone` tout en bas | Observe ce qui se passe : après quelques secondes, le jeu se bloque et n'émet plus de bouteilles ! Cela montre l'importance de la gestion mémoire en programmation. |

---

## ✅ Fiche Récapitulative de Validation (Checklist pour l'Enfant)

L'élève vérifie chaque point pour valider son badge de créateur :

- [ ] Le sprite s'appelle bien **`Bouteille`** et sa taille est réglée sur **`60`**.
- [ ] Le costume affiche bien la bouteille **Hayat (حياة)** avec son bouchon bleu.
- [ ] Le modèle original se **cache** au clic sur le **Drapeau Vert 🟢**.
- [ ] Quand la camionnette passe, une **première vague de 5 bouteilles** se met à tomber.
- [ ] Les bouteilles continuent de pleuvoir de manière imprévisible grâce au bloc **nombre aléatoire**.
- [ ] Quand le joueur attrape une bouteille : le compteur monte de 1, le son **Pop** retentit et l'effet `+1 💧` apparaît.
- [ ] Les bouteilles disparues sont bien **supprimées** pour ne pas faire ramer le jeu.

🎉 **Mabrouk ! Le système de collecte d'eau Hayat pour « Stika Maa » est 100% opérationnel !**
