Tracks
/
Elm
Elm
/
Übungen
/
Annalyns Infiltration
Annalyns Infiltration

Annalyns Infiltration

Lernübung

Einführung

Boolesche Werte

Der Typ Bool ist einer der Grundbausteine der Sprache. Er beschreibt, ob etwas wahr oder falsch ist, mit den jeweiligen Werten True und False.

Boolesche Werte lassen sich mit den Operatoren && („UND") und || („ODER") kombinieren und mit der Funktion not negieren.

Boolesche Werte sind außerdem extrem nützlich, um Verzweigungen in deinem Code zu bauen, die nur ausgeführt werden, wenn bestimmte Bedingungen erfüllt sind. In Elm machst du das mit einem if-then-else-Ausdruck, und zwar so:

if someCondition || (someOtherCondition && anotherCondition) then
    doSomething
else
    doSomethingElse

Anleitung

In dieser Übung implementierst du die Quest-Logik für ein neues RPG-Spiel, das ein Freund entwickelt. Die Hauptfigur des Spiels ist Annalyn, ein mutiges Mädchen mit einem wilden und treuen Hund. Unglücklicherweise kommt es zur Katastrophe: Ihre beste Freundin wurde entführt, während sie im Wald Beeren suchte. Annalyn versucht, ihre beste Freundin zu finden und zu befreien, wobei sie ihren Hund optional mit auf diese Quest nimmt.

Nachdem sie eine Weile der Spur ihrer besten Freundin gefolgt ist, findet sie das Lager, in dem ihre beste Freundin gefangen gehalten wird. Es stellt sich heraus, dass es zwei Entführer gibt: einen mächtigen Ritter und einen listigen Bogenschützen.

Nachdem sie die Entführer gefunden hat, überlegt Annalyn, welche der folgenden Aktionen sie ausführen kann:

  • Schneller Angriff: Ein schneller Angriff ist möglich, wenn der Ritter schläft, denn er braucht Zeit, um seine Rüstung anzulegen, und ist dadurch verwundbar.
  • Schleichangriff: Wenn Annalyn den schlafenden Ritter unbemerkt erreicht, verursacht sie mit einem Schleichangriff 12 Schaden. Andernfalls verursacht sie nur 7 Schaden beim Ritter.
  • Spionieren: Die Gruppe kann ausspioniert werden, wenn mindestens einer von ihnen wach ist. Andernfalls ist Spionieren Zeitverschwendung.
  • Gefangenen signalisieren: Dem Gefangenen kann mit Vogelrufen signalisiert werden, wenn der Gefangene wach ist und der Bogenschütze schläft, denn Bogenschützen sind im Signalisieren mit Vogelrufen ausgebildet und könnten die Nachricht abfangen.
  • Gefangenen befreien: Annalyn kann versuchen, sich ins Lager zu schleichen, um den Gefangenen zu befreien. Das ist riskant und kann nur auf eine von zwei Arten gelingen:
    • Wenn Annalyn ihren Hund dabei hat, kann sie den Gefangenen retten, wenn der Bogenschütze schläft. Der Ritter hat Angst vor dem Hund, und der Bogenschütze hat keine Zeit, sich fertig zu machen, bevor Annalyn und der Gefangene entkommen können.
    • Wenn Annalyn ihren Hund nicht dabei hat, müssen sie und der Gefangene sehr vorsichtig sein! Annalyn kann den Gefangenen befreien, wenn der Gefangene wach ist und der Ritter und der Bogenschütze beide schlafen. Wenn der Gefangene jedoch schläft, kann er nicht gerettet werden: Der Gefangene würde durch Annalyns plötzliches Auftauchen erschrecken und den Ritter und den Bogenschützen aufwecken.

Du hast fünf Aufgaben: die Logik zu implementieren, mit der sich feststellen lässt, ob die oben genannten Aktionen verfügbar sind, basierend auf dem Zustand der drei im Wald gefundenen Charaktere und darauf, ob Annalyns Hund dabei ist oder nicht.

1. Prüfen, ob ein schneller Angriff möglich ist

Implementiere die Funktion canFastAttack, die einen booleschen Wert entgegennimmt, der angibt, ob der Ritter wach ist. Diese Funktion gibt True zurück, wenn basierend auf dem Zustand des Ritters ein schneller Angriff möglich ist. Andernfalls gibt sie False zurück:

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

2. Prüfen, ob die Gruppe ausspioniert werden kann

Implementiere die Funktion canSpy, die drei boolesche Werte entgegennimmt, die angeben, ob der Ritter, der Bogenschütze bzw. der Gefangene wach sind. Die Funktion gibt True zurück, wenn basierend auf dem Zustand der drei Charaktere die Gruppe ausspioniert werden kann. Andernfalls gibt sie False zurück:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

3. Prüfen, ob dem Gefangenen signalisiert werden kann

Implementiere die Funktion canSignalPrisoner, die zwei boolesche Werte entgegennimmt, die angeben, ob der Bogenschütze bzw. der Gefangene wach sind. Die Funktion gibt True zurück, wenn basierend auf dem Zustand der beiden Charaktere dem Gefangenen signalisiert werden kann. Andernfalls gibt sie False zurück:

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

4. Prüfen, ob der Gefangene befreit werden kann

Implementiere die Funktion canFreePrisoner, die vier boolesche Werte entgegennimmt. Die ersten drei Parameter geben an, ob der Ritter, der Bogenschütze bzw. der Gefangene wach sind. Der letzte Parameter gibt an, ob Annalyns Hund dabei ist. Die Funktion gibt True zurück, wenn basierend auf dem Zustand der drei Charaktere und der Anwesenheit von Annalyns Hund der Gefangene befreit werden kann. Andernfalls gibt sie False zurück:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. Den Schaden zählen, den ein Schleichangriff verursachen könnte

Implementiere die Funktion stealthAttackDamage, die einen booleschen Wert entgegennimmt, der angibt, ob Annalyn entdeckt wurde. Diese Funktion gibt 7 zurück, wenn sie entdeckt wurde, andernfalls 12.

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Elm Exercism

Bereit, mit Annalyns Infiltration zu starten?

Melde dich bei Exercism an, um Elm mit 28 Konzepte110 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.