Tracks
/
Go
Go
/
Übungen
/
Annalyns Infiltration
Annalyns Infiltration

Annalyns Infiltration

Lernübung

Einführung

Boolesche Werte werden in Go durch den vordeklarierten booleschen Typ bool dargestellt, dessen Werte entweder true oder false sein können. Es ist ein definierter Typ.

var closed bool    // boolean variable 'closed' implicitly initialized with 'false'
speeding := true   // boolean variable 'speeding' initialized with 'true'
hasError := false  // boolean variable 'hasError' initialized with 'false' 

Go unterstützt drei logische Operatoren, die Ausdrücke zu booleschen Werten auswerten können und entweder true oder false zurückgeben.

Operator Was er bedeutet
&& (und) Er ist wahr, wenn beide Aussagen wahr sind.
|| (oder) Er ist wahr, wenn mindestens eine Aussage wahr ist.
! (nicht) Er ist nur wahr, wenn die Aussage falsch ist.

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. Doch dann schlägt das Unglück zu: Ihre beste Freundin wird entführt, während sie im Wald nach Beeren sucht. Annalyn versucht, ihre beste Freundin zu finden und zu befreien, wobei sie ihren Hund mit auf diese Quest nehmen kann.

Nachdem sie eine Zeit lang 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 gerissenen Bogenschützen.

Nachdem Annalyn die Entführer gefunden hat, überlegt sie, 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 dann verwundbar.
  • Spionieren: Die Gruppe kann ausspioniert werden, wenn mindestens einer von ihnen wach ist. Andernfalls ist Spionieren Zeitverschwendung.
  • Gefangenen signalisieren: Der Gefangene kann mit Vogelrufen signalisiert werden, wenn der Gefangene wach ist und der Bogenschütze schläft, denn Bogenschützen werden 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 vorzubereiten, bevor Annalyn und der Gefangene entkommen können.
    • Wenn Annalyn ihren Hund nicht dabei hat, müssen sie und der Gefangene sehr leise sein! Annalyn kann den Gefangenen befreien, wenn der Gefangene wach ist und Ritter und 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 Ritter und Bogenschützen aufwecken.

Du hast vier Aufgaben: die Logik zu implementieren, die anhand des Zustands der drei im Wald gefundenen Charaktere und der Anwesenheit von Annalyns Hund entscheidet, ob die oben genannten Aktionen möglich sind.

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

Definiere die Funktion CanFastAttack(), die einen booleschen Wert entgegennimmt, der angibt, ob der Ritter wach ist. Diese Funktion gibt true zurück, wenn ein schneller Angriff basierend auf dem Zustand des Ritters möglich ist. Andernfalls gibt sie false zurück:

var knightIsAwake = true
fmt.Println(CanFastAttack(knightIsAwake))
// Output: false

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

Definiere die Funktion CanSpy(), die drei boolesche Werte entgegennimmt, die angeben, ob der Ritter, der Bogenschütze bzw. der Gefangene wach ist. Die Funktion gibt true zurück, wenn die Gruppe ausspioniert werden kann, basierend auf dem Zustand der drei Charaktere. Andernfalls gibt sie false zurück:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
fmt.Println(CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake))
// Output: true

3. Prüfe, ob der Gefangene signalisiert werden kann

Definiere die Funktion CanSignalPrisoner(), die zwei boolesche Werte entgegennimmt, die angeben, ob der Bogenschütze bzw. der Gefangene wach ist. Die Funktion gibt true zurück, wenn der Gefangene signalisiert werden kann, basierend auf dem Zustand der beiden Charaktere. Andernfalls gibt sie false zurück:

var archerIsAwake = false
var prisonerIsAwake = true
fmt.Println(CanSignalPrisoner(archerIsAwake, prisonerIsAwake))
// Output: true

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

Definiere die Funktion CanFreePrisoner(), die vier boolesche Werte entgegennimmt. Die ersten drei Parameter geben an, ob der Ritter, der Bogenschütze bzw. der Gefangene wach ist. Der letzte Parameter gibt an, ob Annalyns Hund anwesend ist. Die Funktion gibt true zurück, wenn der Gefangene befreit werden kann, basierend auf dem Zustand der drei Charaktere und der Anwesenheit von Annalyns Hund. Andernfalls gibt sie false zurück:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Go Exercism

Bereit, mit Annalyns Infiltration zu starten?

Melde dich bei Exercism an, um Go mit 34 Konzepte165 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.