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 Themenübersicht | |
Zum Seitenanfang | |
Zur vorigen Seite | Zur nächsten Seite |
© 2004 LK 13 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |