Parcours
/
Swift
Swift
/
Exercices
/
La quête des ailes
La quête des ailes

La quête des ailes

Exercice d'apprentissage

Introduction

Swift possède un type intégré appelé Bool pour représenter des valeurs de vérité : true et false.

Opérateurs logiques

Swift possède trois opérateurs logiques (!, && et ||) qui servent à combiner et à évaluer des expressions booléennes.

ET logique (&&)

L'opérateur et (&&) renvoie true uniquement si les deux opérandes sont true. Si l'un des opérandes est false, il renvoie false. Place une expression ou une valeur booléenne de chaque côté du symbole && :

true && true  // true
true && false // false

OU logique (||)

L'opérateur ou (||) renvoie true si au moins un des opérandes est true. Il ne renvoie false que si les deux opérandes sont false. Place une expression ou une valeur booléenne de chaque côté du symbole || :

true || true   // true
true || false  // true
false || false // false

NON logique (!)

L'opérateur non (!) inverse une valeur booléenne. Il renvoie true si la valeur est false, et false si la valeur est true. Place l'opérateur ! juste avant la valeur ou l'expression :

!true  // false
!false // true

Utilise des parenthèses (())

Tu peux utiliser des parenthèses pour regrouper des expressions et contrôler l'ordre d'évaluation. En Swift, les expressions entre parenthèses sont évaluées en premier :

true && false && false || true   // true
true && false && (false || true) // false

Le regroupement par parenthèses détermine aussi comment l'opérateur NON s'applique à des expressions complexes :

!true && false   // false (evaluates (!true) first, then false && false)
!(true && false) // true  (evaluates (true && false) first to false, then !false)
Note

Utilise des parenthèses quand tu as besoin de clarifier l'ordre d'évaluation ou de rendre des conditions complexes plus faciles à lire. Évite d'ajouter des parenthèses inutiles quand la priorité par défaut est déjà claire.

Instructions

Tu es en train de développer le nouveau jeu très apprécié Wings Quest. Dans ce jeu, tu incarnes un oiseau qui se déplace et ramasse des graines. Le joueur gagne en ramassant toutes les graines. Si le joueur entre en contact avec un aigle, il perd toutes ses graines et perd la partie. Il existe une exception à cette règle : le joueur peut avoir un bonus actif qui lui permet de voler plus haut que les autres oiseaux.

Ton objectif est d'écrire quelques règles qui seront utilisées dans le jeu.

1. Détermine si l'oiseau obtient des points bonus

Dans le jeu, l'oiseau obtient des points bonus s'il touche un aigle alors qu'un bonus est actif.

Définis la fonction bonusPoints(powerUpActive:touchingEagle:) qui prend deux arguments : powerUpActive, qui indique si l'oiseau a un bonus actif, et touchingEagle, qui indique si l'oiseau touche un aigle. La fonction doit renvoyer true uniquement si l'oiseau a un bonus actif et touche un aigle, et false sinon.

bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false

2. Détermine si l'oiseau marque des points

Dans le jeu, le joueur marque des points lorsqu'il ramasse une graine ou un bonus.

Définis la fonction score(touchingPowerUp:touchingSeed:) qui prend deux arguments : touchingPowerUp, qui indique si l'oiseau touche un bonus, et touchingSeed, qui indique si l'oiseau touche une graine. La fonction doit renvoyer true si l'oiseau touche un bonus ou une graine, et renvoyer false sinon.

score(touchingPowerUp: true, touchingSeed: true)
// Returns true

3. Détermine si l'oiseau perd

Définis la fonction lose(powerUpActive:touchingEagle:) qui prend deux arguments : powerUpActive, qui indique si l'oiseau a un bonus actif, et touchingEagle, qui indique si l'oiseau touche un aigle. La fonction doit renvoyer true si le personnage touche un aigle et n'a pas de bonus actif, et renvoyer false sinon.

lose(powerUpActive: false, touchingEagle: true)
// Returns true

4. Détermine si l'oiseau gagne

Définis la fonction win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:) qui prend les arguments suivants :

  • hasPickedUpAllSeeds si l'oiseau a ramassé toutes les graines.
  • powerUpActive si l'oiseau a un bonus actif.
  • touchingEagle si l'oiseau touche un aigle.

La fonction doit renvoyer true si l'oiseau a ramassé toutes les graines et n'a pas perdu, d'après les arguments définis dans la partie 3, et renvoyer false sinon.

win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Swift Exercism

Prêt à commencer La quête des ailes ?

Inscris-toi sur Exercism pour apprendre et maîtriser Swift avec 35 concepts116 exercices, et un vrai mentorat humain, le tout gratuitement.