Fonctions & Organisation

Objectif : Apprendre à créer des blocs de code réutilisables et à organiser ton projet comme un vrai développeur. Fini le copier-coller sauvage !

Les Recettes de Code

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.

1. Les Fonctions (Blocs Réutilisables)

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.

1.1 Créer une Fonction

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
Décortiquons le code

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

1.2 Appeler une 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 !"
⚠️ L'Ordre est Important !

Tu dois définir la fonction AVANT de l'appeler. Sinon, Luau ne la connaît pas encore et tu auras une erreur.

1.3 Exemple Concret : Effet Visuel

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é !")

2. Les Paramètres (Personnaliser les Fonctions)

Et si tu voulais que ta fonction de clignotement puisse clignoter n'importe quelle Part ? C'est là qu'interviennent les paramètres.

2.1 Qu'est-ce qu'un Paramètre ?

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 !"

2.2 Plusieurs Paramètres

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)

2.3 La Valeur de Retour (return)

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

Astuce de Pro

return arrête immédiatement la fonction. Tout code après un return ne sera jamais exécuté !

2.4 Exemple Avancé : Système de Dégâts

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"

3. Scope & DRY (Organiser son Code)

Maintenant que tu sais créer des fonctions, apprenons les bonnes pratiques pour garder un code propre et maintenable.

3.1 Le Scope (Portée des Variables)

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
Variable Locale

Créée avec local. N'existe que dans son bloc (fonction, boucle, condition).

local maVar = "locale"
Variable Globale

Sans local. Accessible partout. À éviter !

maVar = "globale" -- ❌
🚨 Évite les Globales !

Les variables globales peuvent être modifiées n'importe où, ce qui rend le débogage cauchemardesque. Utilise toujours local.

3.2 Le Principe DRY

DRY = Don't Repeat Yourself (Ne te répète pas). C'est LA règle d'or du développeur.

? Code WET (répétitif)
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
✅ Code DRY (fonction)
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)

3.3 Nommer ses Fonctions

Un bon nom de fonction doit être clair et descriptif. Utilise des verbes d'action :

  • calculerDegats() - On sait ce que ça fait
  • ouvrirPorte() - Action claire
  • estVivant() - Pour les fonctions qui retournent un boolean
  • fonction1() - Trop vague
  • x() - Incompréhensible
💻 Sandbox Luau
Simulateur v2.0
1 2 3 4 5 6 7 8 9 10 11 12
👉 Clique sur Exécuter pour tester ton code...

Quiz : Fonctions & Organisation

5 questions pour valider tes acquis

1. Quel mot-clé utilise-t-on pour créer une fonction ?

  • def
  • function
  • func
  • method

2. Comment appelle-t-on une fonction nommée "direBonjour" ?

  • call direBonjour
  • run direBonjour
  • direBonjour()
  • direBonjour!

3. Que signifie le principe DRY ?

  • Do Repeat Yourself
  • Don't Repeat Yourself
  • Debug Run Yes
  • Delete Remaining Ycode

4. Quel mot-clé permet à une fonction de renvoyer une valeur ?

  • send
  • output
  • return
  • give

5. Pourquoi faut-il éviter les variables globales ?

  • Elles sont plus lentes
  • Elles rendent le débogage difficile
  • Elles consomment trop de mémoire
  • Elles sont interdites en Luau
Challenge Code

Crée ta Fonction

Complète ce script pour créer une fonction qui calcule le double d'un nombre.

15-50 Points
Fonction.lua
-- Fonction qui calcule les dégâts d'une attaque
local function (force, multiplicateur)
  local degats = force multiplicateur
  return -- Que retourne-t-on ?
end
-- Utilise la fonction avec force=10, multiplicateur=2
local resultat = calculerDegats(, 2)
print(resultat) -- Affiche: 20
Étape 4/10

Générateur Central

Le générateur alimente TOUT : lumières, portes, alarmes. Sans ⚡ Énergie = Game Over !

1
2
3
4
5
6
7
8
9
10
Prérequis

Modules 1-3 terminés (station + éclairage + sas)

Crée le générateur d'énergie

1
Crée le Générateur

Home ? Part ? Cylinder. Configure le générateur :

Size6, 8, 6
MaterialDiamondPlate
ColorMedium stone grey
NameGenerateur
Anchored
2
Ajoute le Script avec Fonctions

Clic droit sur Generateur → Insert Object → Script

À toi de créer les fonctions pour gérer l'énergie !

À toi de coder !
1. Crée les variables : generateur, energieMax (100), energieActuelle (0)
💡 Utilise script.Parent pour référencer le générateur
2. Crée une fonction produireEnergie(quantite) qui ajoute de l'énergie
💡 N'oublie pas de vérifier qu'on ne dépasse pas energieMax !
3. Crée une fonction consommerEnergie(quantite) qui retire de l'énergie
💡 Retourne true si assez d'énergie, false sinon
4. Crée une fonction mettreAJourVisuel() qui change la couleur selon le niveau
💡 Vert > 75%, Orange > 25%, Rouge sinon. Utilise Enum.Material.Neon
🔒
Solution verrouillée
Essaie d'abord par toi-même avec les indices ci-dessus !
3
Utilise tes Fonctions

Ajoute une boucle pour tester ton générateur :

À toi de coder !
1. Crée une boucle infinie while true do
2. Appelle produireEnergie(20) puis mettreAJourVisuel()
3. Attends 2 secondes avec task.wait(2)
4. Appelle consommerEnergie(15) puis mettreAJourVisuel()
5. Attends encore 2 secondes
🔒
Solution verrouillée
Essaie d'abord par toi-même !
4
Observe le Résultat

Lance le jeu (F5). Le générateur change de couleur selon le niveau :

  • 🟢 Vert = Plus de 75%
  • 🟠 Orange = Entre 25% et 75%
  • 🔴 Rouge = Moins de 25%
5
Sauvegarde (Ctrl+S)

N'oublie pas de sauvegarder ton travail !

Générateur terminé !

Prochaine étape → Module 5 : Zone de minage (collecte des 💎 Matériaux)

🚀 SURVIE SPATIALE - Étape 4/10

Réacteur & Système d'Énergie

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.

1
2
3
4
5
6
7
8
9
10
Rappel de l'histoire : Ta station spatiale possède déjà un Hub central, une Salle de Contrôle avec éclairage, et un Sas intelligent. Aujourd'hui, tu vas créer le réacteur qui alimentera tout en énergie !
1
📐 Architecture du Réacteur

Le réacteur sera placé dans une nouvelle salle accessible depuis le Hub. Voici la structure à créer dans Workspace → Station :

▼ Station
📦 Hub (existant)
📦 SalleControle (existant)
📦 Sas (existant)
▼ 📦 SalleReacteur (nouveau!)
🧱 Sol
🧱 Mur_Nord
🧱 Mur_Sud
🧱 Mur_Est
🧱 Mur_Ouest
⚡ Reacteur
📜 GestionEnergie
💡 LumiereAmbiance
2
🏗️ Construire la Salle du Réacteur

Crée un Model nommé SalleReacteur dans ta Station, puis ajoute le sol :

NameSol
Size24, 1, 24
MaterialDiamondPlate
Color[40, 40, 45]
Anchored

Ajoute les 4 murs (hauteur 12, épaisseur 1) autour de la salle. Laisse une ouverture côté Hub pour le passage !

Position : Place la salle à côté du Hub, accessible via le Couloir_Est. Utilise Position pour aligner parfaitement les ouvertures !
3
⚡ Créer le Réacteur Central

Le réacteur est un Cylinder imposant au centre de la salle. Il brillera différemment selon le niveau d'énergie !

NameReacteur
ShapeCylinder
Size10, 6, 6
MaterialNeon
Color[0, 255, 127]
Orientation0, 0, 90
Anchored

Ajoute une PointLight dans le réacteur pour l'effet lumineux :

Brightness2
Range30
Color[0, 255, 127]
4
📜 Script GestionEnergie avec Fonctions

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
Concepts du cours appliqués :
local function nomFonction() → Créer une fonction
return valeur → Retourner un résultat
• Appeler une fonction dans une autre → getCouleurEnergie(pct)
• Paramètres → produireEnergie(quantite)
5
🎮 Tester le Système

Lance le jeu avec F5 et observe :

  • 🟢 Vert brillant → Énergie > 75%
  • 🟠 Orange → Énergie entre 40% et 75%
  • 🔴 Rouge clignotant → Énergie < 40% (danger !)

Regarde la console Output pour voir les messages de debug avec le pourcentage d'énergie en temps réel !

Pas de changement de couleur ? Vérifie que :
• Le script est bien dans le Réacteur
• La PointLight existe avec le bon nom
• Pas d'erreur dans l'Output (F9)
Bonus : Améliore ton Système !

Tu veux aller plus loin ? Essaie d'ajouter ces fonctionnalités :

  • Alerte sonore quand l'énergie passe sous 25%
  • Effet de pulsation sur le réacteur quand il est plein
  • Créer une fonction getStatut() qui retourne "OPTIMAL", "MOYEN", ou "CRITIQUE"
Indice pour la pulsation : Utilise une boucle qui modifie lumiere.Brightness de façon oscillante !

Réacteur opérationnel !

Ta station a maintenant un système d'énergie intelligent avec 5 fonctions ! → Module 5 : Zone de collecte de ressources