'Nabend
DP,
Ich habe da ein kleines Spiel (Tron
) geplant. Soweit läuft auch alles gut.
Aaaaber: Mir ist aufgefallen, dass ich 2x ganz schnell eine Taste drücken kann und das 'Bike' fährt gegen seine eigene Mauer (dreht sich um 180°)
Daher habe ich zunächst einfach weitere Tasteneingaben gesperrt, bis das Bike eine Position weiter ist. Das finde ich aber eigenltich sehr unschön, und würde die Tastendrücke gerne nacheinander abaerbeiten.
Somit bin ich dann bei TStack und TQueue gelandet. Soweit ich das richtig verstanden habe gibt es für meine Delphi Version (D7 Enterprise) keine TStack <Integer> ö.Ä. - er nimmt nur Zeiger an
Nun zu meinem eigentlichen Problem:
Delphi-Quellcode:
procedure TMain.MainKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
70: Tasten.Push(@Key); // [F] - LINKS
74: Tasten.Push(@Key); // [J] - RECHTS
end;
end;
Angenommen es liegt auf dem Stack ein Zeiger der auf Key zeigt. Dann würde doch bei meinem nächsten Tastendruck beide Items auf den selben Key zeigen oder irre ich da
Und wenn es trotzdem unterschiedliche Werte sein sollten - wie wertet man den Stack wieder aus ?
Ich hatte mir gedacht, dass vor jeder Bewegung geprüft wird, welche Richtung er gehen soll:
Delphi-Quellcode:
procedure TMain.Timer1Timer(Sender: TObject);
var
i: ^Integer;
begin
i := Tasten.Pop;
case ^i of
70: Spieler[0].dreheLinks;
74: Spieler[0].dreheRechts;
darstellen(Sender);
end;
Nun meckert der Compiler aber, dass 'i' kein Integer sondern ein Char sein soll .. wobei der Zeiger doch auf einen Integer zeigt
Ich hoffe ich konnte mich halbwegs verständlich ausdrücken
Ist für mich das Erste mal dass ich mit Zeigern hantieren muss
//Edit: Habe es soweit hinbekommen, dass ich keine Fehlermeldung bekomme.
Delphi-Quellcode:
procedure TMain.Timer1Timer(Sender: TObject);
var
i: ^Integer;
begin
if Tasten.Count > 0
then begin
i := Tasten.Pop;
case Ord(^i) of
70: Spieler[0].dreheLinks; // [F] - LINKS
74: Spieler[0].dreheRechts; // [J] - RECHTS
end;
end;
darstellen(Sender);
end;
allerdings scheint es so, als würde er nichts auf den Stack schieben (jedenfalls enthällt er im Debug mode keine Zeiger)