UNIT uKarel;
(* ******************************************************************** *)
(* K L A S S E : TKarel *)
(* -------------------------------------------------------------------- *)
(* Version : 2.4 *)
(* Autor : (c) 2004, Siegfried Spolwig *)
(* Beschreibung: Die Klasse bildet den Roboter Karel der 2. Generation *)
(* ab. *)
(* Compiler : Delphi 6 *)
(* Aenderungen : 0.9 11-MAR-04 *)
(* 2.3.2 14-FEB-05 VorDemAbgrund *)
(* 2.4 17-APR-05 Ein-, Auslagern, Ablegen erweitert *)
(* für Blackhole,GetLademenge umbenannt*)
(* ******************************************************************** *)
INTERFACE
// =======================================================================
uses
uRobot,
uStack;
type
TKarel = class(TRobot)
protected
Container : TStack; // zum Aufladen von Objekten
public
constructor Create; override;
procedure Init;
procedure Vor;
procedure Aufnehmen;
procedure Ablegen;
procedure Einlagern;
procedure Auslagern;
function GetLadeMenge : integer; // Anzahl der Items im Container
function VorDemAbgrund : boolean;
private
procedure Aktualisieren;
end;
(* -------------------- B e s c h r e i b u n g -------------------------
Oberklasse : TRobot
Bezugsklassen : TZeit, TStack, TFensterFrm - importiert: Welt
Methoden
--------
Create
Auftrag: Exemplar erzeugen und init.
vorher :
nachher:
Init
Auftrag: Anfangswerte setzen
vorher : -
nachher: Richtung ist S; Schrittzaehler ist 0; Batteriestand ist 40;
Container ist leer; max. Lademenge ist 24; macht keine Spur.
Vor
Auftrag: Exemplar geht 1 Feld in der aktuellen Richtung vorwärts oder
bleibt stehen, wenn Batterie leer oder das Feld besetzt ist.
Position in das Gedaechtnis.
vorher : Batterie ist geladen
nachher: neue Pos ist angemeldet, wenn neue Pos erreicht;
vorige Pos ist abgemeldet (NIL!!). Fehlermeldung, wenn Feld besetzt.
Aufnehmen
Auftrag: Das Item von dem nächsten Feld in Laufrichtung in den Container
stapeln.
vorher : Container ist nicht voll.
nachher: Item ist vom alten Feld abgemeldet. Fehlermeldung bei vollem
Container.
Ablegen
Auftrag: Das oberste Item aus dem Container (LIFO) auf dem nächsten Feld
in Laufrichtung absetzen.
vorher : Container ist nicht leer und Feld ist frei.
nachher: Item ist auf neuem Feld angemeldet. Fehlermeldung bei leerem Container.
Einlagern
Auftrag: Item aus dem Container ins Lagerhaus abgeben
vorher : Karel steht vor dem Lagerhaus und Container ist nicht leer, Lagerhaus
ist nicht voll.
nachher: Item ist dem Container entnommen und vom Lagerhaus angenommen.
Fehlermeldung bei leerem Container.
Auslagern
Auftrag: Item aus dem Lagerhaus nehmen und in den Container stapeln.
vorher : Karel steht vor dem Lagerhaus, Container ist nicht voll und Lagerhaus
ist nicht leer.
nachher: done. Fehlermeldung bei vollem Container.
GetLadeMenge
Anfrage: wie viele Objekte im Container sind
vorher : -
nachher: gibt Anzahl zurück
VorDemAbgrund
Anfrage: ob die nächste Vor-Position OffLimits (außerhalb der Welt) ist.
vorher : -
nachher: true, wenn auf Aussenfeld und Richtung nach außerhalb der Welt zeigt
--------------------------------------------------------------------- *)
|