Karel D. Robot
Ein spielerischer Weg, um OOP mit Delphi zu lernen
Siegfried Spolwig
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot ist
•
ein entfernter neuer Verwandter in der Karel-Familie, aber keine 1:1-Portierung nach
Delphi, sondern ein offener Ansatz
•
ein spielerischer Weg für den objektorientierten Einstieg in die Programmierung
•
gedacht für den Anfangsunterricht à la Karel the Robot
•
entwickelt für den Einstieg auf der Ebene einer Mini-Language und den gleitenden
Übergang in eine echte Programmiersprache
•
geeignet für den (Berliner) Einstieg über die Analyse komplexer Systeme
•
mit integrierter Hilfe, Dokumentation und Tutorial ausgestattet
•
objektorientiert (Architektur und Dot-Notation)
•
erweiterbar / veränderbar - auch ohne Quellcodes.
Hier liegen die eigentlich interessanten Möglichkeiten: andere Wesen, Sachen, Welten
und Methoden erfinden und entwickeln für den anspruchsvollen, fortgeschrittenen
Unterricht.
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 2 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karels Welten
Karel D. Robots Welt ist klein und übersichtlich. Sie
besteht aus 12 X 14 Feldern, die gleichzeitig die
Position der Objekte bestimmen. Jedes Objekt kennt
seine momentane Position: z. B. weiß der Roboter,
dass er auf B,2 steht.
Die 'Welt' selbst hat den Überblick auf alle und weiß
jederzeit, wer wo steht und was leer ist.
'Welt' ist verantwortlich für das gesamte Anzeigen,
Löschen und Entfernen aller Objekte.
1. Trainingscamp
Der Platz für die ersten Bedienungs- und
Programmierübungen. Es erscheinen der dumme
Roboter RD1 und ein paar Bäume, um die er
herumkurven kann.
Mögliche Aufgaben:
- Die Welt bebauen und verschönern.
- Dem Roboter neue Methoden beibringen
- Die Handsteuerung erweitern.
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 3 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karels Welten
2. Clean City
Was in Berlin nicht klappt - in Clean City aber!
Ein schmuckes Dörfchen mit bösartigen
Hundebesitzern, die nachts heimlich ihre Hunde
irgendwo ihre Häufchen machen lassen.
Die Gemeinde hat einen Putzroboter RD1
angeschafft, der das wegmachen soll.
Leider rennt der Roboter alles um, was ihm im Wege
steht. Es müssen ihm also noch Verhaltensregeln
beigebracht werden ...
3. Labyrinth
Am Ende ist die gelbe Blume. Karel soll sie finden
und mitbringen.
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 4 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karels Welten
4. My World
"Am Anfang war die Erde wüst und leer, und es war
finster auf der Tiefe ..." (1. Buch Mose, 1.2).
Hier können Sie Ihre eigene Welt erschaffen mit
eigenen oder vorhandenen Figuren und eigenen
Regeln.
Programmierhinweis:
Einfügen eines neuen Objekts in beliebige Welten:
- Objekt erzeugen z. B. Auto und
- an die gewünschte Stelle setzen mit
Auto.SetPos ('G',2)
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 5 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Die Akteure
Critters
Sie sind die primitiven Ur-Wesen in der Welt. Sie haben nur die aktiven
Methoden Vor und RechtsDrehen. Oberklasse für alles, was sich bewegt,
z. B. Hunde und Monster
Roboter
RD1
ist der Urgroßvater des legendären R2D2 aus Star Wars. Dumm, aber stark –
die geborene Killermaschine.
Karel ist ein Exemplar der 2. Generation. Er basiert auf der Technik von RD1 und
wurde darauf aufbauend weiterentwickelt. Säuberungs- und Entsorgungsaufgaben kann er spielend erledigen.
Matters
Sie sind die unbeweglichen Dinge in der Welt, die sie schön machen …
Programmierhinweis:
Bild einfügen, z. B. eine Blume
Blume.SetBild ('.\bilder\blume.bmp');
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 6 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot
OOA - Klassendiagramm
OOD
(stark verkürzt)
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 7 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot
Hilfe!!!
-
Mit wie vielen Klassen muss ich denn nun arbeiten?
…. Kein Grund zur Panik!
Als Anfänger arbeiten Sie nur in einem
Delphi-Formular. Die anderen Klassen stehen
Ihnen wie eine Bibliothek zur Verfügung,
wenn Sie etwas davon brauchen.
Als Fortgeschrittener nehmen Sie dann Ihre
erste eigene Klasse / Unit dazu.
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 8 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot als Unterrichts- und Lernwerkzeug
1. Die klassischen Aufgaben zur Algorithmik
procedure TControlFrm.SucheBlume;
// Findet und pflückt die Blume. Rekursive Suche.
Begin
If (RD1.HindernisPruefen is TBlume)
Then RD1.Aufnehmen
Else
Begin
If RD1.VorneFrei
Then
Begin
RD1.Vor;
SucheBlume;
RD1.Zurueck
End
Else
If RD1.linksFrei
Then
Begin
RD1.LinksDrehen;
SucheBlume;
RD1.RechtsDrehen
End
Else
Begin
RD1.RechtsDrehen;
SucheBlume;
RD1.LinksDrehen
End;
End;
End;
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 9 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot als Unterrichts- und Lernwerkzeug
Programmierunterricht?
Die klassischen Karels, Karas, Nikis & Co. sind für die Einführung in die imperative
Programmierung entwickelt, nicht für OOP. Es wird am Anfang ein Roboter
(Computer) programmiert, aber kein Programmsystem entwickelt.
Deshalb stellen sie nur das dazu erforderliche Aktionsrepertoire zur Verfügung, um
operative Aufgaben (einfache und schwierige Algorithmusprobleme) lösen zu können.
Insofern sind es nicht nur Mini-Languages, sondern auch geschlossene Systeme. Sie
lassen, bis auf wenige Ausnahmen, keine Gestaltung der Welt im Sinne von 00Modellierung zu.
Wer das will, sollte besser gleich den Original-Karel nehmen.
Was dann?
Die Ausgangslage
Die objektorientierte Denkweise selbst ist für Schüler nicht das Problem,
jedoch ist die handwerkliche Umsetzung,
„das Programmieren“ ,
wegen der fehlenden ausreichenden Übungszeit eine große Hürde.
.
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 10 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot als Unterrichts- und Lernwerkzeug
Neue Ziele
Betrachten wir typisch objektorientierte Aufgaben:

Bau eines besseren Roboters,

Gestaltung einer neuen Landschaft (Welt) und

Probleme für mehr als einen Roboter
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 11 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot als Unterrichts- und Lernwerkzeug
2. Ein besserer Roboter
type
TMeinKarel = class(TKarel)
public
constructor Create;
function LinksFrei: boolean;
procedure LinksDrehen;
function HintenFrei: boolean;
procedure Zurueck;
end;
constructor TMeinKarel.Create;
begin
inherited Create;
end;
function TMeinKarel.HintenFrei: boolean;
begin
RechtsDrehen;
RechtsDrehen;
Result := VorneFrei; // Methodenaufruf
RechtsDrehen;
RechtsDrehen;
end;
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
procedure TMeinKarel.LinksDrehen;
begin
RechtsDrehen;
RechtsDrehen;
RechtsDrehen;
end;
function TMeinKarel.LinksFrei: boolean;
begin
LinksDrehen;
Result := VorneFrei;
RechtsDrehen;
end;
procedure TMeinKarel.zurueck;
begin
RechtsDrehen;
RechtsDrehen;
If VorneFrei Then Vor;
RechtsDrehen;
RechtsDrehen;
end;
Folie 12 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot als Unterrichts- und Lernwerkzeug
3. Die Welt gestalten
UNIT uGras;
(* ************************************************
(* Beschreibung: Die Klasse bildet Gras ab
(* Compiler : Delphi 6
(* Aenderungen : 0.9
01-MAR-04
(* ************************************************
INTERFACE
uses uMatter;
*)
*)
*)
*)
*)
type
TGras = class (TMatter)
private
public
constructor Create; override;
procedure Init;
end;
Mit wenig Aufwand neue Klassen
erstellen
type
TBlume = class (TMatter)
public
constructor Create; override;
procedure Init;
end;
IMPLEMENTATION
constructor TGras.Create;
begin
inherited Create;
Init;
end;
constructor TBlume.Create;
begin
inherited Create;
Init;
end;
procedure TGras.Init;
begin
SetBild('.\Bilder\Gras1.bmp');
end;
procedure TBlume.Init;
begin
SetBild('.\Bilder\Blume.bmp');
end;
END.
END.
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 13 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot als Unterrichts- und Lernwerkzeug
Die Welt gestalten
Eine Pyramide bauen,
ein Monster und
eine Scheibe für das
Monster erzeugen
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
constructor TPyramide.Create;
var i :integer; Buchstabe: char;
begin
inherited Create;
Welt.AlleItemsEntfernen; // alten Kram weg
for Buchstabe := 'D' to 'K' do
begin
Mauer := TStein.Create;
Mauer.Init;
Mauer.SetPos(Buchstabe,12);
end;
for Buchstabe := 'E' to 'J' do
begin
Mauer := TStein.Create;
Mauer.Init;
Mauer.SetPos(Buchstabe,11);
end;
for Buchstabe := 'F' to 'I' do
begin
Mauer := TStein.Create;
Mauer.Init;
Mauer.SetPos(Buchstabe,10);
end;
for Buchstabe := 'G' to 'H' do
begin
Mauer := TStein.Create;
Mauer.Init;
Mauer.SetPos(Buchstabe,9);
end;
Scheibe := TScheibe.Create;
Scheibe.Init;
Scheibe.SetPos('H', 8);
Monster := TMonster.Create;
Monster.Init;
Monster.SetPos('N', 12);
Init;
end;
Folie 14 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot als Unterrichts- und Lernwerkzeug
4. Mehrere Roboter teilen sich eine Aufgabe
procedure TControlFrm.GrasMaehen;
// Robots fahren eine Schnecke nach innen
begin
repeat
if RD1.HindernisPruefen is TGras
then RD1.Vor; // und weg damit
if RD2.HindernisPruefen is TGras
then RD2.Vor;
if RD1.VorneFrei
then RD1.RechtsDrehen;
if RD2.VorneFrei
then RD2.RechtsDrehen;
until ((RD1.VorneFrei)and(RD2.VorneFrei));
end;
procedure TControlFrm.StartBtnClick(Sender:TObject);
begin
inherited;
GrasMaehen;
end;
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 15 von 16
Karel
Karel D.
D. Robot
Robot –– Ein
Ein spielerischer
spielerischer Weg,
Weg um
um OOP
OOP mit
mit Delphi
Delphi zu
zu lernen
lernen
Karel D. Robot als Anregung für Ihre Phantasie
Viel Spaß und gutes Gelingen!
03.01.2005 Idee und Layout: S. Spolwig u. Chr. Steinbrucker
Folie 16 von 16
Descargar

Karel D. Robot - Ein spielerischer Weg, um OOP mit Delphi