05.04.2013 Aufrufe

Robot Karol für Delphi: Entwicklerhandbuch

Robot Karol für Delphi: Entwicklerhandbuch

Robot Karol für Delphi: Entwicklerhandbuch

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Robot</strong> <strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong>: <strong>Entwicklerhandbuch</strong><br />

Reinhard Nitzsche, OSZ Handel I<br />

Version 0.1 vom 24. Januar 2003<br />

Zusammenfassung<br />

Dieses Handbuch beschreibt die <strong>Delphi</strong>-Klasse c<strong>Karol</strong> <strong>für</strong> Entwickler<br />

und Entwicklerinnen von Anwendungen mit <strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong>.<br />

Inhaltsverzeichnis<br />

1 <strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong> 2<br />

1.1 Unterschiede zwischen dem Original <strong>Robot</strong> <strong>Karol</strong> und <strong>Karol</strong><br />

<strong>für</strong> <strong>Delphi</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

1.2 <strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong> einbinden . . . . . . . . . . . . . . . . . . . 2<br />

2 Schnittstellenbeschreibung 3<br />

2.1 Exemplare von <strong>Karol</strong> erzeugen und löschen . . . . . . . . . . 3<br />

2.2 <strong>Karol</strong> bewegen . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

2.3 <strong>Karol</strong>s Sensoren . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />

2.4 Ablaufsteuerung . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

2.5 Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

3 Laufzeitfehler 6<br />

4 Bekannte Fehler 7<br />

1


1 <strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong><br />

1.1 Unterschiede zwischen dem Original <strong>Robot</strong> <strong>Karol</strong> und <strong>Karol</strong><br />

<strong>für</strong> <strong>Delphi</strong><br />

<strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong> orientiert sich weitgehend an <strong>Robot</strong> <strong>Karol</strong>. In folgenden<br />

unwesentlichen Punkten weicht <strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong> jedoch vom Original ab:<br />

• Die Höhe der Welt wird nicht berücksichtigt.<br />

• Das Spielfeld von <strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong> hat keine frei wählbare Höhenbeschränkung,<br />

die Ziegelstapel dürfen bis zu 32725 Steine hoch werden.<br />

• Es bestehen keinerlei Beschränkungem von <strong>Karol</strong>s Tragekapazität.<br />

<strong>Karol</strong> hat auch immer genügend Ziegel dabei.<br />

• Es ist keine 3D-Darstellung verfügbar.<br />

• Die maximal mögliche Sprunghöhe von <strong>Karol</strong> kann nicht verändert<br />

werden.<br />

• Alle wesentlichen Einstellungen, die beim Original-<strong>Karol</strong> im Menupunkt<br />

„Einstellungen“ zu tätigen waren, sind Methoden von <strong>Karol</strong><br />

<strong>für</strong> <strong>Delphi</strong> geworden oder wurden nicht implementiert.<br />

• Die Methoden Schritt(〈n〉), Hinlegen(〈n〉) und Aufheben(〈n〉)<br />

sind nicht implementiert.<br />

• Erweiterungen siehe Abschnitt 2.5.<br />

1.2 <strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong> einbinden<br />

<strong>Karol</strong> <strong>für</strong> <strong>Delphi</strong> befindet sich in der Unit u<strong>Karol</strong>. Sie wird in die Liste<br />

importierter Units im Interface-Abschnitt der eigenen Unit aufgenommen.<br />

Die Unit u<strong>Karol</strong> stellt die Klasse c<strong>Karol</strong> zur Verfügung, deren Methoden<br />

und Eigenschaften in diesem Dokument beschrieben werden.<br />

Beim Erzeugen eines <strong>Karol</strong>-Exemplars wird automatisch ein Formular geöffnet,<br />

in dem <strong>Karol</strong> und seine Welt angezeigt werden.<br />

2


2 Schnittstellenbeschreibung<br />

2.1 Exemplare von <strong>Karol</strong> erzeugen und löschen<br />

Create(〈owner〉: TForm;<br />

〈breite〉, 〈hoehe〉: Word;<br />

〈posx〉, 〈posy〉: Word);<br />

CreateFromFile(〈owner〉:TForm;<br />

const 〈f 〉: string);<br />

Create und CreateFromFile erzeugen einen neuen <strong>Karol</strong> inklusive<br />

Spielfeld und zeigen das Spielfeld sofort an. Die Größe von <strong>Karol</strong>s Spielfeld<br />

lässt sich im Nachhinein nicht mehr ändern.<br />

〈owner〉 ist das Formular, an das <strong>Karol</strong> gebunden sein soll. In der Regel wird<br />

dies das Hauptfenster der Anwendung sein.<br />

Bei Create hat das Spielfeld die Breite 〈breite〉 und die Höhe 〈hoehe〉. <strong>Karol</strong><br />

steht auf dem Feld (〈posx〉/〈posy〉) mit Blick nach Süden. Werden 〈posx〉<br />

und 〈posy〉 nicht angegeben, so wird <strong>Karol</strong> in die linke obere Ecke gesetzt<br />

(0/0).<br />

Beispiel:<br />

Create(NavigatorFrm, 20, 10);<br />

Erstellt einen neuen <strong>Karol</strong>. Seine Welt hat die Breite 20 und die Höhe 10.<br />

Weil 〈posx〉 und 〈posy〉 nicht angegeben sind, steht <strong>Karol</strong> in der Nordostecke<br />

seiner Welt.<br />

Bei CreateFromFile wird das Spielfeld aus der Datei mit dem Pfad und<br />

dem Namen 〈f 〉 ausgelesen. Diese Datei muss zuvor von <strong>Karol</strong> 2 deutsch<br />

(Freiberger/Krško) gespeichert worden sein.<br />

Beispiel:<br />

CreateFromFile(NavigatorFrm, ’test.kdw’);<br />

Erstellt einen neuen <strong>Karol</strong> und liest die im Arbeitsverzeichnis liegende Datei<br />

test.kdw ein.<br />

Dies ist die einzige Möglichkeit Quader in <strong>Karol</strong>s Welt zu platzieren!<br />

Destroy;<br />

Löscht das <strong>Karol</strong>-Exemplar.<br />

Bitte Abschnitt 4 beachten! <br />

3


2.2 <strong>Karol</strong> bewegen<br />

Schritt;<br />

Schritt(〈n〉: Byte);<br />

<strong>Karol</strong> macht einen Schritt (bzw. 〈n〉 Schritte) nach vorne.<br />

Mögliche Fehler: Sofern <strong>Karol</strong> dabei zu hoch oder zu tief springen oder in <br />

einen Quader oder durch eine Wand laufen müsste, wird der Schritt nicht<br />

ausgeführt. Fehlerbehandlung siehe Abschnitt 3.<br />

LinksDrehen;<br />

RechtsDrehen;<br />

<strong>Karol</strong> dreht sich nach links bzw. rechts.<br />

Hinlegen;<br />

Aufheben;<br />

<strong>Karol</strong> legt einen Ziegel auf das Feld vor sich bzw. nimmt von dort einen<br />

auf. Anders als im Original gibt es keine Beschränkung von <strong>Karol</strong>s Tragfähigkeit.<br />

<strong>Karol</strong> hat also immer genügend Platz im Rucksack und immer<br />

noch einen Ziegel verfügbar.<br />

Mögliche Fehler: Die Methode wird nicht ausgeführt, wenn <strong>Karol</strong> vor ei- <br />

ner Wand oder vor einem Quader steht oder bei Aufheben kein Ziegel<br />

vorhanden ist. Fehlerbehandlung siehe Abschnitt 3.<br />

Die Höhe der Ziegelstapel ist auf 32 725 Ziegel begrenzt. Hinlegen über- <br />

prüft nicht auf das Überschreiten dieser Grenze!<br />

MarkeSetzen;<br />

MarkeLoeschen;<br />

<strong>Karol</strong> setzt bzw. löscht Marken. Bereits markierte Felder dürfen nochmals<br />

markiert werden. Ebenso dürfen die „Marken“ unmarkierte Felder gelöscht<br />

werden.<br />

2.3 <strong>Karol</strong>s Sensoren<br />

Die Eigenschaften dieses Abschnittes können vom Entwickler nicht direkt<br />

verändert werden (read-only). Sie repräsentieren sozusagen <strong>Karol</strong>s Sensoren.<br />

4


IstZiegel: Boolean;<br />

IstZiegel(〈n〉:Byte): Boolean;<br />

Wahr, wenn <strong>Karol</strong> auf einen Ziegelstapel schaut. Die zweite Version der<br />

Eigenschaft ist wahr, wenn der Ziegelstapel genau die Höhe 〈n〉 hat.<br />

IstWand: Boolean;<br />

Wahr, wenn <strong>Karol</strong> auf eine Wand oder einen Quader schaut.<br />

IstMarke: Boolean;<br />

Wahr, wenn <strong>Karol</strong> auf einem markierten Feld steht.<br />

IstVoll: Boolean;<br />

IstLeer: Boolean;<br />

Wahr, wenn <strong>Karol</strong>s Rucksack voll bzw. leer ist. Diese beiden Eigenschaften<br />

liefern zur Zeit immer „wahr“ (true).<br />

IstSueden: Boolean;<br />

IstNorden: Boolean;<br />

IstWesten: Boolean;<br />

IstOsten: Boolean;<br />

Diese Eigenschaften sind wahr, wenn <strong>Karol</strong> in die entsprechende Richtung<br />

schaut.<br />

2.4 Ablaufsteuerung<br />

Diese Methoden sind im Original-<strong>Karol</strong> Teil der Benutzeroberfläche bzw.<br />

der Programmiersprache.<br />

Schnell;<br />

Die Aktualisierung der Anzeige wird ausgeschaltet. Bei Fehlern (siehe Abschnitt<br />

3) wird die Anzeige in jedem Fall aktualisiert.<br />

Langsam;<br />

Die Aktualisierung der Anzeige wird wieder angeschaltet. Nach jeder Veränderung<br />

von <strong>Karol</strong> oder seiner Welt wird die Anzeige aktualisiert.<br />

5


SetVerzoegerung(〈t〉: LongInt);<br />

function GetVerzoegerung: LongInt;<br />

Setzt bzw. liefert die Wartezeit, die vor dem Neuzeichnen von <strong>Karol</strong> verstreicht.<br />

Sofern <strong>Karol</strong> auf „Schnell“ geschaltet wurde, hat dieser Wert keine<br />

Bedeutung!<br />

2.5 Erweiterungen<br />

Pos_x: Word;<br />

Pos_y: Word;<br />

Diese beiden Eigenschaften liefern die Koordinaten, an denen <strong>Karol</strong> sich<br />

gerade befindet. Sie können nur gelesen, nicht aber geschrieben werden!<br />

Repaint;<br />

Repaint(〈komplett〉: Boolean);<br />

Diese Methoden sind nur zur Korrektur von etwaigen Fehlern von <strong>Karol</strong><br />

<strong>für</strong> <strong>Delphi</strong> wichtig. Sie zeichnen <strong>Karol</strong> und seine Welt neu. Standardmäßig<br />

(Repaint und Repaint(false)) wird nur derjenige Teil der Welt neu<br />

gezeichnet, der sich seit der letzten Operation verändert haben könnte. 1<br />

Nur der Aufruf Repaint(true) führt zu einem kompletten Neuzeichnen<br />

der gesamten Welt.<br />

3 Laufzeitfehler<br />

In bestimmten Fehlersituationen ist es notwendig, dass der Benutzer <strong>Karol</strong><br />

sagt, was er tun soll, weil <strong>Karol</strong> selbst diese Entscheidung nicht treffen<br />

kann. Diese Situationen können jederzeit während der Laufzeit des Programms<br />

auftreten:<br />

1. <strong>Karol</strong> steht vor einer Wand oder einem Quader und soll einen Schritt<br />

nach vorne machen.<br />

2. <strong>Karol</strong> soll einen zu hohen Sprung ausführen.<br />

3. <strong>Karol</strong> soll einen Ziegel aufheben und es ist keiner da.<br />

In allen diesen Situationen wird wie folgt verfahren:<br />

1 Also das Feld auf dem <strong>Karol</strong> steht und alle direkt benachbarten Felder.<br />

6


1. Die Anzeige wird aktualisiert.<br />

2. Der Benutzer bekommt eine entsprechende Meldung angezeigt und<br />

wird aufgefordert zu entscheiden, ob <strong>Karol</strong> weiter machen oder das<br />

Programm beendet werden soll.<br />

4 Bekannte Fehler<br />

• Die Größe der Welt (Spielfeld) ist derzeit auf 20 mal 20 Felder be- <br />

grenzt. Bei größeren Welten gab es Programmabstürze beim Erzeugen<br />

der Welt. Die verfügbare Größe erscheint <strong>für</strong> die meisten Anwendungen<br />

ausreichend.<br />

• Beim Löschen und anschließenden Wiederherstellen von <strong>Karol</strong> über <br />

den Konstruktor Create kommt es zum Programmabsturz. 2<br />

• Die Fehlerbehandlung beim Erstellen von <strong>Karol</strong> ist äußerst lücken- <br />

haft (z. B. kann <strong>Karol</strong> außerhalb seiner Welt stehen.).<br />

2 Der Grund ist unbekannt. Besonders merkwürdig: Das Problem tritt bei<br />

CreateFromFile nicht auf, obwohl dabei intern auf Create zurückgegriffen wird.<br />

7

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!