Hallo und

hier im Delphi-Forum.de!
Vorab: Wie setzt du die Begin´s und End´s bei den IF-THEN Anweisungen? War der Code überhaupt zu compilieren? So ist es richtig:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| If Bedingung Then Begin End; |
oder
Delphi-Quelltext
Als erstes würde ich die Boolean-Variablen rechts, links, ... entfernen und einen Aufzählungstypen definieren weil... Da die Spielfigur ja nur in eine Richtung laufen kann würde ich von den vier Boolean Variablen absehen da man ja gleichzeitig mehrere Variablen auf True stellen könnte (macht also keinen Sinn). Deshalb erstelle lieber ein Aufzählungstypen der die Richtung angibt:
Delphi-Quelltext
1: 2:
| Type TRichtung = (rRechts, rLinks, rOben, rUnten); |
Davon kannst du dann eine Variable definieren:
Delphi-Quelltext
1: 2:
| Var AktuelleRichtung: tRichtung; |
Außerdem würde ich einen Aufzählungstypen definieren mit dem man die Drehrichtung festlegen kann:
Delphi-Quelltext
1: 2:
| Type tDrehrichtung = (drLinks, drRechts); |
Um später bestimmen zu können wie rum und um wieviel Grad gedreht werden muss um von einer Ausgangsrichtung in eine andere Richtigung zu gelangen definieren wir ein 2 Dimensionales Konstanten Array:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Const cBewegung : Array [tRichtung, tRichtung] of Record DR: TDrehrichtung; G: Integer; end = ( ((DR: drKeine; G: 0), (DR: drLinks; G: 90), (DR: drLinks; G: 180), (DR: drRechts; G: 90)), ((DR: drRechts; G: 90), (DR: drKeine; G: 0), (DR: drLinks; G: 90), (DR: drRechts; G: 180)), ((DR: drLinks; G: 180), (DR: drRechts; G: 90), (DR: drKeine; G: 0), (DR: drLinks; G: 90)), ((DR: drLinks; G: 90), (DR: drLinks; G: 180), (DR: drRechts; G: 90), (DR: drKeine; G: 0)) ); |
Das FormKeyDown Event würde ich dann wie folgt ändern:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Var NeueRichtung: tRichtung; Begin Case Key of xy: NeueRichtung := rRechts; xy: NeueRichtung := rLinks; 38: NeueRichtung := rOben; xy: NeueRichtung := rUnten; End;
With cBewegung [AktuelleRichtung, NeueRichtung] Do Case DR Of drKeine: ; drLinks: Turtle1.LT (G); drRechts: Turtle1.RT (G); End;
AktuelleRichtung := NeueRichtung; End; |
Ich hofffe ich konnte dir einen kleinen Tipp geben wie du es eventl. lösen könntest
Gruß
Tino