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 2 von 2     12   
mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#11
  Alt 5. Jun 2003, 13:43
Das ist schon klar. Problem ist folgendes. Wenn Du das zweite mal die 5 drückst, wird der Anweisungsblock aber immer noch 8 mal durchlaufen (1-4 und 6-9)...

Aber wenn Du die gedrückten Tasten in einem Array halten willst, kannst Du auch folgendermassen vorgehen:

Code:
procedure Tform1.keyw(key: word);
var
  counter: integer;
begin
  for counter := 1 to 9 do begin
    if Keypressed[counter] := 0 then begin
      Keypressed[counter] := Key;
      break;
    end;
  end;
end;
Du benötigst dann ein Array Keypressed, das ein array[1..9] of integer ist. Die einzelnen Felder werden mit 0 initialisiert. So kannst Du immer im ersten Feld, das eine Null beinhaltet, die aktuell gedrückte Taste speichern...

Und Deine Abfrage würden dann lauten:
Code:
for i := 1 to 9 do
    if Keypressed[i] = 0 then
    begin

Matthias
Matthias Jenke
  Mit Zitat antworten Zitat
MadMax

Registriert seit: 24. Mär 2003
46 Beiträge
 
#12
  Alt 5. Jun 2003, 14:02
Ok das ganze leuchtet mir ein. Die keyw Procedere ist jetzt genau so wie ich das gedacht habe. Nur es funktioniert nicht die Tasten können immer noch gedrückt werden. Ich schick mal die ganze Procedure mit. Die „voll“ Variablen sind dafür das abwechselnd gespielt werden muss(ich weiß ist nicht die beste Lösung aber auf die schnelle ist mir jetzt nicht eingefallen).
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var i: integer;
begin
  if (voll = 0) or (voll = 2) or (voll = 4) or (voll = 6) or (voll = 8) then
  begin
    for i := 1 to 9 do
    if Keypressed[i] = 0 then
    begin
      form1.posi(Geo1,key);
      Geo1.kreis(form1.Canvas, Geo1.farbe);
    end
     end else
        if (voll = 1) or (voll = 3) or (voll = 5) or (voll = 7) or (voll = 9) then
        begin
          for i := 0 to 9 do
          if Keypressed[i] = 0 then
            begin
              form1.posi(Geo2,key);
              Geo2.kreis(form1.Canvas, Geo2.farbe);
            end
          end;
    keyw(key);
    inc(voll);
end;
end.
  Mit Zitat antworten Zitat
mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#13
  Alt 5. Jun 2003, 14:12
Dann versuch doch mal folgendes:

Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var i: integer;
begin

  // Prüfen, ob die Taste schonmal gedrückt wurde
  for i := 1 to 9 do begin
    if Keypressed[i] = Key then exit;   // steigt aus, wenn die Taste schonmal gedrückt wurde...
  end;

  // Weiter im Text...
  if (voll = 0) or (voll = 2) or (voll = 4) or (voll = 6) or (voll = 8) then
  begin
    for i := 1 to 9 do
    if Keypressed[i] = 0 then
    begin
Hilft das weiter?


Matthias
Matthias Jenke
  Mit Zitat antworten Zitat
MadMax

Registriert seit: 24. Mär 2003
46 Beiträge
 
#14
  Alt 5. Jun 2003, 14:20
Vielen Dank es Geht.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#15
  Alt 5. Jun 2003, 14:58
Hai,

nur mal als Tip:

Anstelle deiner For do Schleife kannst Du auch einfach rechnen.

Einfach ein Array [0..9] Of Boolean und beim Start alles auf False setzen.

Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var i: integer;
begin
  if (Keypressed[ORD (key) - 48)]) then
   begin
    exit;   // steigt aus, wenn die
   end;
  Keypressed[ORD (key) - 48)] := True // als gedrückt kenzeichnen
 . . .
 . . . // Weiter im Code
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#16
  Alt 5. Jun 2003, 15:26
@Sharky

Man muss dabei nur bedenken, dass die 1 im Nummernblock nicht den Wert 49 besitzt, sondern 97. Also:
Keypressed[ORD (key) - 96)]
Matthias

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]
Matthias Jenke
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#17
  Alt 5. Jun 2003, 16:20
Zitat von mjenke:
@Sharky

Man muss dabei nur bedenken, dass die 1 im Nummernblock nicht den Wert 49 besitzt, sondern 97. Also:
Code:
Keypressed[ORD (key) - 96)]

Matthias
Ähmmm... ORD liefert mir doch den ASCII-Code. und da ist es egal woher das zeichen '1' kommt.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 14:49 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