Skip to content

Der zeitlose Klassiker für den spielerischen Einstieg in die Programmierung.

License

Notifications You must be signed in to change notification settings

oojikoo/robot-karol-web

 
 

Repository files navigation

Robot Karol Web

Zum Editor → https://karol.arrrg.de/

Der zeitlose Klassiker für den spielerischen Einstieg in die Programmierung.

Übersicht

Robot Karol ist eine Programmierumgebung mit einer Programmiersprache, die für Schülerinnen und Schüler zum Erlernen des Programmierens und zur Einführung in die Algorithmik gedacht ist. Robot Karol folgt der Tradition der “Mini-Languages”. Dies sind Programmiersprachen, die bewusst über einen kleinen, übersichtlichen Sprachumfang verfügen, um den Einstieg in die Algorithmik zu erleichtern.

Dem Programm Robot Karol liegt die Idee von „Karel the Robot“ zugrunde, wie sie zum ersten Mal von Richard E. Pattis in “Karel the Robot: A Gentle Introduction to the Art of Programming” veröffentlicht wurde. Die Idee ist, einen Roboter zu programmieren, der in einer “Bildschirmwelt” lebt. Wenn Karol-Programme ablaufen, sehen die Schülerinnen und Schüler an der Reaktion des Roboters sofort, was sie programmiert haben und ob ihr Programm die Aufgabenstellung erfüllt.

Quelle: https://www.mebis.bayern.de/infoportal/empfehlung/robot-karol/

Die Idee eines programmierbaren kleinen Roboters in einer Bildschirmwelt ist für den Einstieg in das Programmmieren kaum mehr wegzudenken. Die aktuell genutzte Implementierung ist Robot Karol 3.0 und weitverbreitet. Das Design davon stammt aus dem Jahr 1993 und ist damit schon fast 30 Jahre alt! Das heißt erstmal: Es ist was Bewährtes. Aber es gib immer wieder Entwicklungen, bei denen es sich lohnt, nochmal über das Design einer Software nachzudenken.

Eine dieser Entwicklungen ist aus meiner Sicht die block-basierte Programmierung. Es wird damit nicht nur das leidige Problem mit Syntaxfehler umgangen - sondern sie gibt dem Programmieren auch ein ganz anderes Gefühl - bisschen so wie Lego. Man hat seinen Baukasten mit unterschiedlichen Steinen und kann diese zu größeren Gebilde zusammenstecken. Nur dass es keine Plastikquader sind, sondern Befehle und Kontrollstrukturen. Ein solches Gefühl zu erleben ist zentral, vor allem beim Einstieg, denn das ist der Punkt, an dem Menschen sich entscheiden, weiterzumachen oder aufzuhören!

Diese Neuimplementation versucht, das Bewährte zu erhalten und mit Neuem zu mischen. Die Regeln der Welt und die graphische Darstellung sind geblieben (bis auf einen neuen Karol im Paper-Look) - dazu gesellt sich nun ein blockbasierter Editor (powered by Blockly). Programmieren mit Text ist weiterhin möglich und erwünscht, vor allem im Hinblick auf den Anschluss an gängige Programmiersprachen. Ein Wechsel zwischen Blöcken und Code (in beide Richtungen) ist möglich.

Sprache

Anweisungen

grafik

Schritt - Karol geht einen Schritt nach vorne.

Schritt(anzahl) - Karol geht anzahl Schritte nach vorne.

LinksDrehen - Karol dreht sich um 90° nach links.

RechtsDrehen - Karol dreht sich um 90° nach rechts.

Hinlegen - Karol legt vor sich einen Ziegel.

Hinlegen(anzahl) - Karol legt vor sich anzahl Ziegel.

Aufheben - Karol hebt einen Ziegel vor sich auf.

Aufheben(anzahl) - Karol hebt anzahl Ziegel vor sich auf.

MarkeSetzen - Karol setzt unter sich eine Marke.

MarkeLöschen - Karol löscht Marke unter sich.

Beenden - Karol beendet an dieser Stelle die Ausführung des Programms.

Kommentare

grafik

// Kommentar - Nutze Kommentare, um den Code zu gliedern und die Struktur zu erklären.

Steuerung

grafik

wiederhole {n} mal {Anweisungen} endewiederhole - Wiederholung mit fester Anzahl

wiederhole solange {Bedingung} {Anweisungen} endewiederhole - Wiederholung mit Bedingung

wenn {Bedingung} dann {Anweisungen} endewenn - Einseitige bedingte Anweisung

wenn {Bedingung} dann {Anweisungen A} sonst {Anweisungen B} endewenn - Zweiseitig bedingte Anweisung

Bedingungen

grafik

IstWand / NichtIstWand - Karol testet, ob vor ihm eine Wand (oder ein Quader) ist oder nicht.

IstZiegel / NichtIstZiegel - Karol testet, ob vor ihm Ziegel liegen oder nicht.

IstMarke / NichtIstMarke - Karol testet, ob er auf einer Marke steht oder nicht.

IstNorden / NichtIstNorden - Karol testet, ob er nach Norden schaut oder nicht. (Norden = oben)

Beispiele

grafik

Karol baut eine kleine Burg: https://karol.arrrg.de/?id=H0rtb9iQo

grafik

Karol findet zurück zum Start: https://karol.arrrg.de/?id=lZtwOLmN9

grafik

Karol kopiert einen Stapel Ziegel: https://karol.arrrg.de/?id=RPXh1Tk1R

grafik

Karol legt den Boden mit Ziegeln aus: https://karol.arrrg.de/?id=MecEAhU2D

grafik

Karol legt mit Marken ein Schachbrettmuster: https://karol.arrrg.de/?id=EUOOAJ3I7

grafik

Karol räumt den Boden auf: https://karol.arrrg.de/?id=cEg42dNwy

grafik

Karol baut ein Schwimmbad und schwimmt hindurch: https://karol.arrrg.de/?id=lwl8yufk4

grafik

Karol findet Weg aus einem Raum: https://karol.arrrg.de/?id=fU4PXzhwB

grafik

Karol spielt FizzBuzz: https://karol.arrrg.de/?id=w-ZnWgG-Z

grafik

Karol invertiert den Boden: https://karol.arrrg.de/?id=eq0xUy4nz

grafik

Karol baut Treppen: https://karol.arrrg.de/?id=uvGUlYKtO

grafik

Karol addiert 5 und 7: https://karol.arrrg.de/?id=X6L6m7x3I

grafik

Karol multipliziert 3 und 5: https://karol.arrrg.de/?id=YhXnGAJZz (Nerdfrage: Welche Laufzeit hat der Algorithmus? Kann man den Algorithmus auch schneller schreiben? Auflösung hier)

grafik

Karol sortiert Stapel nach der Größe: https://karol.arrrg.de/?id=IAcMKSmST

karol_ziffern

Karol schreibt die Ziffern von 0 bis 9: https://karol.arrrg.de/?id=yHV8VsEak

gameoflifee

Karol simuliert Conways Game of Life: https://karol.arrrg.de/?id=lypiXliaW (damit zählt Robot Karol als Turing-vollständig Programmiersprache)

image

Karol findet Weg aus Labyrinth: https://karol.arrrg.de/?id=eHGQ1vYUR

grafik

Karol füllt einen umrandeten Bereich: https://karol.arrrg.de/?id=Zm1p1pF-z


Erweiterungen (nur im Textmodus verfügbar)

Im Textmodus gibt es einige Erweiterungen, die aus Robot Karol 3.0 übernommen wurden und die Sprache erweitern:

  • Eigene Anweisungen können mit Anweisung {Name} endeAnweisung definiert werden und überall mit Name aufgerufen werden. Außerdem kann aus einer Anweisung mit return zurückgesprungen werden. (x)
  • Die meisten Befehle erlauben eine objektorientiere Schreibweise der Form karol.Schritt(4) oder ohne Parameter in der Form karol.LinksDrehen().
  • Die alte Syntax mit *wiederhole, *wenn und *Anweisung wird weiterhin unterstützt.
  • Außerdem können weiterhin Kommentare mit { Kommentar } geschrieben werden. Alternative Syntax für mehrzeilige Kommentare ist /* Kommentar */, Alternative für einzeiligen Kommentar ist # Kommentar. (x)
  • Zur Abgrenzung von Befehlen kann ein Semikolon verwendet werden: Hinlegen; Schritt; LinksDrehen

(x) Durch Nutzung dieser Erweiterungen ist ein Umschalten in den Blockeditor leider nicht mehr möglich.

grafik

Karol findet mit dem Algorithmus von Dijkstra den kürzesten Weg, einige Erweiterungen kommen hier zum Einsatz: https://karol.arrrg.de/?id=K4xfaLLnM

Umstieg

Über die letzten Jahre hat sich Robot Karol immer wieder weiterentwickelt und neue Sprachelemente erhalten. Dadurch ist der Umfang der Sprache immer wieder angewachsen und besitzt nun eine gewisse Komplexität. Um wieder zurück zu einer "Minisprache" zu kommen, versucht Robot Karol Web, den Umfang der Sprache vorsichtig wieder zu verschlanken. Beim Umstieg sind bezüglich der Sprache folgende Punkte zu beachten:

  • Farbige Ziegel und Marken sind nicht implementiert
  • Der Rucksack ist nicht implementiert
  • Ton ist nicht implementiert
  • Bedingungen fallen raus, d.h. es lassen sich über Bedingung, wahr und falsch keine eigenen Bedingungen mehr definieren, sondern wird durch das Schlüsselwort return ersetzt
  • Willkürliche Groß-/Kleinschreibungen wie z.B. sCHritt werden nicht mehr unterstützt. Stattdessen kann man entweder schritt oder Schritt schreiben.
  • Der Platzhalter Programm wird nicht mehr unterstützt
  • Im Moment sind parametrisierten Varianten von Bedingungen z.B. IstZiegel(n) nicht implementiert
  • Alternative Schleifen-Varianten (wiederhole immer, wiederhole bis, ...) sind nicht unterstützt, außerdem wird das nicht Schlüsselwort bei Bedingungen nicht mehr benötigt
  • Ausführungsgeschwindigkeit kann angepasst werden, aber die Schlüsselworte schnell/langsam sind nicht implementiert
  • Einbindung von Bibliothek ist nicht implementiert

Falls eine dieser Punkte den Einsatz von Robot Karol Web verhindert, würde ich mich über eine Nachricht freuen. Dann kann ich nochmal die Vorteile und Nachteile eines Einbezugs untersuchen.

Entwicklung

Installiere node.js, git und yarn. Um das Repo dann zum Laufen zu bringen, benötigt es folgende Schritte:

git clone https://github.com/Entkenntnis/robot-karol-web.git
cd robot-karol-web
yarn
yarn dev

Danach ist die lokale Version über localhost:3000 verfügbar.

About

Der zeitlose Klassiker für den spielerischen Einstieg in die Programmierung.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 98.6%
  • Other 1.4%