# C4-A06 — Projet libre et soutenance Python

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-A06"
  title="Projet libre d'équipe et transition vers Python"
  cycle="4"
  level="3e"
  duration="60 min"
  tool="Scratch avancé & Python"
  difficulty="Projet"
  needsAdult={false}
  mission="Mène ton grand projet libre de fin de collège en équipe : crée un jeu complet avec listes, clones et procédures, puis traduis ton algorithme clé en lignes de code Python !"
/>

<PrintableVersion
  pdfColorUrl="/downloads/c4-a06-projet-libre.pdf"
  pdfColorName="Cahier de projet & Guide de soutenance orale (A4)"
/>

<StarterProject
  title="Projet Scratch de départ"
  type="scratch"
  downloadUrl="/projects/c4-a06-projet-soutenance-depart.sb3"
  filename="c4-a06-projet-soutenance-depart.sb3"
  size="0.5 KB"
  preparedItems={[
    "Modèle de structure de projet d'équipe",
    "Exemple de bloc personnalisé avec paramètres",
    "Fichier d'initiation Python fourni pour la transcription",
  ]}
/>

---

## 🪜 Les 4 étapes de ton projet de fin de cycle

<StudentStep
  number={1}
  title="Rédigez votre cahier des charges d'équipe"
  check="Les rôles de chaque membre sont clairement distribués."
>
  Répartissez les responsabilités : - **Membre 1 :** Chef de projet & logique globale (machine à
  états). - **Membre 2 :** Développeur joueur et physique. - **Membre 3 :** Développeur des ennemis
  et des clones.
</StudentStep>

<StudentStep
  number={2}
  title="Développez en utilisant des blocs personnalisés"
  check="Les actions répétées sont rangées dans des procédures propres."
>
  Créez vos propres blocs dans la palette **Mes Blocs** (ex : `Sauter avec Gravite (G)` ou
  `GenererVagueEnnemis (N)`).
</StudentStep>

<StudentStep
  number={3}
  title="Conduisez la campagne de tests croisés"
  check="Le projet voisin a testé et validé votre jeu sans bogue."
>
  Faites jouer un autre groupe en suivant le cahier de tests. Corrigez les anomalies relevées.
</StudentStep>

<StudentStep number={4} title="Traduis ton algorithme en Python" check="Le code Python fonctionne et produit le même résultat logique que Scratch.">
  Exemple de traduction de la boucle de dégâts en Python :
  ```python
  points_de_vie = 100
  armure = 20

def infliger_degats(pv_actuels, valeur_attaque):
degats_reels = valeur_attaque - (armure // 2)
nouveaux_pv = pv_actuels - max(0, degats_reels)
print(f"Attaque reçue ! PV restants : {nouveaux_pv}")
return nouveaux_pv

points_de_vie = infliger_degats(points_de_vie, 35)

````
</StudentStep>

---

## 🧪 Teste ta soutenance

<TryIt expected="Vous êtes prêts à projeter votre jeu, démontrer son fonctionnement en direct, et expliquer le code Python équivalent devant la classe.">
Répétez votre présentation de 5 minutes avec le chronomètre.
</TryIt>

---

## 💡 Indices progressifs

<Hint
hints={[
  {
    level: 1,
    title: "Indice 1 — L'indentation en Python",
    content: <p>En Python, l'espace (4 espaces) au début de la ligne remplace l'emboîtement des blocs Scratch !</p>,
  },
  {
    level: 2,
    title: "Indice 2 — Les fonctions Python (def)",
    content: <p>Un bloc personnalisé <code>définir Sauter (hauteur)</code> s'écrit <code>def sauter(hauteur):</code> en Python.</p>,
  },
  {
    level: 3,
    title: "Indice 3 — La fiche de soutenance",
    content: <p>Consultez la fiche de critères de réussite pour obtenir la note maximale lors de l'oral.</p>,
  },
]}
/>

---

## 🔍 Solution et explications

<ActivitySolution
title="Voir le projet Scratch complet et sa transcription Python"
downloadUrl="/projects/c4-a06-projet-soutenance-corrige.sb3"
filename="c4-a06-projet-soutenance-corrige.sb3"
size="0.5 KB"
>

```python
# Transcription Python complète du système de jeu
import random

score = 0
vies = 3
partie_en_cours = True

def generer_ennemi():
  vitesse = random.randint(3, 8)
  return {"x": 240, "y": random.randint(-120, 120), "vitesse": vitesse}

print("=== LANCEMENT DU JEU ===")
ennemi = generer_ennemi()
print(f"Ennemi créé en position Y={ennemi['y']} avec vitesse={ennemi['vitesse']}")
````

</ActivitySolution>

---

## 🌟 Défi bonus

<BonusChallenge title="Défi bonus : Exécute ton script dans un terminal Python réel !">
  Ouvre un éditeur Python (IDLE, VS Code ou Python en ligne) et fais tourner ta simulation avec la
  boucle `while True:` !
</BonusChallenge>

---

<CompletionCheck
  activityId="C4-A06"
  nextActivityUrl="/activites"
  nextActivityTitle="Retour au catalogue des 24 activités"
  cycleUrl="/activites/cycle-4"
/>

<TeacherAccess
  lessonId="C4-S12"
  lessonTitle="Projet final et soutenance"
  lessonUrl="/cycle-4/c4-s12-projet-final-et-soutenance"
/>
