Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schulaufgabe Projekt 4 - Pong (https://www.delphipraxis.net/90503-schulaufgabe-projekt-4-pong.html)

Brotsuppe 18. Apr 2007 16:18


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]

J.P. 18. Apr 2007 16:22

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.

Klaus01 18. Apr 2007 16:38

Re: Schulaufgabe Porjekt 4 - Pong
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  keyPreview:=true;
end;
Und dann die Ereignisse onKeyPress oder onKeyDown und onKeyUp so
programmieren das sich etwas tut.

Und du arbeitest mit .net?

Grüße
Klaus

Brotsuppe 18. Apr 2007 16:52

Re: Schulaufgabe Porjekt 4 - Pong
 
Hatte mich verklick ^^, ich werde das mal ausprobieren, bin noch ein kleiner anfänger *gg*, danke

Brotsuppe 18. Apr 2007 16:54

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?

TonyR 18. Apr 2007 17:08

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:
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;
Ich hoffe ich konnte erst mal einen kleinen Einblick verschaffen...

Klaus01 18. Apr 2007 17:42

Re: Schulaufgabe Porjekt 4 - Pong
 
Zitat:

Zitat von Brotsuppe
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?

Das hängt davon ab, welches Ereignis du benutzt.
Im onKeyPress ist key ein char -> if key = 'a' then ..
Im OnKeyDown und OnKeyUp ist key ein word ->
Delphi-Quellcode:
if (key = ord('A')) and not (shift = [ssShift]) then
  ..
Grüße
Klaus

[edit] mumpitz korrigiert [/edit]

snake41300 18. Apr 2007 18:11

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

PiQ 18. Apr 2007 18:24

Re: Schulaufgabe Porjekt 4 - Pong
 
Delphi-Quellcode:
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;
so hab ichs gemacht ... ist aber auch noch nicht so lange her bin auch anfänger hab ne weile gebraucht dafür ^^

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

TonyR 18. Apr 2007 18:27

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.
Seite 1 von 2  1 2      

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