La condition if avec LÖVE2D

Info
Nous utiliserons le code du chapitre précédent

Avec la condition if, nous pouvons autoriser l’exécution de morceaux de code seulement lorsqu’une condition est remplie.

Pour créer une condition avec if, faites comme ceci :

1
2
3
if condition then
  -- code
end

Une condition ou une déclaration est quelque chose qui est vrai ou faux.

Par exemple : $5 > 9$
Le signe $>$ signifie “plus grand que”, donc la déclaration est que 5 est supérieur à 9, ce qui est faux.

Mettons une condition if autour du code qui incrémente x :

1
2
3
4
5
function love.update(dt)
  if 5 > 9 then
    x = x + 100 * dt
  end
end

Lorsque vous lancez le jeu, vous remarquerez que notre rectangle ne bouge pas. C’est parce que la déclaration est fausse. Si nous la changeons en $5 < 9$ (5 est plus petit que 9), alors la déclaration devient vraie et le code à l’intérieur de la condition sera exécuté.

Avec cela, nous pouvons par exemple augmenter x jusqu’à 600 et quand il atteint cette valeur, arrêter le mouvement avec la condition $x < 600$ :

1
2
3
4
5
function love.update(dt)
  if x < 600 then
    x = x + 100 * dt
  end
end
Déplacement du rectangle sous condition
Déplacement du rectangle sous condition

Si nous voulons vérifier qu’une valeur est égale à une autre, nous devons utiliser deux signes égal (==). Par exemple : $4 == 7$. Attention à bien faire la distinction entre = et == :

1
2
x = 10 -- Assigne 10 à x
x == 100 -- Compare x à 100

Nous pouvons aussi utiliser $>=$ (supérieur ou égal) et $<=$ (inférieur ou égal) pour vérifier si une valeur est supérieure ou égale, ou inférieure ou égale à une autre.

1
2
10 <= 10 -- true (vrai) car 10 est bien égal à 10
15 >= 4 -- true (vrai) car 15 est bien plus grand que 4

Les booléens

Une variable peut être soit true (vrai) soit false (faux). Ce type de variable est ce qu’on appelle un booléen.

Créons une nouvelle variable que nous appellerons move avec une valeur à true et vérifions que move est à true dans notre condition :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function love.load()
  x = 100
  move = true
end

function love.update(dt)
  -- Souvenez-vous : deux signes égal pour la comparaison
  if move == true then
    x = x + 100 * dt
  end
end

move est vrai donc notre rectangle bouge. Pour une meilleure lisibilité du code, on peut simplifier la condition comme ceci :

1
2
3
if move then
  x = x + 100 * dt
end

Si nous voulons vérifier si move est faux, nous pouvons mettre not devant :

1
2
3
if not move then
  x = x + 100 * dt
end

Si nous voulons vérifier qu’un nombre n’est PAS égal à un autre, nous utilisons un tilde suivi d’un signe égal (~=) :

1
2
3
if 4 ~= 5 then
  x = x + 100 * dt
end

Nous pouvons aussi assigner le résultat d’une comparaison (true ou false) à une variable comme ceci :

1
move = 6 > 3  -- move vaudra true car 6 est bien supérieur à 3

Si nous vérifions que move est à true et que nous le mettons ensuite à false dans l’instruction, le code ne sera exécuté qu’une seule fois :

1
2
3
4
5
if move then
  move = false
  print("Ceci ne sera exécuté qu'une seule fois")
  x = x + 100 * dt
end

Les flèches et les touches

Faisons en sorte que le rectangle se déplace en fonction du maintien de la flèche droite. Pour cela, nous utilisons la fonction love.keyboard.isDown.

Remarquez comment le D de Down (enfoncé) est en majuscule. C’est le type de notation que nous appelons camelCase. Nous commençons avec le premier mot tout en minuscule puis le premier caractère de chaque mot suivant sera en majuscule.

Nous passons la chaîne “right” comme premier argument pour vérifier si la flèche droite est enfoncée :

1
2
3
if love.keyboard.isDown("right") then
  x = x + 100 * dt
end

Maintenant, quand nous maintenons enfoncée la flèche droite, notre rectangle se déplace.

Déplacement du rectangle quand on appuie sur une touche
Déplacement du rectangle quand on appuie sur une touche

Nous pouvons également utiliser else pour indiquer à notre jeu quoi faire lorsque la condition est fausse. Faisons déplacer notre rectangle vers la gauche lorsque nous n’appuyons pas sur la flèche droite :

1
2
3
4
5
if love.keyboard.isDown("right") then
  x = x + 100 * dt
else
  x = x - 100 * dt -- Nous décrémentons la valeur de x
end

Nous pouvons également vérifier une condition alternative après que la première soit fausse en utilisant elseif. Vérifions d’abord si la flèche droite est enfoncée, et si ce n’est pas le cas, vérifions si la flèche gauche l’est :

1
2
3
4
5
if love.keyboard.isDown("right") then
  x = x + 100 * dt
elseif love.keyboard.isDown("left") then
  x = x - 100 * dt
end

Essayez maintenant de faire bouger le rectangle vers le haut et vers le bas en modifiant ce code.

and et or

Avec and, nous pouvons vérifier si plusieurs conditions sont vraies simultanément :

1
2
3
if 5 < 9 and 14 > 7 then
  print("Les deux conditions sont vraies")
end

Avec or, la condition if sera exécutée si au moins l’une des conditions est vraie :

1
2
3
if 20 < 9 or 14 > 7 or 5 == 10 then
  print("Au moins une de ces conditions est vraie")
end

Précision importante

Pour être plus précis, la condition if vérifie si l’expression n’est ni false ni nil. Voici quelques exemples (sur une seule ligne pour simplifier, mais ils peuvent être écrits sur plusieurs lignes) :

1
2
3
4
5
6
if true then print(1) end -- N'est ni false ni nil, donc exécuté
if false then print(2) end -- Est false, donc non exécuté
if nil then print(3) end -- Est nil, donc non exécuté
if 5 then print(4) end -- N'est ni false ni nil, donc exécuté
if "hello" then print(5) end -- N'est ni false ni nil, donc exécuté
-- Sortie: 1, 4, 5

Résumé

Avec if, nous pouvons autoriser certains morceaux de code à être exécutés uniquement lorsqu’une condition est remplie. Nous pouvons vérifier si un nombre est plus grand, plus petit ou égal à un autre nombre ou à une autre valeur. Une variable peut être true ou false (ce type de variable est appelé booléen). Nous pouvons utiliser else pour spécifier le comportement à adopter quand la condition est fausse, ou elseif pour effectuer des vérifications supplémentaires.