# C4-A05 — Construis une simulation scientifique

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-A05"
  title="Modélise la propagation d'une épidémie avec 40 individus"
  cycle="4"
  level="5e, 4e, 3e"
  duration="55 min"
  tool="Scratch avancé"
  difficulty="Projet"
  needsAdult={false}
  mission="Crée une simulation scientifique : 40 clones de personnes se déplacent dans une ville fermée. Un seul individu est malade au départ. Observe la vitesse de propagation du virus selon le port du masque !"
/>

<PrintableVersion
  pdfColorUrl="/downloads/c4-a05-construis-une-simulation.pdf"
  pdfColorName="Fiche laboratoire : Modélisation et simulation (A4)"
/>

<StarterProject
  title="Projet Scratch de départ"
  type="scratch"
  downloadUrl="/projects/c4-a05-simulation-depart.sb3"
  filename="c4-a05-simulation-depart.sb3"
  size="0.5 KB"
  preparedItems={[
    "Lutin 'Individu' avec 2 costumes : Vert (Sain) et Rouge (Infecté)",
    "Compteur 'Total_Infectes' et 'Temps_Ecoule'",
    "Variable locale 'etat_sante' créée pour ce sprite uniquement",
  ]}
/>

---

## 🪜 Les étapes de ton modèle scientifique

<StudentStep
  number={1}
  title="Génère la population de 40 individus"
  check="40 clones sains apparaissent à des positions aléatoires."
>
  Sur le lutin **Individu**, au drapeau vert : ```text quand le drapeau vert est cliqué mettre
  [Total_Infectes v] à 1 cacher répéter (39) fois créer un clone de [moi-même v] ```
</StudentStep>

<StudentStep
  number={2}
  title="Donne le statut initial (1 infecté et 39 sains)"
  check="Le premier clone est rouge (malade), les 39 autres sont verts (sains)."
>
  ```text quand je commence comme un clone aller à x: (nombre aléatoire entre -200 et 200) y:
  (nombre aléatoire entre -140 et 140) s'orienter à (nombre aléatoire entre 0 et 360) mettre
  [etat_sante (ce sprite) v] à [sain] basculer sur le costume [vert v] montrer ```
</StudentStep>

<StudentStep number={3} title="Modélise la règle de contagion au contact" check="Quand un sain touche un infecté, il a 50% de chance d'attraper le virus.">
  Dans la boucle de déplacement du clone :
  ```text
  avancer de (4) pas
  si sur le bord, rebondir
  si <(etat_sante) = [sain]> alors
      si <touche la [couleur rouge v] ?> alors
          si <(nombre aléatoire entre 1 et 100) < 51> alors
              mettre [etat_sante v] à [infecte]
              basculer sur le costume [rouge v]
              ajouter (1) à [Total_Infectes v]
  ```
</StudentStep>

---

## 🧪 Teste ta simulation

<TryIt expected="Lance la simulation : observe les personnes se déplacer. À chaque contact, le virus se propage progressivement jusqu'à ce que le compteur Total_Infectes atteigne 40.">
  Chronomètre le temps nécessaire pour que toute la ville soit contaminée.
</TryIt>

---

## 💡 Indices progressifs

<Hint
  hints={[
    {
      level: 1,
      title: "Indice 1 — La variable locale 'etat_sante'",
      content: (
        <p>
          Il est indispensable que la variable <code>etat_sante</code> soit cochée{" "}
          <strong>Pour ce sprite uniquement</strong> pour que chaque individu sache s'il est sain ou
          malade indépendamment des autres !
        </p>
      ),
    },
    {
      level: 2,
      title: "Indice 2 — Simuler le port du masque",
      content: (
        <p>
          Baisse le pourcentage de transmission de 50% à 10% (
          <code>nombre aléatoire entre 1 et 100 &lt; 11</code>) pour tester l'efficacité du masque !
        </p>
      ),
    },
    {
      level: 3,
      title: "Indice 3 — Ajouter la guérison automatique",
      content: (
        <p>
          Quand un clone devient infecté : lance un 2e script avec <code>attendre 8 secondes</code>{" "}
          puis <code>basculer sur costume Bleu (Guéri/Immunisé)</code>.
        </p>
      ),
    },
  ]}
/>

---

## 🔍 Solution et explications

<ActivitySolution
  title="Voir le modèle scientifique complet"
  downloadUrl="/projects/c4-a05-simulation-corrige.sb3"
  filename="c4-a05-simulation-corrige.sb3"
  size="0.5 KB"
>

```text
// Sur le Lutin Individu (Clone)
[quand je commence comme un clone]
aller à x: (nombre aléatoire entre -200 et 200) y: (nombre aléatoire entre -140 et 140)
s'orienter à (nombre aléatoire entre 0 et 360)
mettre [etat_sante (ce sprite) v] à [sain]
basculer sur le costume [vert v]
montrer

répéter indéfiniment
    avancer de (3) pas
    si sur le bord, rebondir
    si <(etat_sante) = [sain]> alors
        si <touche la [couleur rouge v] ?> alors
            si <(nombre aléatoire entre 1 et 100) < 51> alors
                mettre [etat_sante v] à [infecte]
                basculer sur le costume [rouge v]
                ajouter (1) à [Total_Infectes v]
```

</ActivitySolution>

---

## 🌟 Défi bonus

<BonusChallenge title="Défi bonus : Ajoute un bouton de confinement !">
  Crée un bouton Confinement qui bloque la vitesse de 75% des personnes (`vitesse = 0`). Compare la
  courbe de contagion !
</BonusChallenge>

---

<CompletionCheck
  activityId="C4-A05"
  nextActivityUrl="/activites/cycle-4/c4-a06-projet-libre"
  nextActivityTitle="C4-A06 — Projet libre et soutenance Python"
  cycleUrl="/activites/cycle-4"
/>

<TeacherAccess
  lessonId="C4-S09"
  lessonTitle="Simulation et aléatoire"
  lessonUrl="/cycle-4/c4-s09-simulation-et-aleatoire"
/>
