![]() |
Spiel mit Tasten
Ich bin gerade dabei ein einfaches Spiel zu schreiben. Der Spieler spielt mit dem Nummernblock der Tastertour( die Tasten 1 bis 9). Ich hab das ganze über eine OnkeyDown Procedure aufgebaut. Mein Problem ist: Wenn eine Taste des Nummernblocks gedrückt wurde z.b die 1 dann darf dies Taste für das restliche Spiel nicht mehr benütz werden.
Wie könnte ich das am besten lösen. Hab schon versucht den rückgabewert von OnkeyDown(key) in ein Array zu speichern und dann per if schleife das ganze zu steuern aber funtzt leider nicht. |
hi,
am einfachsten ist es wenn du für jede taste eine variable vom typ boolean erstellst und diese nach dem ersten benutzen der taste auf true setzt, dann kannst du ganz einfach abfragen welche tasten schon benutzt wurden und welche nicht, bei jedem neuen spiel setzt du die vars dann wieder auf false |
Dass müsste aber gehen ? Vielleicht ne Fehler in Code ? Oder was geht nicht ?
|
Versuche es doch mal mit einem array von bool-Werten. Für jede Taste ein Element. Wenn Taste gedrückt von false auf true setzen und einen Tastendruck nur verarbeiten, wenn der zugehörige bool-Wert true ist.
|
So sieht das ganze aus.
Delphi-Quellcode:
Das Problem ist dies for schleife mit if Anweisung. Wenn als erste das z.B die 5 gedrückt wirt ist die array[1] logischweiße auf false also wird der Anweisungsblock ausgeführt. Irgendwie hab ich da einen Denk Fehler.
keywert: array[1..9] of boolean = (false,false,false,false,false,false,false,false,false);
procedure Tform1.keyw(key: word); begin case key of VK_NUMPAD1: Keywert[1] := True; VK_NUMPAD2: Keywert[2] := True; VK_NUMPAD3: Keywert[3] := True; VK_NUMPAD4: Keywert[4] := True; VK_NUMPAD5: Keywert[5] := True; VK_NUMPAD6: Keywert[6] := True; VK_NUMPAD7: Keywert[7] := True; VK_NUMPAD8: Keywert[8] := True; VK_NUMPAD9: Keywert[9] := True; end end;
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var i: integer; begin for i := 0 to 9 do if keywert[i] = false then begin form1.posi(Geo1,key); Geo1.kreis(form1.Canvas, Geo1.farbe); keyw(key); end |
Keywert ist von 1 bis 9 definiert, die Schleife durchläufst Du aber von 0 bis 9! keywert[0] existiert somit nicht.
|
Abgesehen davon wird der Anweisungsblock für jeden Tastenwert ausgeführt, der nicht auf false sitzt. Wo liegt das Problem? Oder willst Du den Anweisungsblock NUR für die gedrückte Taste ausführen?
|
Moin MadMax,
ausserdem solltest Du besser nicht so abfragen
Delphi-Quellcode:
sondern so
if keywert[i] = false then
Delphi-Quellcode:
if not keywert[i] then
|
Das ändert nichts daran das der erste wert des Array false ist und somit die Anweisung ausgeführt wird.
Ich meine es würde so gehen: Der Rückgabewert der Taste wird in einen Array eingelesen sobald sie gedrückt wir. Als erste Teste wird die 5 gedrückt jetzt den wert in einen Array eingelesen also sieht der Array dann etwa so aus array[0] = 5 dann würde das mit der for schleife funktionieren. Nur ich weiß nicht genau wie ich das umsetzen kann. |
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz