Parcours
/
Crystal
Crystal
/
Exercices
/
Chasseur de cristaux
Chasseur de cristaux

Chasseur de cristaux

Exercice d'apprentissage

Introduction

Crystal possède un type appelé Bool. Il représente les valeurs true et false.

Opérateurs logiques

Crystal possède trois opérateurs logiques (!, ||, &&), qui combinent des booléens et forment des expressions produisant des valeurs différentes.

ET (&&)

En Crystal, l'opérateur ET est représenté par && et renvoie true si les deux valeurs valent true ; sinon, il renvoie false. Quand on utilise l'opérateur ET, on place un booléen à droite du && et un autre à gauche.

true && true
# => true

true && false
# => false

OU (||)

En Crystal, l'opérateur OU est représenté par || et renvoie true si au moins une des valeurs données vaut true. Si les deux valeurs valent false, alors il renvoie false. Quand on utilise l'opérateur OU, un booléen doit être placé à droite du || et un autre à gauche.

true || true
# => true

true || false
# => true

false || false
# => false

NON (!)

En Crystal, l'opérateur NON est représenté par ! et renvoie true si le booléen donné vaut false, et renvoie false si on lui fournit true. Quand on utilise l'opérateur NON, un booléen doit être placé après l'opérateur (!).

!true
# => false

!false
# => true

Utilise les parenthèses (())

Quand on travaille avec des booléens, on peut utiliser des parenthèses pour décider quels booléens évaluer en premier. Le résultat peut être différent selon la façon dont les parenthèses sont utilisées. En Crystal, ce qui se trouve entre parenthèses est évalué en premier.

true && false && false || true
# => true

true && false && (false || true)
# => false

Comme ce qui se trouve entre parenthèses est évalué en premier, dans l'exemple suivant, l'opérateur NON s'appliquera à l'expression située entre parenthèses.

!true && false
# => false

!(true && false)
# => true
Note

Tu ne dois utiliser des parenthèses que lorsqu'elles changent le résultat ; sinon, il vaut mieux les omettre.

Instructions

Tu es en train de développer le nouveau jeu très apprécié Crystal Hunter. Dans le jeu, tu incarnes un personnage qui se déplace et ramasse des cristaux. Le joueur gagne en ramassant tous les cristaux. Si le joueur entre en contact avec un bandit, il perd tous ses cristaux et la partie. Il y a une exception à cette règle : le joueur peut avoir un power-up actif qui le rend invisible aux bandits.

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

1. Définis si le personnage obtient des points bonus

Dans le jeu, le personnage obtient des points bonus s'il touche un bandit alors qu'il a un power-up.

Définis la méthode Rules#bonus_points? qui prend deux arguments (si le personnage a un power-up actif et si le personnage touche un bandit) et renvoie un booléen qui indique si le personnage obtient des points bonus. La méthode doit renvoyer true uniquement si le personnage a un power-up actif et touche un bandit, et false sinon.

Rules.new.bonus_points?(false, true)
# => false

2. Définis si le personnage marque des points

Le joueur gagne des points dans le jeu lorsqu'il ramasse un cristal ou un power-up.

Définis la méthode Rules#score?, qui prend deux arguments (si le personnage touche un power-up et si le personnage touche un cristal) et renvoie un booléen indiquant si le personnage a marqué des points ou non. La méthode doit renvoyer true si le personnage touche un power-up ou un cristal, et renvoyer false sinon.

Rules.new.score?(true, true)
# => true

3. Définis si le personnage perd

Définis la méthode Rules#lose?, qui prend deux arguments (si le personnage a un power-up actif et si le personnage touche un bandit) et renvoie un booléen qui indique si le personnage perd ou non. La méthode doit renvoyer true si le personnage touche un bandit et n'a pas de power-up actif, et renvoyer false sinon.

Rules.new.lose?(false, true)
# => true

4. Définis si le personnage gagne

Définis la méthode Rules#win?, qui prend trois arguments (si le personnage a ramassé tous les cristaux, si le personnage a un power-up actif et si le personnage touche un bandit) et renvoie un booléen indiquant si le personnage gagne ou non. La méthode doit renvoyer true si le personnage a rassemblé tous les cristaux et n'a pas perdu d'après les arguments définis dans la partie 3, et renvoyer false sinon.

Rules.new.win?(false, true, false)
# => false
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Crystal Exercism

Prêt à commencer Chasseur de cristaux ?

Inscris-toi sur Exercism pour apprendre et maîtriser Crystal avec 26 concepts142 exercices, et un vrai mentorat humain, le tout gratuitement.