Teil 4: Variablen

Lösungen

LÖSUNG AUFGABE 4.01: Counting Stars

class MyPlayer extends Player {

  start() {
    int count = 0;

    while (canMove()) {
      move();

      if (onStar()) {
        count = count + 1;
      }
    }

    say('Ich habe ${count} Sterne gefunden.');
  }
}

LÖSUNG AUFGABE 4.02: Cleaning Up

class MyPlayer extends Player {

  start() {
    bool goingRight = true;

    while (!treeFront()) {
      removeStar();

      if (canMove()) {
        move();
      } else {
        // Wir sind an einem Rand.
        if (goingRight) {
          // Wir sind am rechten Rand und drehen um.
          turnAroundRight();
          goingRight = false;
        } else {
          // Wir sind am linken Rand und drehen um.
          turnAroundLeft();
          goingRight = true;
        }
      }
    }

    // Entferne den letzten Stern.
    removeStar();
  }

  /// Umdrehen am rechten Rand.
  turnAroundRight() {
    turnRight();
    move();
    turnRight();
  }

  /// Umdrehen am linken Rand.
  turnAroundLeft() {
    turnLeft();
    move();
    turnLeft();
  }
}

LÖSUNG AUFGABE 4.03: Inverting

class MyPlayer extends Player {

  start() {
    bool goingRight = true;

    while (!treeFront()) {
      invertField();

      if (canMove()) {
        move();
      } else {
        // Wir sind an einem Rand.
        if (goingRight) {
          // Wir sind am rechten Rand und drehen um.
          turnAroundRight();
          goingRight = false;
        } else {
          // Wir sind am linken Rand und drehen um.
          turnAroundLeft();
          goingRight = true;
        }
      }
    }

    // Das letzte Feld invertieren.
    invertField();
  }

  /// Umdrehen am rechten Rand.
  turnAroundRight() {
    turnRight();
    move();
    turnRight();
  }

  /// Umdrehen am linken Rand.
  turnAroundLeft() {
    turnLeft();
    move();
    turnLeft();
  }

  /// Ein einzelnes Feld invertieren.
  invertField() {
    if (onStar()) {
      removeStar();
    } else {
      putStar();
    }
  }
}

LÖSUNG AUFGABE 4.04: Chessboard

(Lösung fehlt)

LÖSUNG AUFGABE 4.05: Tree Line

class MyPlayer extends Player {

  int longestRow = 0;

  /// Your program.
  start() {
    while (!onStar()) {
      if (treeFront()) {
        countRow();
      } else {
        move();
      }
    }

    say('Die längste Baumreihe ist ${longestRow} Bäume lang.');
  }

  /// Geht einer Baumreihe entlang und zählt die Bäume.
  countRow() {
    int currentRow = 0;

    turnLeft();

    while (treeRight())  {
      // Den Zähler für die aktuelle Zeile um eins erhöhen.
      currentRow++;
      move();
    }

    // Gehe um die Baumreihe herum.
    turnRight();
    move();
    move();
    turnRight();

    // Gehe zurück nach unten.
    while (canMove()) {
      move();
    }

    turnLeft();

    // Teste, ob die aktuelle zeile länger ist als alle bisherigen.
    if (currentRow > longestRow) {
      longestRow = currentRow;
    }
  }
}