Objectif : Apprendre à créer des blocs de code réutilisables et à organiser ton projet comme un vrai développeur. Fini le copier-coller sauvage !
Crée une fois, utilise partout !
Imagine que tu dois faire une omelette 10 fois par jour. Tu pourrais réécrire la recette à chaque fois... ou l'écrire une seule fois et la réutiliser. Les fonctions, c'est exactement ça : des recettes de code que tu appelles quand tu en as besoin.
Une fonction est un bloc de code qui a un nom. Tu peux l'appeler (l'exécuter) autant de fois que tu veux, sans réécrire le code.
On utilise le mot-clé function suivi du nom qu'on veut lui donner :
Syntaxe d'une fonction
local function direBonjour()
print("Bonjour, bienvenue dans le jeu !")
end
local function ? On crée une fonction locale
direBonjour ? Le nom de la fonction (choisis un nom
clair !)
() ? Les parenthèses (pour les paramètres, on verra
ça après)
end ? Fin de la fonction
Créer une fonction ne l'exécute PAS automatiquement. Il faut l'appeler :
local function direBonjour()
print("Bonjour, bienvenue dans le jeu !")
end
-- Rien ne se passe encore...
direBonjour() -- Appel 1 : "Bonjour, bienvenue dans le jeu !"
direBonjour() -- Appel 2 : "Bonjour, bienvenue dans le jeu !"
direBonjour() -- Appel 3 : "Bonjour, bienvenue dans le jeu !"
Tu dois définir la fonction AVANT de l'appeler. Sinon, Luau ne la connaît pas encore et tu auras une erreur.
Voici une fonction qui fait clignoter une Part :
Fonction de clignotement
local maPart = script.Parent
local function faireClignoter()
maPart.Transparency = 1 -- Invisible
task.wait(0.5)
maPart.Transparency = 0 -- Visible
task.wait(0.5)
end
-- Faire clignoter 3 fois
faireClignoter()
faireClignoter()
faireClignoter()
print("Clignotement terminé !")
Et si tu voulais que ta fonction de clignotement puisse clignoter n'importe quelle Part ? C'est là qu'interviennent les paramètres.
C'est une variable "placeholder" que tu définis entre les parenthèses. Elle sera remplacée par une vraie valeur quand tu appelleras la fonction.
Fonction avec paramètre
local function saluer(prenom)
print("Salut " .. prenom .. " ! Bienvenue !")
end
saluer("Alex") -- "Salut Alex ! Bienvenue !"
saluer("Jordan") -- "Salut Jordan ! Bienvenue !"
saluer("Sam") -- "Salut Sam ! Bienvenue !"
Tu peux avoir autant de paramètres que tu veux, séparés par des virgules :
local function afficherStats(pseudo, niveau, xp)
print("=== Profil Joueur ===")
print("Pseudo : " .. pseudo)
print("Niveau : " .. niveau)
print("XP : " .. xp)
end
afficherStats("LearnBloxer", 42, 15000)
afficherStats("ProGamer99", 100, 999999)
Une fonction peut aussi renvoyer un résultat avec return :
Fonction avec retour
local function calculerDegats(force, arme)
local degats = force * arme
return degats -- On renvoie le résultat
end
local degatsCoup = calculerDegats(10, 5)
print("Tu infliges " .. degatsCoup .. " dégâts !") -- 50 dégâts
return arrête immédiatement la fonction. Tout code
après un return ne sera jamais exécuté !
Système de combat complet
local function attaquer(attaquant, cible, degatsBase)
local degatsFinaux = degatsBase * 1.5 -- Bonus de 50%
print(attaquant .. " attaque " .. cible .. " !")
print("Dégâts infligés : " .. degatsFinaux)
return degatsFinaux
end
local degats = attaquer("Guerrier", "Goblin", 20)
-- "Guerrier attaque Goblin !"
-- "Dégâts infligés : 30"
Maintenant que tu sais créer des fonctions, apprenons les bonnes pratiques pour garder un code propre et maintenable.
Le scope, c'est "où" une variable existe. Une variable créée dans une fonction n'existe QUE dans cette fonction :
local function maFonction()
local variableLocale = "Je suis locale"
print(variableLocale) -- ? Fonctionne
end
maFonction()
print(variableLocale) -- ? ERREUR ! La variable n'existe plus ici
Créée avec local. N'existe que dans son bloc
(fonction, boucle, condition).
local maVar = "locale"
Sans local. Accessible partout.
À éviter !
maVar = "globale" -- ❌
Les variables globales peuvent être modifiées n'importe où, ce
qui rend le débogage cauchemardesque. Utilise
toujours local.
DRY = Don't Repeat Yourself (Ne te répète pas). C'est LA règle d'or du développeur.
print("Joueur 1 gagne 10 XP")
xp1 = xp1 + 10
print("Joueur 2 gagne 10 XP")
xp2 = xp2 + 10
print("Joueur 3 gagne 10 XP")
xp3 = xp3 + 10
local function gagnerXP(joueur, xp)
print(joueur .. " gagne " .. xp .. " XP")
return xp
end
gagnerXP("Joueur 1", 10)
gagnerXP("Joueur 2", 10)
gagnerXP("Joueur 3", 10)
Un bon nom de fonction doit être clair et descriptif. Utilise des verbes d'action :
calculerDegats() - On sait ce que ça faitouvrirPorte() - Action claireestVivant() - Pour les fonctions qui retournent un
boolean
fonction1() - Trop vaguex() - IncompréhensibleLe générateur alimente TOUT : lumières, portes, alarmes. Sans ⚡ Énergie = Game Over !
Modules 1-3 terminés (station + éclairage + sas)
Home ? Part ? Cylinder. Configure le générateur :
Clic droit sur Generateur → Insert Object → Script
À toi de créer les fonctions pour gérer l'énergie !
generateur,
energieMax (100),
energieActuelle (0)
produireEnergie(quantite) qui ajoute de
l'énergie
consommerEnergie(quantite) qui retire de
l'énergie
mettreAJourVisuel() qui
change la couleur selon le niveau
Ajoute une boucle pour tester ton générateur :
while true do
produireEnergie(20) puis
mettreAJourVisuel()
task.wait(2)
consommerEnergie(15) puis
mettreAJourVisuel()
Lance le jeu (F5). Le générateur change de couleur selon le niveau :
N'oublie pas de sauvegarder ton travail !
Prochaine étape → Module 5 : Zone de minage (collecte des 💎 Matériaux)
Le réacteur est le cœur de ta station ! Sans ⚡ Énergie, les portes ne s'ouvrent plus, les lumières s'éteignent... Utilise les fonctions pour créer un système de gestion d'énergie intelligent.
Le réacteur sera placé dans une nouvelle salle accessible depuis le Hub. Voici la structure à créer dans Workspace → Station :
Crée un Model nommé
SalleReacteur dans ta Station, puis ajoute le sol :
Ajoute les 4 murs (hauteur 12, épaisseur 1) autour de la salle. Laisse une ouverture côté Hub pour le passage !
Position pour aligner parfaitement les ouvertures
!
Le réacteur est un Cylinder imposant au centre de la salle. Il brillera différemment selon le niveau d'énergie !
Ajoute une PointLight dans le réacteur pour l'effet lumineux :
Voici le script complet qui utilise
les fonctions du cours ! Crée un
Script dans le Réacteur nommé
GestionEnergie :
-- GestionEnergie.lua
-- Gère l'énergie de la station spatiale
local reacteur =
script.Parent
local lumiere =
reacteur:FindFirstChild("PointLight")
-- Configuration de l'énergie
local ENERGIE_MAX =
100
local energieActuelle =
50
-- Démarre à 50%
-- FONCTION 1 : Calculer le pourcentage d'énergie
local function
getPourcentage()
return (energieActuelle /
ENERGIE_MAX) * 100
end
-- FONCTION 2 : Obtenir la couleur selon le niveau
local function
getCouleurEnergie(pourcentage)
if pourcentage >=
75
then
return
Color3.fromRGB(0, 255,
127)
-- Vert
elseif pourcentage >=
40
then
return
Color3.fromRGB(255, 165,
0)
-- Orange
else
return
Color3.fromRGB(255, 50,
50)
-- Rouge
end
end
-- FONCTION 3 : Mettre à jour le visuel du réacteur
local function
mettreAJourVisuel()
local pct =
getPourcentage()
local couleur =
getCouleurEnergie(pct)
reacteur.Color = couleur
if lumiere
then lumiere.Color = couleur
lumiere.Brightness = 1 + (pct /
50)
-- Plus brillant si plein
end
print("⚡ Énergie:", math.floor(pct) ..
"%")
end
-- FONCTION 4 : Produire de l'énergie
local function
produireEnergie(quantite)
energieActuelle =
math.min(energieActuelle +
quantite, ENERGIE_MAX)
mettreAJourVisuel()
return energieActuelle
end
-- FONCTION 5 : Consommer de l'énergie
local function
consommerEnergie(quantite)
if energieActuelle >= quantite
then
energieActuelle = energieActuelle - quantite
mettreAJourVisuel()
return
true
-- Succès
else
warn("⚠️ Énergie insuffisante!") return
false
-- Échec
end
end
-- BOUCLE PRINCIPALE : Simulation
mettreAJourVisuel()
-- Affichage initial
while
true
do
task.wait(3) produireEnergie(15) -- Le réacteur génère
task.wait(2) consommerEnergie(10) -- La station consomme
end
local function nomFonction() → Créer une
fonctionreturn valeur → Retourner un résultatgetCouleurEnergie(pct)produireEnergie(quantite)
Lance le jeu avec F5 et observe :
Regarde la console Output pour voir les messages de debug avec le pourcentage d'énergie en temps réel !
Tu veux aller plus loin ? Essaie d'ajouter ces fonctionnalités :
getStatut() qui retourne
"OPTIMAL", "MOYEN", ou "CRITIQUE"
lumiere.Brightness de façon
oscillante !
Ta station a maintenant un système d'énergie intelligent avec 5 fonctions ! → Module 5 : Zone de collecte de ressources