Logique & Contrôle

Objectif : Apprendre à ton jeu à prendre des décisions et à répéter des actions. Tu vas maîtriser les conditions et les boucles, le cœur de tout programme !

Le Cerveau de ton Jeu

Apprends à ton code à réfléchir

Jusqu'ici, ton code s'exécute ligne par ligne, de haut en bas, sans réfléchir. C'est comme un robot qui avance tout droit et se cogne contre les murs. Dans ce module, tu vas lui apprendre à prendre des décisions (tourner à gauche si mur) et à répéter des actions (avancer 10 fois).

1. Les Conditions (La Prise de Décision)

Imagine un garde dans ton jeu. Il doit décider : "Si le joueur est un ennemi, alors j'attaque. Sinon, je le laisse passer." C'est exactement ce que font les conditions en programmation.

1.1 L'Analogie du Feu Tricolore

Pense à un feu de signalisation :

  • Si le feu est vert ? tu avances
  • Sinon si le feu est orange ? tu ralentis
  • Sinon (feu rouge) ? tu t'arrêtes

En Luau, on traduit ça avec les mots-clés if, then, elseif, else et end.

1.2 La Syntaxe de Base

Structure d'une condition

if condition then
    -- Ce code s'exécute SI la condition est vraie
end

Voici un exemple concret :

Exemple : Vérifier la vie du joueur

local vie = 100

if vie > 0 then
    print("Le joueur est vivant !")
end
Décortiquons le code

if vie > 0 ? "Si vie est supérieure à 0"
then ? "Alors..."
print(...) ? On exécute cette action
end ? Fin du bloc conditionnel

1.3 Le Else (Sinon)

Que se passe-t-il si la condition est fausse ? On utilise else :

local vie = 0

if vie > 0 then
    print("Le joueur est vivant !")
else
    print("Game Over...")
end

1.4 Le Elseif (Sinon Si)

Pour gérer plusieurs cas, on utilise elseif :

Système de rang par niveau

local niveau = 25

if niveau >= 50 then
    print("Rang : Légende")
elseif niveau >= 25 then
    print("Rang : Expert")
elseif niveau >= 10 then
    print("Rang : Apprenti")
else
    print("Rang : Débutant")
end

-- Résultat : "Rang : Expert" (car 25 >= 25)
⚠️ Attention à l'ordre !

Les conditions sont vérifiées de haut en bas. Dès qu'une condition est vraie, le reste est ignoré. Place toujours les conditions les plus restrictives en premier !

2. Les Opérateurs de Comparaison

Pour que tes conditions fonctionnent, tu dois savoir comparer des valeurs. Voici ta boîte à outils :

== (Égal à)

Vérifie si deux valeurs sont identiques.

if nom == "Admin" then
~= (Différent de)

Vérifie si deux valeurs sont différentes.

if equipe ~= "Rouge" then
> et < (Supérieur / Inférieur)

Compare des nombres.

if score > 100 then
>= et <= (Supérieur ou égal / Inférieur ou égal)

Inclut la valeur limite.

if age >= 18 then

2.1 Les Opérateurs Logiques

Tu peux combiner plusieurs conditions avec and, or et not :

Combinaisons logiques

local niveau = 30
local aCle = true

-- AND : Les DEUX conditions doivent être vraies
if niveau >= 20 and aCle == true then
    print("Tu peux ouvrir le coffre légendaire !")
end

-- OR : AU MOINS UNE condition doit être vraie
if niveau >= 50 or estAdmin == true then
    print("Accès VIP autorisé")
end

-- NOT : Inverse la condition
if not estBanni then
    print("Bienvenue dans le jeu !")
end

Astuce de Pro

En Luau, tu peux écrire if aCle then au lieu de if aCle == true then. Une variable boolean dans un if est automatiquement testée comme vraie/fausse.

3. Les Boucles (L'Automatisation)

Imagine devoir écrire "print(1), print(2), print(3)..." jusqu'à 100. Ça serait fou ! Les boucles permettent de répéter du code automatiquement.

3.1 La Boucle While (Tant que)

Elle répète le code tant qu'une condition est vraie. C'est comme dire : "Tant que j'ai faim, je mange."

Compte à rebours

local compteur = 5

while compteur > 0 do
    print(compteur)
    compteur = compteur - 1  -- On décrémente
    task.wait(1)              -- On attend 1 seconde
end

print("BOOM ! 💥")

-- Résultat : 5, 4, 3, 2, 1, BOOM !
⚠️ Pourquoi task.wait() et pas wait() ?

La fonction wait() est dépréciée (obsolète) par Roblox. Utilise toujours task.wait() à la place !

📚 Documentation : task library

🚨 DANGER : Boucle Infinie

Si ta condition reste toujours vraie, ton jeu va planter ! Assure-toi toujours que la condition finira par devenir fausse.

-- ? MAUVAIS : while true do print("Crash") end

3.2 La Boucle For (Pour)

Elle répète le code un nombre précis de fois. C'est comme dire : "Fais 10 pompes."

Syntaxe de la boucle for

-- for variable = début, fin, pas do
for i = 1, 5 do
    print("Tour numéro : " .. i)
end

-- Résultat :
-- Tour numéro : 1
-- Tour numéro : 2
-- Tour numéro : 3
-- Tour numéro : 4
-- Tour numéro : 5
Décortiquons la syntaxe

i = 1 ? On commence à 1
5 ? On s'arrête à 5 (inclus)
do ... end ? Le code à répéter
Le pas (optionnel) est de 1 par défaut.

3.3 Le Pas (Step)

Tu peux changer l'incrément avec un troisième paramètre :

-- Compter de 2 en 2
for i = 0, 10, 2 do
    print(i)  -- 0, 2, 4, 6, 8, 10
end

-- Compte à rebours (pas négatif)
for i = 10, 1, -1 do
    print(i)  -- 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
end

3.4 Exemple Pratique : Spawner d'Ennemis

Voici comment créer 5 zombies avec une boucle :

Spawner de Zombies

local zombieTemplate = game.ServerStorage:WaitForChild("Zombie")

for i = 1, 5 do
    local nouveauZombie = zombieTemplate:Clone()
    nouveauZombie.Name = "Zombie_" .. i
    nouveauZombie.Parent = workspace
    
    print("Zombie " .. i .. " est apparu !")
    task.wait(0.5)  -- Petit délai entre chaque spawn
end

print("Tous les zombies sont là !")
💻 Sandbox Luau
Simulateur v2.0
1 2 3 4 5 6 7 8 9 10
👉 Clique sur Exécuter pour tester ton code...

Quiz : Logique & Contrôle

5 questions pour valider tes acquis

1. Quel mot-clé termine un bloc conditionnel en Luau ?

  • stop
  • finish
  • end
  • done

2. Quel opérateur signifie "différent de" en Luau ?

  • !=
  • ~=
  • <>
  • =/=

3. Quelle boucle utilises-tu pour répéter une action exactement 10 fois ?

  • while
  • for
  • repeat
  • loop

4. Que signifie and dans une condition ?

  • Les deux conditions doivent être vraies
  • Au moins une condition doit être vraie
  • Aucune condition ne doit être vraie
  • C'est un alias de "or"

5. Quel est le risque d'une boucle while true do sans task.wait() ?

  • Le code ne s'exécute pas
  • Le code s'exécute une seule fois
  • Le jeu plante (boucle infinie)
  • Le script est supprimé
Exercice Pratique

Construis la Condition

Place les blocs dans le bon ordre pour créer une condition if/else correcte !

15-50 Points
else
Sinon
local coins = 100
Déclaration variable
end
Ferme le bloc
print("Assez !")
Action si vrai
print("Pas assez !")
Action si faux
if coins >= 50 then
Test condition
1
D'abord, on déclare la variable
2
Ensuite, on teste la condition
3
Action si la condition est vraie
4
Le mot-clé "sinon"
5
Action si la condition est fausse
6
Enfin, on ferme le bloc
🚪
Étape 3/10

Sas de Sécurité

Le sas vérifie ton oxygène avant de te laisser sortir. Sans assez de 💨 Oxygène, impossible de collecter des ressources !

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

Modules 1-2 terminés (station + éclairage)

Crée le sas d'entrée/sortie

1
Crée le Sas

Dans ta station, crée une Part pour représenter la porte du sas.

Size8, 10, 2
Position0, 7, -30
MaterialGlass
Transparency0.3
NameSasSecurite
Anchored

💡 Position 0, 7, -30 place le sas au centre du Mur_Nord. La hauteur 7 le centre verticalement (sol à Y=2, murs de 15 de haut).

2
Ajoute le Script

Clic droit sur SasSecurite ? Insert Object ? Script

Renomme-le GestionSas.

3
Code la Condition

Utilise ce code avec une condition if/else :

local sas = script.Parent
local niveauOxygene = 75 -- Simule le niveau d'oxygène

sas.Touched:Connect(function(hit)
    local player = game.Players:GetPlayerFromCharacter(hit.Parent)
    if player then
        if niveauOxygene >= 50 then
            -- Assez d'oxygène : on ouvre (vert)
            sas.BrickColor = BrickColor.new("Lime green")
            sas.CanCollide = false
            print("Accès autorisé ! Oxygène: " .. niveauOxygene .. "%")
        else
            -- Pas assez : refus (rouge)
            sas.BrickColor = BrickColor.new("Really red")
            sas.CanCollide = true
            print("ATTENTION ! Oxygène insuffisant: " .. niveauOxygene .. "%")
        end
    end
end)
4
Teste les deux cas

Lance le jeu (F5) et vérifie :

  • Test 1 : Avec niveauOxygene = 75 ? sas vert, tu passes
  • Test 2 : Change à niveauOxygene = 30 ? sas rouge, bloqué !
5
Sauvegarde (Ctrl+S)

N'oublie pas de sauvegarder ton travail !

Bonus : Ajoute un elseif

Ajoute un niveau intermédiaire : si l'oxygène est entre 25 et 50, le sas devient orange avec un avertissement !

Sas de sécurité terminé !

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

🚪
Étape 3/10 — V2

SAS INTELLIGENT & OXYGÈNE 💨

Crée un sas pressurisé entre le Hub et le couloir extérieur. Le sas vérifie le niveau d'oxygène avant de s'ouvrir.

1
2
3
4
5
6
7
8
9
10

Build — Chambre de Sas

1
Construis la chambre de sas

Sur le Mur_Sud du Hub, crée une ouverture (même technique que le couloir Nord). Remplace Mur_Sud par 2 demi-murs, puis construis une petite pièce sas (8×8) :

Crée un Model Sas dans Station :

Sol_Sas8 × 1 × 8 | Pos: 0, 0, 24
Plafond_Sas8 × 1 × 8 | Pos: 0, 12, 24
Mur_Sas_G1 × 12 × 8 | Pos: -4, 6, 24
Mur_Sas_D1 × 12 × 8 | Pos: 4, 6, 24

Material = DiamondPlate, Color = Dark stone grey. Tout Anchored ✓.

2
Crée les 2 portes du sas

Un vrai sas a 2 portes : une vers l'intérieur (Hub), une vers l'extérieur.

Porte_Interieure8 × 10 × 0.5 | Pos: 0, 5, 20
Porte_Exterieure8 × 10 × 0.5 | Pos: 0, 5, 28

Les deux : Material = Metal, Color = Medium stone grey. Ajoute un indicateur lumineux au-dessus de chaque porte :

Indicateur_Int2 × 1 × 0.5 | Pos: 0, 11, 20
Indicateur_Ext2 × 1 × 0.5 | Pos: 0, 11, 28

Material = Neon, Color = Bright red (ils passeront au vert par script).

Script — Logique du Sas

3
Script : contrôle du sas par oxygène

Crée un Script GestionSas dans le Model Sas :

-- GestionSas : ouvre/ferme selon le niveau d'oxygène local sas = script.Parent local porteInt = sas:WaitForChild("Porte_Interieure") local porteExt = sas:WaitForChild("Porte_Exterieure") local indInt = sas:WaitForChild("Indicateur_Int") local indExt = sas:WaitForChild("Indicateur_Ext") local niveauOxygene = 80 -- change pour tester ! local function ouvrirPorte(porte, indicateur) porte.Transparency = 0.7 porte.CanCollide = false indicateur.Color = Color3.fromRGB(0, 255, 0) -- vert print("🟢 Porte ouverte :", porte.Name) end local function fermerPorte(porte, indicateur) porte.Transparency = 0 porte.CanCollide = true indicateur.Color = Color3.fromRGB(255, 0, 0) -- rouge print("🔴 Porte verrouillée :", porte.Name) end -- Logique de sécurité if niveauOxygene >= 75 then print("✅ Oxygène OK — Sas ouvert") ouvrirPorte(porteInt, indInt) ouvrirPorte(porteExt, indExt) elseif niveauOxygene >= 40 then print("⚠️ Oxygène moyen — Sas partiel") ouvrirPorte(porteInt, indInt) fermerPorte(porteExt, indExt) indInt.Color = Color3.fromRGB(255, 170, 0) -- orange else print("🚨 DANGER — Sas verrouillé !") fermerPorte(porteInt, indInt) fermerPorte(porteExt, indExt) end
Teste les 3 scénarios : change niveauOxygene à 80, puis 50, puis 20 et relance F5 à chaque fois pour voir le sas réagir.
4
Teste ! F5
  • ✅ Oxygène ≥ 75 : les 2 portes sont transparentes, indicateurs verts
  • ✅ Oxygène 40-74 : seule la porte intérieure s'ouvre, indicateur orange
  • ✅ Oxygène < 40 : tout est verrouillé, indicateurs rouges

Sauvegarde : Ctrl+S

Sas intelligent terminé ! 🚪

Prochaine étape → Module 4 : Générateur & Fonctions