Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Brauche HILFE beim PingPong-Spiel!!!! (https://www.delphipraxis.net/60400-brauche-hilfe-beim-pingpong-spiel.html)

Laura100 6. Jan 2006 12:20


Brauche HILFE beim PingPong-Spiel!!!!
 
hallo Leute!!
ich hab informatik in der Schule und nun sollen wir ein eigenes PingPong-Spiel erstellen.
ich hab nur leider keine ahnung,wie ich das anstellen soll!!!!! :?
:bounce2: !!!!BITTE HELFT MIR!!!! :bounce2:
ich brauche einfach nur anhaltspunkte.wie bekomme ich zum Beispiel einen ball dort hinein?!?!
einen "Torwart" (button am oberen rand) hab ich schon,aber wie gehts weiter??
:bounce2: !!!!BITTE HELFT MIR!!!! :bounce2:
also,wenn ihr eine ahnung davon habt,dann schreibt mir bitte!und bitte schön ausführlich,falls ihr die zeit dazu habt!(davon hängt meine note ab!!)
also hoffe es meldet sich bald jemand!
DANKE schon mal im vorraus!
euer LAURIENCHEN

DP-Maintenance 6. Jan 2006 12:22

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Fragen / Anregungen zur DP" nach "Sonstige Fragen zu Delphi" verschoben.

tomsel 6. Jan 2006 12:33

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Darf ich kurz zusammenfassen:

- Du hast Informatik in der Schule
- keinen Bock darauf und 0 Ahnung
- nie aufgepasst und lieber über Kosmetik geratscht
- willst trotzdem eine gute Note

kommt das hin?

Aber jetzt mal im Ernst. Wenn du dir auf diesem Wege ausführliche Hilfe holen willst, wäre es das Beste, die ausfühliche Aufgabenstellung bekannt zu geben. Denn auch ein, oberflächlich betrachtet, einfach aussehendes Ping-Pong kann man mit unterschiedlichen Schwierigkeiten realisieren.

Vor kurzem gab es hier einen in der gleichen Situation, der hatte sich aber vorher schon weit mehr eigene Gedanken gemacht und hat die erwünschte Hilfe und seine gute Note dann wohl auch bekommen.

Mirilin 6. Jan 2006 12:33

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
:hi:

Ich hab mir mal zuerst die Freiheit genommen...

hallo Leute!!
ich hab informatik in der Schule und nun sollen wir ein eigenes PingPong-Spiel erstellen.
ich hab nur leider keine ahnung,wie ich das anstellen soll!
...
also,wenn ihr eine ahnung davon habt,dann schreibt mir bitte!und bitte schön ausführlich,falls ihr die zeit dazu habt!(davon hängt meine note ab!)
...



Ich nehm mal an, ihr seid nicht ganz unvorbereitet auf diese Aufgabe hingeleitet worden ^^, ihr habt doch sicher schon solche Sachen im Unterricht gemacht.
Was hast Du schon [steht ja teils da, aber damit kann ich zumindest nicht viel anfangen]... was hast Du selber für Ideen? Und wo kommst Du da nicht weiter?


Da es Deine Hausaufgaben sind, muss die Arbeit von Dir geleistet werden :) ...
Wenn Du genauere Angaben machst, was Du schon hast, und wo es dann genau fehlt, dann wird sich bestimmt einer finden, der Dir die Richtung weist :)

mfg Tobias

Hador 6. Jan 2006 12:34

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Also wir haben das ganze damals mit 3 Panels (2x Schläger, 1x Eckiger Ball ^^) und einem Timer (Ball+Schläger bewegen) gemacht.

Zum Abfragen der Tasten nimm dann einfach das OnKeyDown bzw OnKeyUp Ereignis des Formulars.

EDIT:

Ich hoffe das hilft dir als Ansatz.

Fang am besten erst mal an den Ball per Timer zu bewegen und vom Rand abprallen zu lassen.

konda 6. Jan 2006 16:04

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
ich würde statt nem eckigen ball einfach nen shape nemen.
Delphi-Quellcode:
//Bestimmung der x- und yposition
     xpos:= xpos+xspeed*vx;
     ypos:= ypos+yspeed*vy;
     //Beim Rand Anstoß
     if (xpos<0) then begin
       xspeed:= 1;
       xpos:= 0;
       punkte2:= punkte2+1;
     end;
     if (xpos+ball.width>=form1.ClientWidth) then begin
       xspeed:= -1;
       xpos:= form1.clientwidth-ball.width;
       punkte1:= punkte1+1;
     end;

     if (ypos<0) then begin
       yspeed:= 1;
       ypos:= 0;
     end;
     if (ypos+ball.height>=form1.Clientheight) then begin
       yspeed:= -1;
       ypos:= form1.clientheight-ball.height;
     end;
     //Bestimmung der Ballposition
     ball.top:= ypos;
     ball.left:= xpos;
das ist noch der code für die ballbewegung ohne schläger abrall. :mrgreen:

Laura100 8. Jan 2006 14:20

Brauche HILFE beim PingPong-Spiel!!!!
 
Also...wir haben in der schule schon mit delphi gearbeitet und ich bin auch ganz gut damit zurecht gekommen.bin also nicht ahnungslos und faul! :zwinker:

ich bin jetzt schon soweit,dass ich ein kleines eckiges edit fenster habe,dass auch an allen ecken abprallt und ich habe einen button,den ich mit der maus am oberen rand bewegen kann.

-frage zum ball: kann man den auch rund machen?

-frage zum button: wie schaffe ich es,dass das edit feld am button abprallt,wie am rand?

-dann sollen wir noch erreichen,dass die tore gezählt werden...

falls ihr mir diese fragen beantworten könnt,wäre das echt klasse!! :zwinker:

Euer LAURIENCHEN

Nils_13 8. Jan 2006 14:28

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Du bist gut damit zurrecht gekommen ... testen wir das mal:
Du nimmst zum Zählen der Tore eine integer-Variable und erhöhst diese immer im passenden Augenblick um 1. Und nehme am besten nicht mit i := i + 1.

Die Muhkuh 8. Jan 2006 14:29

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Zitat:

Zitat von Nils_13
Du bist gut damit zurrecht gekommen ... testen wir das mal:
Du nimmst zum Zählen der Tore eine integer-Variable und erhöhst diese immer im passenden Augenblick um 1. Und komm mir nicht mit i := i + 1 !

:gruebel: Gehts noch? Warum nicht i := i + 1? Soll sie lieber Inc verwenden? Kommt doch aufs gleiche raus.

[edit]
Das eigentliche hab ich glatt vergessen :mrgreen:

Zitat:

-frage zum ball: kann man den auch rund machen?
Klar, such mal nach der Komponente TShape :)

Zitat:

-frage zum button: wie schaffe ich es,dass das edit feld am button abprallt,wie am rand?
Anstatt die DAten von der Form zu nehmen, die von dem Edit-Feld nehmen ;)

Nils_13 8. Jan 2006 14:30

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
inc ist aber besser und übersichtlicher.

sakura 8. Jan 2006 14:32

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Zitat:

Zitat von Nils_13
inc ist aber besser und übersichtlicher.

Ersteres stimmt seit Delphi 6 nicht mehr, beide nehmen sich nichts. Letzters gilt gerade für Anfänger nicht.

...:cat:...

P.S.: Überdenke bitte Deinen Ton (vorletzter Deiner Beiträge in diesem Thread!)

Nils_13 8. Jan 2006 14:39

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
inc(i); dec(i);

hält den Code aber kleiner. Und außerdem ist inc oder dec doch ein einfacher Befehl. Wenn man es schafft viele andere zu lernen, ist das meiner Meinung kein großes Problem.

flomei 8. Jan 2006 14:40

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Wird, wie von sakura schon gesagt, wohl durch Compiler Magic und ähnliches aufs absolut Gleiche rauskommen im Kompilat (?)...

MfG Florian :hi:

arbu man 8. Jan 2006 14:59

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Zitat:

frage zum ball: kann man den auch rund machen?
TShape als Ball nehmen und Style auf stCircle setzen.

Nils_13 8. Jan 2006 15:01

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Ja das ist schon klar, aber es ist gut für lange Codes, sonst verliert man ja noch mehr die Übersicht.

Nun zum Thema:
Was hast du jetzt schon alles ?

- Einen Schläger
- Ein Spielfeld
- Eine Kollisionserkennung (Hast du da schon eine Tolleranz eingebaut ?)

Dir fehlt:
- Ein Ball

Ich hoffe ich habe alles zusammen.

Hier der Ball:
- Setze ein Shape auf die Form
- Gehe in den Objektsinspector und stelle dort unter Shape stCircle ein
- Die Farben die du brauchst kannst du dir dann unter Pen (Rahmen) und Brush (Füllung) jeweils bei Color einstellen.
- Vielleicht noch die größe anpassen und fertig.

Hast du bei der Kollisionserkennung schon eine Tolleranz (Tolleranz = Je nachdem wie der Ball aufschlägt prallt er auch wieder ab) ?

So nun stellst du bei der Form noch KeyPreview auf True und setzt im OnKeyDown-Ereigniss (auch unter Form zu finden) folgenden Code ein, um abzufragen, ob eine Taste gedrückt wurde:
Delphi-Quellcode:
  if Key = VK_UP then // Pfeiltaste hoch
  begin

  end;
  if Key = VK_DOWN then // Pfeiltaste unten bzw. runter
  begin

  end;
Bei up fügst du dann noch die Panel Bewegeung des Spielers ein, in etwa so (ungetestet):
Delphi-Quellcode:
if Key = VK_UP then // Pfeiltaste hoch
begin

  if Panel1.Top <= 0 then // Überprüfen, ob der Panel am oberen Fensterrand angekommen ist
  begin
    Panel1.Top := Panel1.Top + 2;
  end;
end;

if Key = VK_DOWN then // Pfeiltaste unten bzw. runter
begin
  if Panel1.Top >= 100 then // Überprüfen, ob der Panel am unteren Fensterrand angekommen ist
  begin
    Panel1.Top := Panel1.Top - 2;
  end;
end;
Ich würde den Gegner so programmieren:
- Ballhöhe in einer Variable speichern
- in einem Timer sagen, dass der Gegner-Schläger sich in Richtung der Ballhöhe bewegen soll, ich würde nicht gerade ein niedriges Timer-Interval nehmen.

thkerkmann 8. Jan 2006 15:43

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Zitat:

Zitat von Nils_13

Bei up fügst du dann noch die Panel Bewegeung des Spielers ein, in etwa so (ungetestet):
Delphi-Quellcode:
if Key = VK_UP then // Pfeiltaste hoch
begin
  if Panel1.Top = 100 then // Überprüfen, ob der Panel am oberen Fensterrand angekommen ist
  begin
    Panel1.Top := Panel1.Top + 2 // Hier nehme ich nicht inc, da es ja um zwei erhöht werden soll.
  end;
end;

if Key = VK_DOWN then // Pfeiltaste unten bzw. runter
begin
  if Panel1.Top = 0 then // Überprüfen, ob der Panel am unteren Fensterrand angekommen ist
  begin
    Panel1.Top := Panel1.Top - 2 // Hier nehme ich nicht dec, da es ja um zwei ernidriegt
                                 // werden soll.
  end;
end;

Nur mal so...
Eine property (wie z.B. Panel1.Top) kann man eh nicht mit inc bzw. dec bearbeiten.
und...
der obere Fensterrand ist doch wohl eher bei 0 als bei 100.

Aber es wird schon.... ;-)

MasterDG 8. Jan 2006 16:52

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Hallo

Also ich würde zum testen ob das Panel am oberen Rand ist das machen:
Delphi-Quellcode:
if Panel.Top <= 10 then ... // Setz anstatt 10 den Wert ein wo bei dir die obere Grenze sein soll
und für den unteren Rand
Delphi-Quellcode:
if Panel.Top + Panel.Height >= 100 then ... // Setz anstatt 100 den Wert ein wo bei dir die untere Grenze sein soll
Gruß
MasterDG

Nils_13 8. Jan 2006 17:30

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Danke, ich änder das dann noch ab. Jetzt hab ich tatsächlich oben mit unten vertauscht :oops:

ghostdawg 8. Jan 2006 19:05

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Editfenster als Schläger und Panels und Buttons als Bälle? Dürft ihr kein Canvas oder DirectX benutzen?

malo 8. Jan 2006 20:13

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Zitat:

Zitat von ghostdawg
Editfenster als Schläger und Panels und Buttons als Bälle? Dürft ihr kein Canvas oder DirectX benutzen?

Dürfen sicherlich schon. Aber wer will einem Anfänger schon DirectX zumuten?

Es ist IMHO schon in Ordnung, Delphi-Komponenten für solche Zwecke zu "missbrauchen". Nur sollte man da versuchen, auf die richtigen zu verwenden :zwinker:

ste_ett 8. Jan 2006 21:01

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Zitat:

Code:
Panel1.Top := Panel1.Top - 2 // Hier nehme ich nicht dec, da es ja um zwei ernidriegt
                             // werden soll.

Properties kann man, wie oben schon gesagt nicht per "Dec()" ändern, aber das mit der Verringerung um mehr als 1 ist kein Problem. :)

Code:
var
  a: Integer;
begin
  Dec(a, 2);
end;

faux 8. Jan 2006 21:10

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Zitat:

Zitat von ste_ett
Properties kann man, wie oben schon gesagt nicht per "Dec()" ändern

Das liegt daran, dass eine Property den Rückgabewert einer Funktion zurück gibt. ;)

Laura100 9. Jan 2006 14:45

Brauche HILFE beim PingPong-Spiel!!!!
 
WOW!!!ihr seit echt hilfsbereit! :thumb:
ich komme echt gut voran!!DANKE,DANKE,DANKE!!!! :hello:
nur ein problem hab ich jetzt noch.

ich muss es irgendwie schaffen,dass der ball vom button (torwart) abprallt . ???
und das mit dem punkte zählen war noch nicht ausführlich genug erklärt... :oops: :oops: :oops:

Freu mich auf rückmeldungen!

euer LAURIENCHEN

MasterDG 9. Jan 2006 16:44

Re: Brauche HILFE beim PingPong-Spiel!!!!
 
Hallo

Also erst mal zum Punkte zählen. Du kannst ja abfragen ob der Ball auf der linken oder rechten Seite einen bestimmten Wert über- bzw unterschritten hat. Als Werte sollte man natürlich die Kanten der Schläger benutzen.

Also in etwa so:

Delphi-Quellcode:
//linker Schläger
if Ball.Left <= 34 then
begin
inc(torespieler1);
reset;//Hier musste halt alles wieder zurücksetzen
end;
Für den rechten Schläger musste des halt selber machen.


Also ich würde das mit dem Abprallen des Schlägers so machen(evt. hat ja jemand ne bessere Möglichkeit)

Delphi-Quellcode:
//linker Schläger
if (Ball.Left = 35) and (Ball.Top > Schläger.Top) and (Ball.Top < Schläger.Top + Schläger.Height) then
begin
//hier halt den Code zum abprallen an einer Kante
end;
Hoffe das hilft dir weiter. :-D

Gruß
MasterDG


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:50 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