0%
PROJET DE JEU COMPLET · CAPSTONE

Construis un Tower Defense
jouable & publié

Tu as appris à piloter Studio avec Claude Code. Place maintenant à un vrai jeu fini : des ennemis en vagues, des tours à acheter et placer, une économie, et une publication sur Roblox. Avance jalon par jalon — pas tout d'un coup.

🏗️ Projet de
🎯
La règle d'or du projet : le scope.
Un jeu « complet » ne veut pas dire « gros ». Il veut dire : une boucle de jeu claire, qui marche du début à la fin, sans bug bloquant, et publié. Mieux vaut un petit TD fini et jouable qu'un gros TD jamais terminé.
📝

Étape 0 — Le brief

Définir le jeu AVANT de coder (5 min, mais essentiel)

La boucle de jeu en une phrase (ex : « les ennemis suivent un chemin, j'achète des tours pour les tuer avant qu'ils atteignent ma base »).

✅ DANS le scope (ce que je vais VRAIMENT faire — 5-6 choses max)

❌ HORS scope (les idées tentantes que je m'interdis pour cette V1)

💡
Montre ce brief à ton formateur avant de commencer à coder. C'est le moment le moins cher pour corriger la direction.
1

🟢 Jalon 1 — La carte & le chemin

Le terrain, le chemin des ennemis, la base, les emplacements de tours

Fondations
📚
Concepts Roblox : un chemin = une suite de petits Parts invisibles (« waypoints ») rangés dans un Folder. Les ennemis marcheront de l'un à l'autre. La base = le dernier point à défendre.
1.1 — Le chemin & la base
Tape →Crée un dossier "Waypoints" dans le Workspace avec une suite de 8 parts ancrés formant un chemin sinueux sur le baseplate, du bord jusqu'à une "Base" (un part coloré) à l'autre bout.
Puis →Trace le chemin visuellement avec des parts plats gris reliant les waypoints, pour qu'on voie la route.
📷Capture de la carte avec le chemin et la base
1.2 — Les emplacements de tours
Tape →Ajoute un dossier "TowerSpots" avec 6 plateformes carrées le long du chemin, où le joueur pourra poser des tours.

Pourquoi ranger les waypoints dans un Folder plutôt qu'en vrac dans le Workspace ?

🎯 Jalon 1 atteint : la carte existe, le chemin est lisible, les emplacements sont prêts.
2

🟡 Jalon 2 — Les ennemis

Un ennemi qui apparaît et suit le chemin jusqu'à la base

Mouvement
📚
Concepts : un ennemi = un modèle avec un Humanoid. Pour le déplacer, on appelle Humanoid:MoveTo(position) vers chaque waypoint, l'un après l'autre. Quand il atteint la base, il inflige des dégâts et disparaît.
2.1 — Un ennemi qui marche
Tape →Crée un ennemi simple (un modèle avec Humanoid et de la vie) qui spawn au premier waypoint et marche automatiquement jusqu'au dernier en suivant tous les waypoints dans l'ordre.
Puis →Montre-moi le script et explique comment il passe d'un waypoint au suivant.
📷Capture de l'ennemi en train de suivre le chemin

❗ Obligatoire : explique avec tes mots comment l'ennemi sait où aller (le rôle de MoveTo et de la boucle sur les waypoints).

2.2 — Atteindre la base = dégâts
Tape →Quand un ennemi atteint la base, fais perdre 1 point de vie à la base, puis supprime l'ennemi. Affiche la vie de la base dans la console pour l'instant.

Que se passe-t-il si la vie de la base tombe à 0 ? (note l'idée, on le codera au jalon 5)

🎯 Jalon 2 atteint : un ennemi vit, marche, et menace la base.
3

🟠 Jalon 3 — Les vagues

Faire apparaître des ennemis par vagues, de plus en plus dures

Rythme
📚
Concepts : une vague = une boucle qui spawn N ennemis avec un délai (task.wait) entre chacun. À chaque vague suivante : plus d'ennemis et/ou plus de vie. Un compteur de vague indique la progression.
3.1 — Système de vagues
Tape →Crée un système de 5 vagues : chaque vague fait apparaître des ennemis un par un avec 1 seconde d'intervalle. La vague 1 = 5 ennemis, et chaque vague suivante en a 3 de plus. Attends que tous les ennemis soient morts avant la vague suivante.
📷Capture de plusieurs ennemis sur le chemin pendant une vague

À quoi sert task.wait() ici ? Que se passerait-il sans aucun délai entre les spawns ?

🎯 Jalon 3 atteint : le jeu a un rythme — des vagues qui montent en difficulté.
4

🔴 Jalon 4 — Les tours & le tir

Acheter, placer une tour, et tirer sur les ennemis à portée

Le cœur du jeu
📚
Concepts : placer une tour = le joueur clique sur un emplacement → un RemoteEvent prévient le serveur qui crée la tour (jamais le client directement !). Le tir : la tour cherche en boucle l'ennemi le plus proche dans son rayon (distance = .Magnitude) et lui inflige des dégâts avec un temps de recharge.
4.1 — Placer une tour
Tape →Permets au joueur de cliquer sur un emplacement (TowerSpot) pour y placer une tour. Le placement doit passer par un RemoteEvent traité côté serveur.
📷Capture d'une tour placée sur un emplacement

❗ Important : pourquoi le placement doit-il être validé côté serveur et pas seulement côté client ? (pense à la triche)

4.2 — La tour tire
Tape →Fais que chaque tour détecte l'ennemi le plus proche dans un rayon de 20 studs et lui tire dessus toutes les 0.5 s (réduit sa vie). Ajoute un effet visuel simple de tir (un rayon ou un flash).
Puis →Quand un ennemi n'a plus de vie, supprime-le.
📷Capture d'une tour qui tire sur un ennemi

Comment la tour trouve-t-elle l'ennemi « le plus proche » ? (le rôle de la distance / .Magnitude)

🎯 Jalon 4 atteint : la boucle de jeu fonctionne — on peut défendre la base !
5

💰 Jalon 5 — Économie & équilibrage

Gagner de l'argent, payer les tours, gagner ou perdre la partie

Équilibre
📚
Concepts : l'argent se stocke dans les leaderstats (un IntValue par joueur). On gagne à chaque ennemi tué, on paie pour chaque tour. L'équilibrage, c'est régler ces nombres pour que le jeu soit ni trop facile ni impossible.
5.1 — La monnaie
Tape →Ajoute de l'argent au joueur via leaderstats : il commence avec 150, gagne 10 par ennemi tué, et chaque tour coûte 50. Empêche le placement si le joueur n'a pas assez d'argent.
📷Capture du leaderboard avec l'argent
5.2 — Victoire & défaite
Tape →La base a 20 points de vie. Si elle tombe à 0 → écran "Défaite". Si le joueur survit aux 5 vagues → écran "Victoire". Arrête le jeu dans les deux cas.

❓ Équilibrage : teste ta partie. Est-elle trop facile ou trop dure ? Quels nombres as-tu changés (vie ennemis, dégâts tour, prix, récompense) et pourquoi ?

🎯 Jalon 5 atteint : c'est un vrai jeu — on peut gagner, perdre, et faire des choix.
🚀

Jalon 6 — Polish & publication

UI propre, finitions, mise en ligne et test par d'autres

📚
Concepts : l'interface (ScreenGui) montre au joueur l'info clé : argent, vague actuelle, vie de la base. Le « polish » (sons, feedback, menu) transforme un prototype en jeu. Puis File → Publish to Roblox pour le mettre en ligne.

Checklist de finition

  • HUD à l'écran : argent, n° de vague, vie de la base
  • Un menu de départ (bouton « Jouer »)
  • Du feedback : son ou effet quand un ennemi meurt / la base est touchée
  • Aucun bug bloquant sur une partie complète
  • Jeu publié sur Roblox (visible en ligne)
  • Testé par au moins 2 personnes + corrections faites

📷 Captures du jeu fini

📷Le jeu en cours (HUD visible)
🏆Écran de victoire ou défaite

🔗 Lien du jeu publié sur Roblox

❓ Bilan du projet : qu'est-ce que les testeurs ont dit ? Qu'as-tu corrigé ? Qu'ajouterais-tu dans une V2 ?

🧠

Validation finale

À remplir seul, SANS l'IA

1. Décris la boucle de jeu complète de ton Tower Defense, du spawn d'un ennemi à sa mort.

2. Pourquoi le placement des tours et les dégâts sont gérés côté serveur ?

3. Comment un ennemi suit-il le chemin ? Et comment une tour choisit-elle sa cible ?

4. Cite 2 nombres que tu as réglés pour équilibrer le jeu, et l'effet de chacun.

5. Qu'est-ce qui a été le plus dur, et comment Claude Code t'a aidé à t'en sortir ?