Autor |
Beitrag |
DTK_FJM
Hält's aus hier
Beiträge: 4
|
Verfasst: Mo 08.09.08 10:48
Hallo Leute!
Da wir neu hier im Forum sind, stellen wir uns an dieser Stelle erst einmal vor:
"wir" sind 3 Leute aus dem 13er Info-Kurs eines Gymnasiums.
Nun, da laut Kurikulum Projektarbeit ansteht, und wir uns dazu entschieden haben ein Spiel zu programmieren, in dem 2 Schlangen gegeneinander antreten, die sich nach Möglichkeit nicht berühren dürfen (ähnlich dem Spiel "Achtung die Kurve"), stehen wir vor folgendem Problem: die Schlangen lassen sich partout nicht über die Tastatur und auch nicht über die Maus ansteuern. Beide reagieren in keinster Weise auf Eingaben jeglicher Art. Das Spielfeld ist die Form.
Da wir uns der Einfachheit halber dazu entschieden haben, die Schlangensteuerung über mSuM laufen zu lassen, lacht uns bitte nicht aus^^
Hier der Quellcode der Tastatursteuerung:
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:
| mT=Tastatur S1, S2= Schlangen mBr=Unit zur Positionsüberprüfung etc.
procedure TForm1.Timer1Timer(Sender: TObject); begin S1.move; S2.move;
if mT.wurdeGedrueckt then begin case mT.zeichen of 'a':S1.goLeft; 's':S1.goRight; Pfeillinks:S2.goLeft; Pfeilunten:S2.goRight; end; mT.weiter; end;
mBr.savePosition; mBr.crash; end; |
Für Hilfe wären wir euch sehr dankbar!
Grüße: Dennis, Thomas, Konstantin
Moderiert von Gausi: Delphi-Tags hinzugefügt
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mo 08.09.08 11:06
Die Tasten in einem Timer abzufangen, ist nicht die sinnvollste Lösung, zumal man beim Drücken dann exakt den Moment treffen müsste, in dem der Timer feuert.
Besser sind hierfür die Events ONKEYPRESS oder ONKEYDOWN.
_________________ Anonymes Eckenkind
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 08.09.08 12:04
Hi,
Hier handelt es sich mal wieder um mSuM-Geschädigte
Die Klasse Tastatur kapselt das OnKreyPress-Event und speichert die letzte gedrückte Taste in einem Buffer. Die Anweisung 'meineTastatur.Weiter löscht den Buffer; die Klasse ist so ausgelegt, dass sie sonst crasht(  ), mit der Fehlermeldung 'Schwerer Bedienungsfehler beim Umgang mit der Tastatur!'  .
Summa Summarum ein erfolgreicher Schritt in der Bewegung weg von ereignisorientierter Programmierung und hin zu pseudo-besserer, deutscher Benennung.
Gut, diese 'Pädagogen' haben ihr Fett weg, jetzt können wir
So spontan sehe ich da keinen Fehler; ich überlege gerade, ob es irgendwie möglich ist, mT so zu initialisieren, dass sie weder eine Fehlermeldung abwirft, noch das OnKeyress-Event der Form bekommt.
Am besten ist es wohl, ihr stellt mehr Quelltext hoch. Im Zweifelsfall den ganzen Projektordner ohne .Exe als .zip.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 08.09.08 15:27
Ich übersetzt mal deinen Code ins "Normaldelphi"...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| S1.move; S2.move;
if GetAsyncKeystate(Ord('a')) < 0 then S1.goLeft; if GetAsyncKeystate(Ord('s')) < 0 then S1.goRight; if GetAsyncKeystate(VK_LEFT) < 0 then S2.goLeft; if GetAsyncKeystate(VK_RIGHT) < 0 then S2.goRight;
mBr.savePosition; mBr.crash; |
Ist ein klein bisschen einfacher, oder? Und du brauchst nicht einmal irgendeine Unit oder ein Objekt oder...
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Mo 08.09.08 15:51
Ich würde das ganze einfach mal debuggen.
Liefert if mT.wurdeGedrueckt then überhaupt true?
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 08.09.08 16:39
Jop. Aber ehe wir jetzt die Benutzung des Debuggers durchgehen.. 
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Mo 08.09.08 17:12
Breakpoint mit F5 auf die Zeile, Programm starten, Taste drücken und warten bis der Timer zuschlägt. Dann einfach gucken ob das if überhaupt greift - fertig. 
|
|
DTK_FJM 
Hält's aus hier
Beiträge: 4
|
Verfasst: Do 11.09.08 12:53
Hey Leute, danke für die vielen Antworten! Der Tip von Yogu hat funktioniert!
Jetzt müssen wir uns ersteinmal darum kümmern, die Wegpunkte vernünftig speichern und abfragen zu können! Wir sprechen uns also garantiert noch einmal^^
Bis dann!
*closed*
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 11.09.08 14:05
Hi,
Yugos Vorschlag war nur zum Verständnis seitens mSuM-Fremder hier im Forum. Wenn ihr es so macht, wird das euer Lehrer glaub' ich nicht so sehr mögen
Wenn ich bedenke, dass ich für den Begriff 'Canvas' in einem Nebensatz 20 Minuten zur Schnecke gemacht wurde..
Postet mal mehr Quelltext, dann kann ich euch sicher sagen, was bei der Verwendung des Tastatur-Objektes schief geht.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 11.09.08 16:03
Hidden hat folgendes geschrieben: | Yugos Vorschlag war nur zum Verständnis seitens mSuM-Fremder hier im Forum. Wenn ihr es so macht, wird das euer Lehrer glaub' ich nicht so sehr mögen |
1. Ich heiße Yogu, und nicht Yugo. (Bist aber nicht der erste, der meinen Namen falsch schreibt...)
2. Als ich diesen Beitrag verfasste, wusste ich noch nichts von mSuM. Ich nahm also an, dass es sich dabei um irgendeine Komponente handelt, die so gut wie kein Mensch kennt und eigentlich sinnlos ist.
Meiner Meinung nach ist der Zugriff auf die Tastatur mit GetAsyncKeystate wunderbar einfach und benötigt keine weiteren Hilfsmittel. Wenn ihr aber mit mSuM arbeitet, ist euer Lehrer in diesem Punkt sicherlich anderer Meinung. 
|
|