AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Spiel mit Tasten

Ein Thema von MadMax · begonnen am 5. Jun 2003 · letzter Beitrag vom 5. Jun 2003
Antwort Antwort
Seite 1 von 2  1 2      
MadMax

Registriert seit: 24. Mär 2003
46 Beiträge
 
#1

Spiel mit Tasten

  Alt 5. Jun 2003, 12:45
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.
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#2
  Alt 5. Jun 2003, 12:52
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
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
Benutzerbild von Darty
Darty

Registriert seit: 8. Jun 2002
Ort: Kronau
731 Beiträge
 
#3
  Alt 5. Jun 2003, 12:54
Dass müsste aber gehen ? Vielleicht ne Fehler in Code ? Oder was geht nicht ?
Matthias Knebel
Mfg M. Knebel [-Darty-]
- Gehörlose Delphianer gibt es selten -
www.team-knebel.de
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#4
  Alt 5. Jun 2003, 12:55
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.
  Mit Zitat antworten Zitat
MadMax

Registriert seit: 24. Mär 2003
46 Beiträge
 
#5
  Alt 5. Jun 2003, 13:12
So sieht das ganze aus.
Delphi-Quellcode:
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;
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#6
  Alt 5. Jun 2003, 13:16
Keywert ist von 1 bis 9 definiert, die Schleife durchläufst Du aber von 0 bis 9! keywert[0] existiert somit nicht.
  Mit Zitat antworten Zitat
mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#7
  Alt 5. Jun 2003, 13:19
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?
Matthias Jenke
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 5. Jun 2003, 13:27
Moin MadMax,

ausserdem solltest Du besser nicht so abfragen

if keywert[i] = false then sondern so

if not keywert[i] then
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MadMax

Registriert seit: 24. Mär 2003
46 Beiträge
 
#9
  Alt 5. Jun 2003, 13:29
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.
  Mit Zitat antworten Zitat
MadMax

Registriert seit: 24. Mär 2003
46 Beiträge
 
#10
  Alt 5. Jun 2003, 13:37
Zitat von mjenke:
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?
Wenn eine Taste in einem Spiel schon mal gedrückt wurde darf der Anweisungsblock mit dieser Taste nicht mehr ausgeführt werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz