
type TFeldPunkt = array of TObjekt; |
Die als Parameter übergebenen Daten werden in den entsprechenden Attributen gespeichert. Die Länge und Breite des HatFeld-Arrays wird entsprechend der Parameter gesetzt. Solange wie noch nicht alle gewünschte Items erstellt wurden... ...wird zufällig eine Koordinate ermittelt ...ein Item an dieser Koordinate hinzugefügt ...die Anzahl der noch zu erstellenden Items verringert Solange wie noch nicht alle gewünschte Hindernisse erstellt wurden... ...wird zufällig eine Koordinate ermittelt Wenn an dieser Koordinate noch kein Item vorhanden ist... ...wird an dieser Koordinate ein Hindernis erstellt ...die Anzahl der noch zu erstellenden Hindernisse verringert |
procedure TFeld.erstelleFeld (pBreite: Integer; pTiefe: Integer;
pRoboterStartXPosition: Integer; pRoboterStartYPosition: Integer;
pItemAnzahl: Integer; pHindernisAnzahl: Integer);
var
loopX, loopY : Integer;
tmpXPosition, tmpYPosition : Integer;
begin
FeldTiefe := pTiefe;
FeldBreite := pBreite;
FeldPunktTiefe := kenntImage.Height / FeldTiefe;
FeldPunktBreite := kenntImage.Width / FeldBreite;
RoboterXPosition := pRoboterStartXPosition;
RoboterYPosition := pRoboterStartYPosition;
RoboterBlickRichtung := 0;
SetLength(hatFeld,FeldBreite);
for loopX := 0 to FeldBreite - 1 do
begin
SetLength(hatFeld[loopX],FeldTiefe);
for loopY := 0 to FeldTiefe - 1
do SetLength(hatFeld[loopX][loopY],0);
end;
//--Items erstellen--
while pItemAnzahl <> 0 do
begin
tmpXPosition := Random(feldBreite);
tmpYPosition := Random(feldTiefe);
if ((tmpXPosition <> pRoboterStartXPosition) or (tmpYPosition <> pRoboterStartYPosition)) then
begin
SetLength(hatFeld[tmpXPosition][tmpYPosition], length(hatFeld[tmpXPosition][tmpYPosition]) + 1);
hatFeld[tmpXPosition][tmpYPosition]
[length(hatFeld[tmpXPosition][tmpYPosition]) - 1] := TItem.init(kenntImage.canvas);
pItemAnzahl := pItemAnzahl - 1;
end;
end;
//--Items erstellen--
//--Hindernisse erstellen--
while pHindernisAnzahl <> 0 do
begin
tmpXPosition := Random(feldBreite);
tmpYPosition := Random(feldTiefe);
if (tmpYPosition <> pRoboterStartYPosition)) and ((tmpXPosition <> pRoboterStartXPosition) or
(length(hatFeld[tmpXPosition][tmpYPosition]) = 0) then
begin
SetLength(hatFeld[tmpXPosition][tmpYPosition], length(hatFeld[tmpXPosition][tmpYPosition]) + 1);
hatFeld[tmpXPosition][tmpYPosition]
[length(hatFeld[tmpXPosition][tmpYPosition]) - 1] := THindernis.init(kenntImage.canvas);
pHindernisAnzahl := pHindernisAnzahl - 1;
end;
end;
//--Hindernisse erstellen--
zeichneDich;
end;
|
Bender bewegt sich nur wenn vorne auch frei ist. Die aktuellen Koordinaten werden vom Feld geholt. Je nach Blickrichtung werden die Koordinaten verändert. Die neuen Koordinaten werdem dem Feld mitgeteilt. Feld und Roboter werden neugezeichnet. |
procedure TBender.vor;
var
XPosition, YPosition : Integer;
begin
if vorneFrei then
begin
XPosition := kenntFeld.gibRoboterXPosition;
YPosition := kenntFeld.gibRoboterYPosition;
case kenntFeld.GibRoboterBlickRichtung of
0: XPosition := XPosition + 1;
180: XPosition := XPosition - 1;
90: YPosition := YPosition - 1;
270: YPosition := YPosition + 1
end;
kenntFeld.SetzeRoboterXPosition(XPosition);
kenntFeld.SetzeRoboterYPosition(YPosition);
kenntFeld.zeichneDich;
zeichneDich;
end;
end;
|
Nur wenn sich auf Bender Position ein Item befindet kann diese aufgenommen werden Der FeldPunkt an Benders Position wird vom Feld geholt Das letzte Item auf dem Feldpunkt wird in Benders Rucksack gespeichert und aus dem Feldpunkt entfernt. Der geänderte Feldpunkt wird an Bender Position im HatFeld-Array gespeichert. Feld und Roboter werden neugezeichnet. |
procedure TBender.nimm;
var
tmpFeldPunkt : TFeldPunkt;
begin
if itemDa then
begin
tmpFeldPunkt := kenntFeld.gibFeldPunktAnRoboterPosition;
setLength(hatRucksack, length(hatRucksack) + 1);
hatRucksack[length(hatRucksack) - 1] := tmpFeldPunkt[length(tmpFeldPunkt) - 1];
tmpFeldPunkt[length(tmpFeldPunkt) - 1] := NIL;
SetLength(tmpFeldPunkt, length(tmpFeldPunkt) - 1);
kenntFeld.setzeFeldPunktAnRoboterPosition(tmpFeldPunkt);
kenntFeld.zeichneDich;
zeichneDich;
end;
end;
|
|
Zur nächsten Seite |
| © 2004 LK 13 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |