UNIT uRobot;
(* ******************************************************************** *)
(* K L A S S E : TRobot *)
(* -------------------------------------------------------------------- *)
(* Version : 2.4 *)
(* Autor : (c) 2004-2005, Siegfried Spolwig *)
(* Beschreibung: Die Klasse bildet den Ur-Roboter RD1 der 1. Generation *)
(* ab. Er ist nur mit wenigen Features ausgestattet (s.u.)*)
(* Felder, die er passiert hat, sind leer. *)
(* *)
(* Compiler : Delphi 6 *)
(* Aenderungen : 0.9 11-MAR-04 *)
(* 2.2 20-JUL-04 s. Doc *)
(* 2.21 30-Nov-04 macht Spur *)
(* 2.2.1 16-DEC-04 keine Spur bei OFFlimits; machtSpur *)
(* in Vor geändert *)
(* 2.4 18-APR-05 Vor geändert (Blackhole) *)
(* ******************************************************************** *)
INTERFACE
// =======================================================================
uses
uGrafik,
uItem,
uCritter,
uMemory;
type
TRobot = class(TCritter)
protected
Form,
Lampe : TKreis;
Gedaechtnis : TMemory;
Schrittzaehler: integer;
Batteriestand : integer;
MachtSpur : boolean;
public
constructor Create; override;
procedure Init;
procedure SetPos(spalte: char; zeile: integer); override;
procedure Vor;
procedure RechtsDrehen;
function HindernisPruefen : TItem;
function VorneFrei : boolean;
function BatterieLeer : boolean;
procedure BatterieAufladen;
procedure MacheSpur;
procedure KeineSpur;
function DaGewesen : boolean;
function GetSchrittZaehler : integer;
function GetBatteriestand : integer;
procedure Zeigen; override;
procedure Loeschen; override;
procedure Entfernen; override;
procedure InsGedaechtnis(action : string);
function GetGedaechtnis : TMemory;
private
procedure Step;
procedure Aktualisieren;
end;
(* -------------------- B e s c h r e i b u n g -------------------------
Oberklasse : TCritter
Bezugsklassen : TMemory, TZeit, 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,
Geschwindigkeit ist 1; Gedaechtnis ist leer.
Set...
Auftrag: Attribut schreiben
vorher : -
nachher: Attribut ist gesetzt
Get...
Auftrag: Attribut aus dem Objekt lesen
vorher : -
nachher: -
Vor
Auftrag: Exemplar geht 1 Feld in der aktuellen Richtung vorwärts unabhängig
davon, ob das Feld besetzt ist
vorher : Batterie ist geladen
nachher: Eins weiter oder Stehenbleiben, wenn HindernisPruefen oder
Batteriestand = 0
RechtsDrehen
Auftrag: Auf der aktuellen Position um 90 Grad nach rechts drehen
vorher : -
nachher: neue Richtung gesetzt. Lampe zeigt in neue Richtung.
HindernisPruefen
Anfrage: Item auf dem nächsten vorausliegenden Feld holen, damit es
angesprochen werden kann. Rote Warnlampe an.
vorher : -
nachher: liefert Item oder NIL
VorneFrei
Anfrage: prüfen, nächstes Feld frei ist
vorher : -
nachher: True, wenn Feld leer (NIL) ist.
BatterieLeer
Anfrage: ob Batterie leer ist
vorher : -
nachher: true, wenn Batteriestand = 0
BatterieAufladen
Auftrag: leere Batterie laden
vorher : -
nachher: Ladung ist 40 Einheiten
MacheSpur
Auftrag: Eine Spur auf dem Feld hinterlassen, das der Roboter als voriges
betreten hat
vorher : -
nachher: Spur (ein Item!) ist gesetzt.
KeineSpur
Auftrag: Spur abschalten
vorher : -
nachher: Machtspur ist false.
InsGedaechtnis(action : string);
Auftrag: action,i.e. letzte Anweisung (z. Z. 'Vor', 'RechtsDrehen'),
Spalten- u. Zeilenposition merken. Startposition wird nicht erfasst.
vorher : -
nachher: Action, Spalte, Zeile im Gedaechtnis (Speicher, nicht Platte!)
DaGewesen
Anfrage: ob Roboter das naechste Feld in Laufrichtung schon betreten hatte.
vorher : Das Feld war mit 'Vor' erreicht. Ausgangsposition wird nicht erfasst.
nachher: true, wenn ein Feld mit der Folgeposition im Gedächtnis gefunden
wird
--------------------------------------------------------------------- *)
|