Voici les 10 mini-projets interactifs ! Cliquez sur les défi01 à défi10 pour naviguer entre les projets.
Chaque fiche contient :
- la description du jeu, les règles,
- les compétences Lua acquises,
- un QCM de 5 questions
La progression suit une logique pédagogique :
- défi01 à défi03 : bases Roblox (Parts, inputs, GUI)
- défi04 à défi06 : communication réseau, physique, effets visuels
- défi07 à défi09 : animations, interactions avancées, données persistantes
- défi10 : projet complet qui réutilise tout, avec architecture modulaire
Défi 01 : La Zone Mortelle
Description
Une arène parsemée de briques rouges mortelles. Le joueur doit traverser un espace sans toucher les parts mortels. Au contact d’un part mortel, son personnage meurt instantanément (Humanoid.Health = 0). Des zones sûres (parts verts) permettent de souffler avant d’atteindre une zone or.
Optimise son jeu pour avoir un minimum de script.
Règles du jeu
Rejoignez l’arène. Atteignez la brique dorée à l’autre bout sans toucher les zones rouges. Chaque mort vous remet au départ. Pas de limite de tentatives.
Compétences acquises
- Touched Event
- Humanoid.Health
- BasePart properties
- Script vs Local
- ScriptInstance.Name
- for _ , part in ipair(parts:GetChildren())
- Reconnaître un Humanoid
- Gérer les collisions
QCM — Testez vos connaissances
1. Quel événement Roblox détecte le contact avec une part ?
- OnTouch
- Touched
- Hit
- Collide
2. Pour tuer un personnage, on modifie quelle propriété du Humanoid ?
- MaxHealth
- WalkSpeed
- Health
- Jump
3. Où place-t-on un Script qui affecte le serveur ?
- StarterGui
- ReplicatedStorage
- ServerScriptService
- LocalScript
4. Comment récupérer le Humanoid d’un personnage touché ?
- hit.Humanoid
- hit.Parent:FindFirstChild(‘Humanoid’)
- game.Players.Humanoid
- workspace.Humanoid
5. Quelle propriété rend une Part non-solide mais visible ?
- Transparency = 0
- CanCollide = false
- Anchored = true
- Locked = true
Défi 02 : Speed Runner
Touches clavier & compétences joueur
Description
Un couloir d’obstacles où le joueur peut débloquer des compétences en appuyant sur des touches. Appuyez sur [E] pour activer un boost de vitesse temporaire, [Q] pour sauter plus haut, [R] pour un double saut. Les compétences ont un cooldown visible.
Règles du jeu
Parcourez le couloir le plus vite possible. Utilisez vos touches de compétences au bon moment. Franchissez la ligne d’arrivée. Votre temps est affiché.
Compétences acquises
- UserInputService
- ContextAction
- ServiceHumanoid.WalkSpeed
- Humanoid.Jump
- Powercooldown avec tick()
QCM — Testez vos connaissances
- Quel service Roblox gère les entrées clavier côté client ?
- InputServiceUser
- InputService
- KeyboardService
- ContextService
2. Dans quel type de script utilise-t-on UserInputService ?
- ScriptModule
- ScriptLocal
- ScriptServer
- Script
3. Comment détecter l’appui sur la touche E ?
- Enum.KeyCode.E
- Key.E
- Input.E
- Keyboard.E
4. Quelle propriété du Humanoid contrôle la vitesse de marche ?
- Speed
- RunSpeed
- WalkSpeed
- MoveSpeed
5. tick() retourne quoi en Lua Roblox ?
- Le tick d’horloge en ms
- Le temps en secondes depuis le lancement
- Le framerate actuel
- Le temps depuis le début de la partie
Défi 03 : Le Magasin de Pouvoirs
GUI & ScreenGui
Description
Un magasin en jeu affiché via un ScreenGui. Le joueur ouvre l’interface avec [G] et voit une liste de pouvoirs à acheter (vitesse, saut, bouclier). Chaque pouvoir a un prix en pièces d’or ramassées dans le monde. L’achat est confirmé par un bouton.
Règles du jeu
Collectez des pièces d’or dans la carte. Appuyez sur [G] pour ouvrir la boutique. Achetez des pouvoirs avec vos pièces. Activez vos pouvoirs via les touches attribuées.
Compétences acquises
- ScreenGui & Frame
- TextButton.MouseButton1Click
- RemoteEvent (achat)
- leaderstats basiques
- Visible toggle
QCM — Testez vos connaissances
- Où place-t-on un ScreenGui pour qu’il s’affiche à tous les joueurs ?
- Workspace
- StarterGui
- ReplicatedStorage
- ServerStorage
2. Quel événement déclenche un clic sur un TextButton ?
- MouseButton1Click
- Clicked
- OnClick
- Activated
3. Comment rendre une Frame invisible via Script ?
- Frame.Hide()
- Frame.Enabled = false
- Frame.Visible = false
- Frame.Alpha = 0
4. Un RemoteEvent sert à quoi ?
- Communiquer entre LocalScript et Script serveur
- Créer des GUI
- Détecter les touches
- Gérer les collisions
5. Pour déclencher un RemoteEvent depuis le client vers le serveur, on utilise ?
- RemoteEvent:FireServer()
- RemoteEvent:FireClient()
- RemoteEvent:Send()
- RemoteEvent:Trigger()
Défi 04 : La Porte Télékinésique
RemoteEvents & communication Client/Sserveur
Description
Des portes et pièges contrôlés en réseau. Quand un joueur marche sur un bouton (Part), un RemoteEvent notifie le serveur qui ouvre la porte correspondante pour TOUS les joueurs. Des pièges s’activent de même en temps réel.
Règles du jeu
Explorez la carte coopérativement. Trouvez les boutons cachés qui ouvrent des portes. Un joueur peut sacrifier sa position pour ouvrir le chemin à ses coéquipiers. Atteignez la sortie ensemble.
Compétences acquises
- RemoteEvent:FireServer
- RemoteEvent:FireClient
- RemoteEvent.OnServerEvent
- ReplicatedStorage
- synchronisation multi-joueurs
QCM — Testez vos connaissances
1. Où stocke-t-on les RemoteEvents accessibles client ET serveur ?
- ServerStorage
- ServerScript
- ServiceReplicated
- StorageStarterGui
2. OnServerEvent est connecté dans quel type de script ?
- LocalScript
- Script (serveur)
- ModuleScript
- PluginScript
3. FireClient() envoie un event à ?
- Tous les joueurs
- Un joueur spécifique
- Le serveur
- Le workspace
4. FireAllClients() envoie à ?
- Un joueur
- Le serveur uniquement
- Tous les clients connectés
- Les NPC seulement
5. Quel est le premier paramètre reçu par OnServerEvent ?
- Les données envoyées
- Le joueur (Player) émetteur
- Le nom du Remote
- Eventnil
Défi 05 : Les Plateformes Mobiles
Mouvement de Parts via Script
Description
Des plateformes qui se déplacent selon des trajectoires (haut/bas, gauche/droite, circulaire). Certaines accélèrent, d’autres s’arrêtent selon des conditions (joueur dessus, timer). Utilisez RunService ou des boucles pour animer les positions.
Règles du jeu
Sautez de plateforme en plateforme pour atteindre la tour centrale. Les plateformes bougent en continu. Certaines disparaissent après 3 secondes de contact. Atteignez le sommet.
Compétences acquises
- CFrame et Vector3
- RunService.Heartbeat
- while true do / wait()
- math.sin() pour oscillation
- Anchored vs non-Anchored
1. Quelle propriété utilise-t-on pour déplacer une Part sans physique ?
- Position seule
- CFrame
- Velocity
- MoveDirection
2. RunService.Heartbeat s’exécute à quelle fréquence ?
- 1 fois/seconde
- Chaque frame (~60fps)
- 10 fois/seconde
- À la demande
3. math.sin() est utile pour créer quel type de mouvement ?
- Téléportation
- Mouvement linéaire
- Oscillation fluide
- Rotation fixe
4. Une part Anchored peut-elle être déplacée par CFrame ?
- Non, elle est immobile
- Oui, le script peut changer son CFrame
- Seulement par les joueurs
- Seulement via TweenService
5. Vector3.new(0, 5, 0) représente quoi ?
- Un déplacement de 5 studs vers le bas
- Un déplacement de 5 studs vers le haut
- Une rotation de 5 degré
- sUne mise à l’échelle de 5
Défi 06 : L’Atelier des Effets
ParticleEmitter & effets visuels
Description
Un laboratoire où le joueur active différents effets visuels : feu, fumée, étincelles, traînées de lumière. Des zones déclenchent des effets via Touched. Le joueur peut ramasser un ‘orbe de feu’ qui attache un effet de flamme à son personnage.
Règles du jeu
Explorez le laboratoire et touchez les zones d’activation. Ramassez des orbes pour équiper des effets sur votre personnage. Certains effets boostent vos stats en plus d’être visuels.
Compétences acquises
- ParticleEmitter
- Fire & Smoke objects
- Attachment points
- Enabled toggle
- PointLight & SpotLight
1. Où attache-t-on un ParticleEmitter dans un modèle 3D ?
- Directement dans Workspace
- Dans un Attachment ou une Part
- Dans StarterGui
- Dans ServerStorage
2. Comment activer/désactiver un ParticleEmitter ?
- ParticleEmitter.Start()
- ParticleEmitter.Enabled = true/false
- ParticleEmitter.Visible = true/false
- ParticleEmitter.Rate = 0
3. L’objet Fire de Roblox simule quoi ?
- Un effet de lumière uniquement
- Des flammes visuelles directement sur une Part
- Un dégât de brûlure
- Une explosion
4. Un PointLight émet la lumière dans quelle direction ?
- Devant la Part
- Dans toutes les directions
- Vers le haut uniquement
- Vers le bas uniquement
5. La propriété Rate d’un ParticleEmitter contrôle quoi ?
- La taille des particules
- La couleur
- Le nombre de particules émises par seconde
- La durée de vie du ParticleEmitter
Défi 07 : L’Ascenseur Magique
TweenService & animations fluides
Description
Des ascenseurs, portes coulissantes et objets animés avec TweenService. Les transitions sont fluides grâce aux EasingStyle. Un boss oscille sur place avec un Tween en boucle. Des récompenses s’animent quand ramassées (scale up/down).
Règles du jeu
Utilisez les ascenseurs pour monter les étages. Chaque étage déverrouille une porte animée. Ramassez les cristaux (avec animation) pour gagner des points. Atteignez le dernier étage.
Compétences acquises
- TweenService:Create()
- TweenInfoEasing
- Style & Easing
- DirectionTween:Play() / Pause() / Cancel()
- Tween.Completed event
1. Quel service Roblox gère les transitions animées ?
- AnimationService
- TweenService
- RunService
- PhysicsService
2. TweenInfo.new() prend quoi comme premier paramètre ?
- EasingStyle
- La durée en secondes
- L’objet à animer
- Le nombre de répétitions
3. EasingStyle.Bounce donne quel effet ?
- Mouvement linéaire
- Rebond à la fin de l’animation
- Accélération progressive
- Pause au milieu
4. Comment déclencher quelque chose APRÈS la fin d’un Tween ?
- Tween.OnComplete()
- Tween.Completed:Wait()
- wait(tween.duration)
- TweenService.OnDone()
5. Peut-on tweener la couleur (Color3) d’une Part ?
- Non, seulement la position
- Oui, Color3 est une propriété tweénable
- Seulement via ParticleEmitter
- Seulement avec des scripts serveur
Défi 08 : Le Marchand & Le Détective
ProximityPrompt & ClickDetector
Description
Des PNJ (statues) équipés de ProximityPrompts affichent un menu de dialogue et de commerce quand on s’approche. Des objets dans le décor ont des ClickDetectors qui révèlent des indices. Un coffre s’ouvre au clic après avoir collecté tous les indices.
Règles du jeu
Approchez-vous des PNJ pour interagir. Cliquez sur les éléments suspects pour trouver les 5 indices. Apportez les indices au bon PNJ pour ouvrir le coffre au trésor.
Compétences acquises
- ProximityPrompt.TriggeredClick
- Detector.MouseClick
- distance d’interaction
- GUI contextuel
- état de jeu (indices trouvés)
1. ProximityPrompt.Triggered est écouté depuis quel script ?
- Uniquement LocalScript
- Script serveur uniquement
- Les deux sont possibles
- ModuleScript seulement
2. Quelle propriété définit la distance d’activation d’un ProximityPrompt ?
- RangeMax
- ActivationDistance
- TriggerRadius
- ActivationDistance
3. ClickDetector.MouseClick passe quoi comme argument ?
- La Part cliquée
- Le Player qui a cliqué
- Les coordonnées du clic
- Nil
4. Comment afficher un texte personnalisé sur un ProximityPrompt ?
- ProximityPrompt.Label
- ProximityPrompt.Action
- TextProximityPrompt.Text
- ProximityPrompt.Title
5. Quelle est la différence principale entre ClickDetector et ProximityPrompt ?
- Aucune différence
- ClickDetector nécessite un clic, ProximityPrompt une touche en s’approchant
- ProximityPrompt est plus ancien
- ClickDetector fonctionne sans script
Défi 09 : Le Grand Tournoi
Leaderstats & tableau de score
Description
Un jeu de compétition avec un classement en temps réel (leaderstats). Points gagnés en touchant des zones, en éliminant des adversaires (PvP désactivable) ou en terminant des épreuves. Le score se met à jour pour tous via le tableau Roblox natif.
Règles du jeu
Accumulez des points en 5 minutes. Éliminez des adversaires (+10pts), touchez des zones (+5pts), finissez des épreuves bonus (+25pts). Le joueur avec le plus de points gagne.
Compétences acquises
- leaderstats dans PlayerAdded
- IntValue & StringValue
- PlayerRemoving cleanup
- tri et classement
- DataStoreService (sauvegarde basique)
1. Comment créer les leaderstats d’un joueur ?
- Directement dans Workspace
- Folder nommé ‘leaderstats’ dans le Player
- Dans ReplicatedStorage
- Via un RemoteEvent
2. Quel événement se déclenche quand un joueur rejoint la partie ?
- Players.PlayerJoined
- Players.PlayerAdded
- Players.New
- PlayerPlayers.OnJoin
3. Quelle valeur utilise-t-on pour stocker un nombre entier dans leaderstats ?
- NumberValue
- IntValue
- FloatValu
- eStringValue
4. DataStoreService sert à quoi ?
- Afficher le leaderboard
- Persister des données entre les sessions
- Communiquer entre scripts
- Gérer les équipes
5. PlayerRemoving est utile pour ?
- Accueillir le joueur
- Sauvegarder les données avant que le joueur parte
- Réinitialiser la map
- Ajouter des points
Défi 10 : ROBLOX ADVENTURE COMPLETE
Jeu complet — tous les concepts
Description
Un jeu d’aventure complet qui intègre les 9 compétences précédentes : une carte avec zones mortelles (P1), des compétences débloquables (P2), une boutique GUI (P3), des events réseau (P4), des plateformes mobiles (P5), des effets visuels (P6), des animations TweenService (P7), des PNJ interactifs (P8) et un leaderboard complet (P9). Plusieurs niveaux, un boss final avec patterns d’attaque.
Règles du jeu
Traversez 3 zones distinctes (Forêt des Pièges, Tour des Pouvoirs, Donjon du Boss). Collectez des cristaux, achetez des améliorations, interagissez avec les PNJ, esquivez les obstacles animés. Battez le boss final et terminez premier au classement. Progression sauvegardée.
Compétences acquises
- Architecture modulaire (ModuleScript)
- Toutes les compétences P1-P9
- Gestion d’état global
- Équipes & rounds
- Optimisation & bonnes pratiques
1. Un ModuleScript retourne quoi en général ?
- Nil
- Un tableau ou une fonction
- Un RemoteEvent
- Une GUI
2. Pour partager du code entre plusieurs scripts, on utilise ?
- Copy-paste du code
- ModuleScript + require()
- RemoteEvent
- Un Script dans Workspace
3. Quelle pratique évite les memory leaks avec les events ?
- Utiliser task.wait()
- Déconnecter les connexions avec :Disconnect()
- Supprimer les RemoteEvents
- Utiliser des LocalScripts uniquement
4. task.spawn() est préféré à coroutine.wrap() car ?
- Il est plus lent
- Il est intégré au scheduler Roblox et plus sûr
- Il ne fonctionne qu’en serveur
- Il bloque le thread principal
5. Dans une architecture propre, où stocke-t-on les ModuleScripts partagés ?
- Workspace
- StarterGui
- ReplicatedStorage ou ServerScript
- ServiceStarterPack
Répondez aux 5 question(s) restante(s)…
