![]() |
Schulaufgabe Projekt 4 - Pong
Hallo liebe Leute, also ich benutze Turbo Delphi und muss Pong programmieren und stellte schnell fest, das ich schwierigkeiten bekomme ^^. Erste Frage: Wie kriege ich das hin, das etwas passiert wenn ich den Buchstaben "a" oder "s" drücke, habe den Befehl lange gesucht aber nicht gefunden...
Also es sieht genau so aus wie Pong und besteht aus 4 Panels als Rand, 2 Panels als spieler und einer Tshape als Ball, wie muss ich das programmieren, das der Ball bei den Panels "abprallt"? Ich denke an eine ständige Abfrage, bräuchte aber eure hilfe, ich danke schon mal im Vorraus für Antworten. mfg Dennis [edit=SirThornberry]Titel korrigiert. Nächstes mal bitte so viel Zeit nehmen diesen richtig zu schreiben. Außerdem Programmiersprache auf Delphi Win32 korrigiert - Mfg, SirThornberry[/edit] |
Re: Schulaufgabe Porjekt 4 - Pong
Womit willst du das realisieren?
An deine erste frage: evtl. über die unit keyboard und die funktion iskeypressed. Wenn du nicht wie in GLScene nen Cadencer verwendest, dann über einen Timer. (alle 100ms eine abfrage) Oops, sry hatte überlesen,dass du direkt panels verwendest. |
Re: Schulaufgabe Porjekt 4 - Pong
Delphi-Quellcode:
Und dann die Ereignisse onKeyPress oder onKeyDown und onKeyUp so
procedure TForm1.FormCreate(Sender: TObject);
begin keyPreview:=true; end; programmieren das sich etwas tut. Und du arbeitest mit .net? Grüße Klaus |
Re: Schulaufgabe Porjekt 4 - Pong
Hatte mich verklick ^^, ich werde das mal ausprobieren, bin noch ein kleiner anfänger *gg*, danke
|
Re: Schulaufgabe Porjekt 4 - Pong
mache ich das dann so? If (key = "a") Then? so habe ich das nämlich schon mal irgendwo gelesen, oder steht das auch inner borlandhilfe?
|
Re: Schulaufgabe Porjekt 4 - Pong
Also wenn du gar keine Ahnung hast, dann versuch doch bitte erst mal ein paar Tutorials von dsdt.info zu lesen und deine Fragen mittels der Forensuche selbst zu beantworten...
Eigentlich muss auch für jede Frage (sofern sie noch nicht vorhanden ist) ein neues Thema aufgemacht werden... Du fragst uns hier nämlich Grundfragen unter dem Thema Pong... Dazu gibts es schon massig Themen hier im Forum (da das oft als Einsteiger-Projekt gewählt wird)... Einfach mal auf den "Suchen"-Button klicken und "Pong" eingeben... Wegen Grundsätzlichen Aufbau von so einem Spiel: Man nehme einen Timer (eigentlich einen Multimedia-Timer... aber es reicht auch [erstmal] ein Standard-Timer), setze "doublebuffered:=true" (nicht im Ontimer... am besten im OnCreate), und fange im OnTimer Tastatur-Eingaben mit
Delphi-Quellcode:
Ich hoffe ich konnte erst mal einen kleinen Einblick verschaffen...
if getasynckeystate(vk_down)<>0 then VerrückeOderSo; //an der Stelle musst du mal nach "Virtual keys" suchen!!!
if getasynckeystate(Ord('A'))<>0 then VerrückeOderSo; |
Re: Schulaufgabe Porjekt 4 - Pong
Zitat:
Im onKeyPress ist key ein char -> if key = 'a' then .. Im OnKeyDown und OnKeyUp ist key ein word ->
Delphi-Quellcode:
Grüße
if (key = ord('A')) and not (shift = [ssShift]) then
.. Klaus [edit] mumpitz korrigiert [/edit] |
Re: Schulaufgabe Porjekt 4 - Pong
Hi,
ich bin gerade an einem ähnlichen Projekt und selber noch anfänger ich habe das Ballabprallproblem so Gelöst(geht eventuell auch einfacher): 1. Ich habe einen Timer erstellt mit Intervall 10millisec 2. Dann habe ich zwei integer Variablen für die Geschwindigkeit angelegt speedx und speedy damit kann man hinterher die Flugbahn des Balls beeinflussen, die Variablen habe ich am Anfang beide auf 5 gesetzt 3. Jetzt muss man das Abprallen an den Wänden hinbekommen z.b so: if ball.top > 768 then ballspeedy:=-ballspeedy; dadurch wird die Geschwindigkeit umgekehrt und der Ball springt ab, das gleiche kann man dann für Decke machen 4.Damit der Ball vom Schläger abprallt müssste das ganze übertragen auf dein Spiel etwa so aussehen: if 1000<ball.left then if ball.top>schläger.top then if ball.left+8<schläger.top +Schlägerhöhe then speedx:=-speedx; 5. Dann muss nur am Ende des Timers stehen das ball.left:=ball.left+speedx ist und ball.top:=ball.top+speedy; ich hoffe es hilft dir ein bisschen weiter Mfg Snake |
Re: Schulaufgabe Porjekt 4 - Pong
Delphi-Quellcode:
so hab ichs gemacht ... ist aber auch noch nicht so lange her bin auch anfänger hab ne weile gebraucht dafür ^^
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case key of // sind die tasten i und k bei mir 73 : begin if shape2.Top > 5 then shape2.Top := shape2.Top - 4; end; 75 : begin if shape2.Top + shape2.Height < button1.Top //als unteren rand gesetz den button; und die 5 oben als oberen then shape2.Top := shape2.Top + 4; // +4 = bewegung des panels end; Hier eine Liste der wichtigsten Tastencodes: 9 = TAB-Taste 13 = Eingabetaste (RETURN) 16 = Umschalt-Taste (Shift) 17 = STRG-Taste (CTRL) 18 = ALT-Taste 27 = Escape-TAste (ES) 32 = Leertaste 37 = Cursor links 38 = Cursor hoch 39 = Cursor rechts 40 = Cursor runter 48 (für die 0) bis 57 (für die 9) = Ziffern 65 (für das a) bis 90 (für das z) = Buchstabentasten Hinweis: für die Großbuchstaben müssen Sie die Buchstabentaste in Verbindung mit der Umschalttasten drücken |
Re: Schulaufgabe Porjekt 4 - Pong
@ Klaus:
Wenn man OnKeyDown/Press verwendet, dann tritt doch das Problem mit der Anschlagverzögerung auf, oder irre ich mich da??? Also: dass der erste Anschlag sofort umgesetzt wird, dann eine Pause (je nach Einstellung in Windoof) da ist, und danach die "restlichen" Anschläge kommen... So ungefähr (wäre es ein Diagramm, so wäre die Y-Achse eine Zeitleiste:
Code:
Deshalb finde ich es besser abzufragen, ob die Taste im Moment gedrückt ist (getasynckeystate)...
# # # # # # # #
@ Snake: Ja, so würde ich das auch alles machen... Außer: Ich habe manchmal bei meinem Pong das Problem feststellen müssen, dass der Ball beim Umlenken des Y-Werts am Rand fest hing. Das liegt daran, dass, wenn er zu schnell ist, das Umlenken unendliche Male ausgeführt wird... Deshalb habe ich das Umlenken für jede Seite extra vorgenommen:
Delphi-Quellcode:
YGeschw := Abs(YGeschw); //für oben
YGeschw := -Abs(YGeschw); //für unten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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-2025 by Thomas Breitkreuz