Lernumgebung - Die ersten Kapitel

Unten findest du meinen Lösungsvorschlag, wie die einzelnen Kapitel der Lernumgebung gelöst werden können. Natürlich solltest du immer zuerst selbst versuchen, die Kapitel zu programmieren, bevor du das Video oder den Code anklickst!
Du lernst nur programmieren, wenn du es selbst machst! Stelle bei Problemen auch gerne Fragen!!!
Um dir dabei zu helfen, gibt es zu vielen Kapiteln Hinweise (Tipps) und Verlinkungen (der orangene Text zum anklicken), die dir in der Sprachreferenz zeigen, was du hier benutzen solltest/kannst.

Programmiere die ersten Kapitel der Lernumgebung.
Beachte:
Jeder Code ist anders – jeder Programmierer hat seinen eigenen Stil. Für den Anfang ist es am Wichtigsten, dass euer Code funktioniert und das macht, was er soll. Später schauen wir, dass der Code elegant wird.
Kapitel 0.0.1 "karelsFirstProgram"
Schau dir auf goal an, was passieren soll und programmiere Karel, dass er genau das macht.
- Dein Code kommt zwischen die beiden geschweiften Klammern {}.
- Alles, was grün ist (also auch das // your code here) ist ein Kommentar.
- Code und Tipps kannst du ausklappen. Probiere es aber erst selbst!
void karelsFirstProgram() { // (Neue) Funktion
moveForward();
pickBeeper();
moveForward();
turnLeft();
moveForward();
turnRight();
moveForward();
dropBeeper();
moveForward();
}
Kapitel 1.1.1 "obtainArtifact"
Denk daran, dass du für jedes neue Kapitel (Level) eine neue Funktion (void obtainArtifact(){…}) erstellen musst
Du hast bestimmt schon einen funktionierenden Code.
Den wollen wir aber noch ein bisschen schöner schreiben, hast du eine Idee?
Wenn du die selben Funktionen nacheinander wiederholst, kannst du in der Lernumgebung den repeat()-Befehl nutzen
repeat(Anzahl){
…
}
In dem Video (mit der Lösung) siehst du, wie die repeat()-Anweisung funktioniert
void obtainArtifact(){
turnRight();
moveForward();
turnLeft();
repeat(3){ // 3x wiederholen
moveForward();
}
turnLeft();
moveForward();
pickBeeper();
moveForward();
turnLeft();
repeat(3){ // 3x wiederholen
moveForward();
}
turnLeft();
moveForward();
turnLeft();
}
Kapitel 1.1.2 " defuseOneBomb"
Hier wollen wir auf das Thema Funktion (erstellen und) aufrufen eingehen.
Erstelle eine neue Funktion (genau wie bei jedem neuen Level, nur mit einem anderen Namen, denk dir etwas passendes aus (z.B. run()).
Aufrufen kann du die Funktion run(), indem du run(); schreibst
void defuseOneBomb(){
run(); // eigene Funktion aufrufen
…
}
In dem Video (mit der Lösung) siehst du, wie (wann) das Programm die Funktionen aufruft.
void defuseOneBomb(){
run(); // selbst erstellte Funktionen „run()“ aufrufen
pickBeeper();
run(); // selbst erstellte Funktionen „run()“ aufrufen
}
void run (){
repeat(9){ // 9x wiederholen
moveForward();
}
turnAround();
}
Kapitel 1.1.3 "defuseTwoBombs"
Ihr habt bestimmt einen Code, der funktioniert.
Schafft ihrs mit Funktionsaufrufen den Code in 4 Zeilen zu schreiben?
void defuseTwoBombs(){
defuseOneBomb();
turnLeft();
defuseOneBomb();
}
// Warum nicht etwas benutzen, dass ihr sowieso schon programmiert habt.
Kapitel 1.1.4 "practiceHomeRun"
Ihr habt beim programmieren oft mehrere Möglichkeiten.
Wie wäre es erneut mit Funktionsaufrufen oder (wie unten in „Code“) einfach mal mit einer repeat-Anweisung in einer repeat-Anweisung.
void practiceHomeRun(){
repeat(4){
repeat(9){
moveForward();
}
pickBeeper();
turnLeft();
}
}
Kapitel 1.2.1 "climbTheStairs"
Bisher stand in jeder repeat-Anweisung nur ein Befehl.
Natürlich könnt ihr auch mehrere Befehle hineinschreiben, die nacheinander ausgeführt werden.
void climbTheStairs(){
repeat(6){
moveForward();
turnLeft();
moveForward();
turnRight();
}
moveForward();
}
Kapitel 1.2.2 "fillTheHoles"
void fillTheHoles(){
repeat(4){
moveForward();
turnRight();
moveForward();
dropBeeper();
turnAround();
moveForward();
turnRight();
moveForward();
}
}
Kapitel 1.2.3 "saveTheFlower"
Hier seht ihr, dass nur ein gut kommentierter Code ein guter (gut verständlicher) Code ist.
void saveTheFlower(){
moveForward();
pickBeeper();
repeat(4){ // Pyramide hoch
turnLeft();
moveForward();
moveForward();
turnRight();
moveForward();
}
dropBeeper(); // oben
moveForward();
repeat(3){ // runterlaufen
turnRight();
moveForward();
moveForward();
turnLeft();
moveForward();
}
turnRight(); // das darf nicht in die letzte repeat, weil er sonst gegen die Wand läuft
moveForward();
moveForward();
turnLeft();
}
Kapitel 1.2.4 "mowTheLawn"
Achte darauf, wo und wie Karel am Ende stehen soll <<goal>> und ob dein Code das auch so macht <<start>>
Oft läuft Karel hier etwas weiter, als er eigentlich ´soll. Dann hast du zu viel in der repeat-Anweisung stehen und musst irgendetwas anders machen!
void mowTheLawn(){
repeat(2){
Reihe_1_Und_2();
letztesDrehen();
}
Reihe_1_Und_2();
moveForward();
}
// Mit selbst definierten Funktionen wird es leichter
void Reihe_1_Und_2(){
repeat(6){
moveForward();
pickBeeper();
}
repeat(2){
moveForward();
turnLeft();
}
repeat(6){
moveForward();
pickBeeper();
}
}
void letztesDrehen(){
repeat(2){
moveForward();
turnRight();
}
}