Tracks
/
Crystal
Crystal
/
Übungen
/
Crystal-Jäger
Crystal-Jäger

Crystal-Jäger

Lernübung

Einführung

Crystal hat einen Typ namens Bool. Er repräsentiert die Werte true und false.

Logische Operatoren

Crystal hat drei logische Operatoren (!, ||, &&), die Bools kombinieren und Ausdrücke bilden, die unterschiedliche Werte erzeugen.

Und(&&)

Der und-Operator in Crystal wird durch && dargestellt und gibt true zurück, wenn beide Werte true sind; andernfalls gibt er false zurück. Beim und-Operator steht ein Bool rechts vom && und ein weiteres links davon.

true && true
# => true

true && false
# => false

Oder(||)

Der oder-Operator in Crystal wird durch || dargestellt und gibt true zurück, wenn mindestens einer der angegebenen Werte true ist. Wenn beide Werte false sind, gibt er false zurück. Beim oder-Operator steht ein Bool rechts vom || und ein weiteres links davon.

true || true
# => true

true || false
# => true

false || false
# => false

Nicht(!)

Der nicht-Operator in Crystal wird durch ! dargestellt und gibt true zurück, wenn der angegebene Bool false ist, und false, wenn true übergeben wird. Beim nicht-Operator steht ein Bool nach dem Operator (!).

!true
# => false

!false
# => true

Klammern verwenden(())

Wenn du mit booleschen Werten arbeitest, kannst du Klammern verwenden, um festzulegen, welche Bools zuerst ausgewertet werden. Das Ergebnis kann sich je nach Verwendung der Klammern unterscheiden. In Crystal wird zuerst ausgewertet, was in Klammern steht.

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

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

Da zuerst ausgewertet wird, was in Klammern steht, wirkt der nicht-Operator im folgenden Beispiel auf den Ausdruck innerhalb der Klammern.

!true && false
# => false

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

Verwende Klammern nur, wenn sie das Ergebnis beeinflussen; ansonsten lässt du sie weg.

Anleitung

Du entwickelst gerade das neue, hoch angesehene Spiel Crystal Hunter. In dem Spiel bist du eine Spielfigur, die sich umherbewegt und Kristalle sammelt. Der Spieler gewinnt, wenn er alle Kristalle einsammelt. Wenn der Spieler mit einem Banditen in Berührung kommt, verliert er alle seine Kristalle und das Spiel. Es gibt eine Ausnahme von dieser Regel: Der Spieler kann ein aktives Power-up haben, das ihn für die Banditen unsichtbar macht.

Dein Ziel ist es, einige Regeln zu schreiben, die im Spiel verwendet werden.

1. Bestimme, ob die Spielfigur Bonuspunkte bekommt

In dem Spiel bekommt die Spielfigur Bonuspunkte, wenn sie einen Banditen berührt, während sie ein Power-up hat.

Definiere die Methode Rules#bonus_points?, die zwei Argumente entgegennimmt (ob die Spielfigur ein aktives Power-up hat und ob die Spielfigur einen Banditen berührt) und einen booleschen Wert zurückgibt, der angibt, ob die Spielfigur Bonuspunkte bekommt. Die Methode soll nur dann true zurückgeben, wenn die Spielfigur ein aktives Power-up hat und einen Banditen berührt, andernfalls false.

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

2. Bestimme, ob die Spielfigur punktet

Der Spieler bekommt in dem Spiel Punkte, wenn er einen Kristall oder ein Power-up einsammelt.

Definiere die Methode Rules#score?, die zwei Argumente entgegennimmt (ob die Spielfigur ein Power-up berührt und ob die Spielfigur einen Kristall berührt) und einen booleschen Wert zurückgibt, der angibt, ob die Spielfigur gepunktet hat. Die Methode soll true zurückgeben, wenn die Spielfigur ein Power-up oder einen Kristall berührt, andernfalls false.

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

3. Bestimme, ob die Spielfigur verliert

Definiere die Methode Rules#lose?, die zwei Argumente entgegennimmt (ob die Spielfigur ein aktives Power-up hat und ob die Spielfigur einen Banditen berührt) und einen booleschen Wert zurückgibt, der angibt, ob die Spielfigur verliert. Die Methode soll true zurückgeben, wenn die Spielfigur einen Banditen berührt und kein aktives Power-up hat, andernfalls false.

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

4. Bestimme, ob die Spielfigur gewinnt

Definiere die Methode Rules#win?, die drei Argumente entgegennimmt (ob die Spielfigur alle Kristalle eingesammelt hat, ob die Spielfigur ein aktives Power-up hat und ob die Spielfigur einen Banditen berührt) und einen booleschen Wert zurückgibt, der angibt, ob die Spielfigur gewinnt. Die Methode soll true zurückgeben, wenn die Spielfigur alle Kristalle gesammelt hat und gemäß den in Teil 3 definierten Argumenten nicht verloren hat, andernfalls false.

Rules.new.win?(false, true, false)
# => false
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Crystal Exercism

Bereit, mit Crystal-Jäger zu starten?

Melde dich bei Exercism an, um Crystal mit 26 Konzepte142 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.