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é.
🎨
Demande aussi le style, pas que la technique.
À chaque création, précise à Claude le thème visuel (fantasy, futuriste, jouet…), les matériaux & couleurs, l'éclairage et des décors. Les prompts ci-dessous incluent déjà le décor — adapte le thème à ton goût.
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" avec 8 parts ancrés formant un chemin sinueux, du bord jusqu'à une "Base" à l'autre bout. Donne à la carte un thème visuel (ex : prairie fantasy, désert, base futuriste) : terrain et matériaux assortis, une base au design soigné (couleur, forme, lumière), et quelques décors autour (arbres, rochers, cristaux selon le thème).
Puis →Trace le chemin visuellement avec des parts plats reliant les waypoints (texture de sentier/dalle assortie au thème), pour qu'on voie bien 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 (un modèle avec Humanoid et de la vie) au design stylisé et assorti au thème (forme, couleur, petite touche de caractère) 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 au design soigné et assorti au thème (socle, canon, couleur). 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 ?

💎

Jalon BONUS — Monétisation & Pass de combat

Optionnel · Game Pass, produits, et un pass de combat à paliers

Stretch goal▼
⚠️
À faire seulement quand la V1 est finie et publiée. La monétisation, c'est du bonus — ne la commence pas avant que le jeu soit jouable de bout en bout.
📚
Concepts : deux outils via MarketplaceService — un Game Pass = achat permanent (ex : « Pass premium »), un Developer Product = achat répétable (ex : 500 pièces). Un pass de combat n'est pas natif : on le construit = un Game Pass « premium » + une progression maison (XP → paliers → récompenses) sauvegardée en DataStore.
Aucun compte spécial pour créer et tester. Encaisser l'argent réel (DevEx) demande Premium + 13 ans + vérification — pas nécessaire pour apprendre.
B.1 — Créer un Game Pass

Sur le Creator Dashboard (create.roblox.com) → ton expérience → Associated Items → Passes → Create a Pass. Nomme-le (ex : « Pass de combat premium »), mets un prix en Robux, et note son ID.

📷Capture du Game Pass créé (avec son ID)
B.2 — Proposer l'achat & vérifier la possession
Tape →Ajoute un bouton "Pass premium" : au clic, propose l'achat du Game Pass [METS_TON_ID] avec MarketplaceService:PromptGamePassPurchase. Au lancement, vérifie avec UserOwnsGamePassAsync si le joueur le possède déjà.

❓ Pourquoi vérifie-t-on la possession côté serveur avec UserOwnsGamePassAsync, et pas juste côté client ?

B.3 — Le pass de combat (paliers)
Tape →Crée un pass de combat : le joueur gagne 10 XP par ennemi tué, avec 10 paliers (100 XP chacun). Chaque palier donne une récompense sur la piste gratuite (pièces), et une meilleure récompense sur la piste premium réservée aux possesseurs du Game Pass. Sauvegarde l'XP et les paliers réclamés en DataStore.
Puis →Ajoute une interface qui montre les paliers, l'XP actuel, et un bouton "Réclamer" par palier débloqué.
📷Capture de l'interface du pass de combat

❗ Obligatoire : explique comment le jeu sait quel palier le joueur a atteint et lesquels il a déjà réclamés (rôle du DataStore).

B.4 — Un produit répétable (Developer Product)
Tape →Crée un Developer Product "500 pièces" : au clic propose l'achat, et dans ProcessReceipt ajoute 500 pièces au joueur côté serveur de façon sécurisée.

❓ Différence entre un Game Pass et un Developer Product ? Donne un exemple d'usage de chacun dans ton TD.

🎯 Jalon bonus atteint : ton jeu a une vraie économie monétisable (permanent + consommable + pass de combat).
🧠

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 ?