Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Pong-Klon (https://www.delphipraxis.net/34119-pong-klon.html)

Nils_13 17. Nov 2004 18:31


Pong-Klon
 
Hi,

ich hab Pong programmiert.

Irgendwie prallt der Ball am Balken vom Spieler1 nicht ab, sondern der Computergegner gewinnt

Danke im vorraus

Delphi-Quellcode:
unit b;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, LMDCustomControl, LMDCustomPanel,
  LMDCustomBevelPanel, LMDBaseEdit, LMDCustomEdit, LMDEdit,
  LMDCustomComponent, lmdcont, LMDCustomMemo, LMDMemo, MPlayer;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    t: TTimer;
    enemy: TPanel;
    gol: TLabel;
    start: TImage;
    startl: TLabel;
    ball: TShape;
    credits: TImage;
    Label1: TLabel;
    Image1: TImage;
    ende: TLabel;
    Label2: TLabel;
    p1: TLMDMemo;
    Label3: TLabel;
    p2: TLMDMemo;
    mp: TMediaPlayer;
    player1: TPanel;
    procedure ki;
    procedure Visible_false;
    procedure go_p1;
    procedure go_p2;
    procedure mp1;
    procedure tTimer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure startClick(Sender: TObject);
    procedure startlClick(Sender: TObject);
    procedure Label1Click(Sender: TObject);
    procedure creditsClick(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure endeClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  xspeed: Integer=2;
  yspeed: Integer=2;
  bdirection: byte;

implementation

uses c;

{$R *.DFM}

procedure TForm1.ki;
var schritt: integer;
begin
schritt := 2;
  if ball.Top > enemy.Top then enemy.Top := enemy.Top+schritt;
  if ball.Top < enemy.Top then enemy.Top := enemy.Top-schritt;
end;

procedure TForm1.Visible_false;
begin
t.Enabled:= true;
p1.Visible:= false;
p2.Visible:= false;
Label3.Visible:= false;
start.Visible:= false;
startl.Visible:= false;
ball.Visible:= true;
player1.visible:= true;
enemy.Visible:= true;
label1.Visible:= false;
credits.Visible:= false;
ende.Visible:= false;
Image1.Visible:= false;
Label2.Visible:= false;
end;

procedure TForm1.go_p1;
begin
showmessage(p1.text+' '+'gewinnt');
end;

procedure TForm1.go_p2;
begin
showmessage(p2.text+' '+'gewinnt');
end;

procedure TForm1.mp1;
begin
mp.play;
end;

procedure TForm1.tTimer(Sender: TObject);
var toleranz : integer; // umgebung um den balken herum in pixeln
begin
toleranz := ball.Width div 2;
//KI-Aktivierung
ki;

//Vereinbarungen
ball.left := ball.Left + xspeed;
ball.Top := ball.Top + yspeed;

//Ballkollision
if (Abs(ball.Left - enemy.left) <= 5) and (Abs(ball.Top - enemy.Top) <= 5) then xspeed:= -xspeed;
if (ball.top > player1.top -1-toleranz) and (ball.top < player1.top + player1.height +1+toleranz) and (ball.left = player1.left+player1.width) then xspeed := -xspeed;

//Ballkollisions Ton
if (Abs(ball.Left - enemy.left) <= 5) and (Abs(ball.Top - enemy.Top) <= 5) then mp1;
if (ball.top > player1.top -1-toleranz) and (ball.top < player1.top + player1.height +1+toleranz) and (ball.left = player1.left+player1.width) then mp1;

//Kollisionserkennung
if ball.Left<0 then
begin
  t.Enabled:= false;
  ball.Visible:= false;
  go_p2;
end;

if ball.Left>445 then
begin
t.Enabled:= false;
ball.Visible:= false;
go_p1;
end;

if ball.Left<0 then xspeed := -xspeed;

if ball.Top<0 then yspeed := -yspeed;
if ball.Left>445 then xspeed := -xspeed;
if ball.Top>445 then yspeed := -yspeed;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var s: integer;
begin
s := 3;
if key=VK_UP then Player1.top:=player1.top-s;
if key=VK_DOWN then Player1.top:=player1.top+s;
if key=ord('S') then enemy.top:=enemy.top+s;
if key=ord('W') then enemy.top:=enemy.top-s;
end;

procedure TForm1.startClick(Sender: TObject);
begin
Visible_false;
end;

procedure TForm1.startlClick(Sender: TObject);
begin
Visible_false;
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
form1.hide;
form2.show;
form2.c.scroll:= true;
form2.ef.Enabled:= true;
end;

procedure TForm1.creditsClick(Sender: TObject);
begin
form1.hide;
form2.show;
form2.c.scroll:= true;
form2.ef.Enabled:= true;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
form1.close;
end;

procedure TForm1.endeClick(Sender: TObject);
begin
form1.close;
end;

end.

Die Muhkuh 17. Nov 2004 18:33

Re: Pong-Klon
 
Hi,


erstmal, wo ist das Problem?

Zweitens, du brauchst deinen Thread nicht nochmal erstellen. Die Mods können den alten verschieben

Drittens @Mods: Bitte closen und den anderen verschieben.

Nils_13 17. Nov 2004 18:35

Re: Pong-Klon
 
Hi Spider!

Ich hol mir grade ICQ...
[edit=Christian Seehase]Beiträge zusammengefasst. Mfg, Christian Seehase[/edit]

nailor 17. Nov 2004 18:37

Re: Pong-Klon
 
Lieber Nils!

Probier doch mal, alles wichtige sofort hinzuschreiben und nicht alle paar Minuten einen weitern Satz hinzuzufügen. Dann schilder noch genau dein Problem sowie deine bisherigen Untersuchungsergebnisse und dir wird sicherlich umgehend geholfen.

Michael

Nils_13 17. Nov 2004 18:44

Re: Pong-Klon
 
Könnt ihr mir helfen, dass der Ball auch beim Spieler1 abprallt, das ist alles :wink:

Nächstes mal mach ich's besser :-D

[edit=Christian Seehase]Beiträge zusammengefasst. Mfg, Christian Seehase[/edit]

jim_raynor 17. Nov 2004 18:54

Re: Pong-Klon
 
Es gibt auch ne Editier-Funktion in diesem Forum.

Nils_13 17. Nov 2004 19:08

Re: Pong-Klon
 
ich weiß

Matze 17. Nov 2004 19:10

Re: Pong-Klon
 
Zitat:

Zitat von Nils_13
ich weiß

Dann benutze die auch und poste bitte nicht dauernd deine unwichtigen Bemerkungen, sprich, jetzt nicht auf meinen Beitrag antworten "ok", sondern einfach vielleicht etwas mehr zurückhalten.

Durch deine Posts werden die Topics sehr unleserlich, danke.

Die Muhkuh 17. Nov 2004 19:11

Re: Pong-Klon
 
Hi,

ich will dir jetzt nicht zunahe tretten, aber dieses Forum ist kein Chat. Dafür hat das Forum einen Chat.
Bitte editiere deine Beiträge und überlege bevor du postet.

Ein Post mit "Hi Spider" und der nächste "Ich hol mir grad ICQ" gehören entweder in einen Post, aber eigentlich gar nicht ins Forum und wenn dann schreib ins kleiner Schrift.


So und nun Back to Topic


*MFG*

Manu :hi:


[edit] An dieser Stelle möchte ich noch an den Kodex bzw. ans FAQ hinweißen. Solltest du dir mal durchlesen. [/edit]

Darty 19. Nov 2004 16:01

Re: Pong-Klon
 
Könntest Du mal das Projekt zippen und hier anhängen vielleicht workle ich naher an dem rum ...

Nils_13 19. Nov 2004 16:10

Re: Pong-Klon
 
:-D

Hier war mal ein download kommt wieder wenn's ferrtig ist.

Darty 19. Nov 2004 16:41

Re: Pong-Klon
 
Zitat:

Zitat von Nils_13
:-D

Hier war mal ein download kommt wieder wenn's ferrtig ist.

:roll: Also braucsht keine Hilfe mehr ? ok lassen wir es ... :wall:

Nils_13 19. Nov 2004 16:43

Re: Pong-Klon
 
Ich brauche noch Hilfe:
Ich hab dir ne pn geschickt, wo alles drin ist!

Soll ich ihn noch mal zurrechtstellen?

Darty 19. Nov 2004 16:45

Re: Pong-Klon
 
ne habs geradew gesehen .... bei mir kam kein Popup darum nicht bemerkt ...
Ich gucks mal an was überhaupt drin ist ...

Nils_13 19. Nov 2004 16:46

Re: Pong-Klon
 
alles Quellcode+res dateien+exe!

Bei mir kommt meistens auch kein Popup, unter Menüleiste steht in rot z.B. 2 Nachrichten.
Auf Popups würde ich mich nie verlassen.

:hi:
[edit=Christian Seehase]Beiträge zusammengefasst. Bitte die Edit Funktion benutzen Mfg, Christian Seehase[/edit]

Darty 19. Nov 2004 16:52

Re: Pong-Klon
 
Zitat:

Zitat von Nils_13
Bei mir kommt meistens auch kein Popup, unter Menüleiste steht in rot z.B. 2 Nachrichten.
Auf Popups würde ich mich nie verlassen.

:hi:

Na also kein LMD Kompo ... muss erst mal gucken ...

UND !!! TUE MIR DEN GEFALLEN UND VERWENDE DEN EDIT FUNKTION !!! DU POSTEST WIRKLICH ZU VIELE BEITRÄGE HINTEREINANDER INNERHALB WENIGE MINUTEN IN EINEN THREAD


EDIT: Sorry ich müsste erst mal die LMD Kompo saugen, aber ich darf sowas nicht in der Firma machen.

Darty 19. Nov 2004 17:25

Re: Pong-Klon
 
Zitat:

Zitat von Nils_13
ich hab Pong programmiert.

Irgendwie prallt der Ball am Balken vom Spieler1 nicht ab, sondern der Computergegner gewinnt

Soch da Du das Pong selber programmiert hast. :thumb:

Jetzt meine Fragen die Du hoffentlich auch beantworten kannst bzw solltest. :roll:

1. Prallt der Ball beim Computergegner ab ?

2. In welche Zeilen steht die Erkennung von Ball mit Spieler1-Schläger Kollision ?

3. In welcher Zeilen steht die Erkennung von Ball mit Gegner-Schläger Kollision ?

4. Versuche die Frage 2 und 3 etwas näher zu erklären was da passiert.

5. Wenn Frage 1 - 4 beantwortet werden kann, dann könnte eventuell die Antwort von alleine da stehen :)

Nils_13 19. Nov 2004 17:35

Re: Pong-Klon
 
Wie findet man in Delphi die Zeilen Zahl raus? Soll ich sie zählen :mrgreen: ?

Darty 19. Nov 2004 17:37

Re: Pong-Klon
 
Zitat:

Zitat von Nils_13
Wie findet man in Delphi die Zeilen Zahl raus? Soll ich sie zählen :mrgreen: ?

Die betreffende Zeilen einfach hier als Code einfügen :roll:

Daniel 19. Nov 2004 17:37

Re: Pong-Klon
 
:shock:

Ja, zähle sie bitte.
.
.
.
Oder sehe in der Statusleiste Deines Editor-Fensters nach.


Nils - diese Frage kann unmöglich ernst gemeint gewesen sein.

Darty 19. Nov 2004 17:40

Re: Pong-Klon
 
Zitat:

Zitat von Daniel
Nils - diese Frage kann unmöglich ernst gemeint gewesen sein.

:mrgreen: Haben wir ein neues Beruf gefunden :twisted:

Nils_13 19. Nov 2004 17:41

Re: Pong-Klon
 
War sie auch nicht :mrgreen:

@darty
1. Ja

2. 123-128

3. 130-135

4. Bei dem Gegner prallt der Ball einfach ab (mit Physik) und beim Spieler1 prallt er komischer Weise nicht ab.

Delphi-Quellcode:
//Kollisionserkennung
if ball.Left<0 then
begin
  t.Enabled:= false;
  ball.Visible:= false;
  go_p2;
end;
Delphi-Quellcode:
if ball.Left>445 then
begin
t.Enabled:= false;
ball.Visible:= false;
go_p1;
end;

Darty 19. Nov 2004 18:16

Re: Pong-Klon
 
Zitat:

Zitat von Nils_13
1. Ja

Schön
Zitat:

Zitat von Nils_13
2. 123-128
3. 130-135

Die Zeilen sind identisch mit den in Deiner Antwort 4 gepostete Codes.
Zitat:

Zitat von Nils_13
4. Bei dem Gegner prallt der Ball einfach ab (mit Physik) und beim Spieler1 prallt er komischer Weise nicht ab.

Delphi-Quellcode:
//Kollisionserkennung
if ball.Left<0 then // Wenn Linke Seite von Ball kleiner als 0 ist dann ...
begin // beginne
  t.Enabled:= false; // Timer ausschalten
  ball.Visible:= false; // Ball Ausblenden
  go_p2; // Gibt nur nen Text aus
end;
Delphi-Quellcode:
if ball.Left>445 then // Wenn Linke Seite vom Ball grösser als 445 ist dann ...
begin // beginne
t.Enabled:= false; // Timer ausschalten
ball.Visible:= false; // Ball Ausblenden
go_p1; // Gibt nur nen Text aus
end;

Kannst Du an den Kommentare die ich eingefügt habe erkennen das die Stelle die Du mir gezeigt hast doch keine Kollision Kontrolle ist. Sondern einfach nur das passieren soll wenn der Ball entweder bei 0 oder bei 445 ist.

Mal ehrlich Du hast doch den Code selber geschrieben oder ? Dann erklär es mir doch weil ich das nicht verstehe wo da die Kollisionfragen sein soll in den Zeilen ??

Zitat:

Bei dem Gegner prallt der Ball einfach ab (mit Physik) und beim Spieler1 prallt er komischer Weise nicht ab
Also wo ist die "Physik" in deinem Code ?

Pr0g 19. Nov 2004 18:44

Re: Pong-Klon
 
Zitat:

Zitat von Darty
Also wo ist die "Physik" in deinem Code ?

Siehst du sie etwas nicht :lol:


Ich denke mal das sind die Zeilen der Kollisionsabfrage:

Delphi-Quellcode:
if (Abs(ball.Left - enemy.left) <= 5) and (Abs(ball.Top - enemy.Top) <= 5) then xspeed:= -xspeed;
if (ball.top > player1.top -1-toleranz) and (ball.top < player1.top + player1.height +1+toleranz) and (ball.left = player1.left+player1.width) then xspeed := -xspeed;
und

Delphi-Quellcode:
if ball.Left<0 then xspeed := -xspeed;

if ball.Top<0 then yspeed := -yspeed;
if ball.Left>445 then xspeed := -xspeed;
if ball.Top>445 then yspeed := -yspeed;

Darty 19. Nov 2004 18:46

Re: Pong-Klon
 
Zitat:

Zitat von Pr0g
Zitat:

Zitat von Darty
Also wo ist die "Physik" in deinem Code ?

Siehst du sie etwas nicht :lol:

Doch sehe ich sie. Das Problem ist das jemand ein eigenes Programm schreibt und es selber nicht versteht. Das Kapier ich nicht :wall:

Nun hast Du es verraten aber er kommt jetzt auch nicht weiter :roll:

Nils_13 19. Nov 2004 18:48

Re: Pong-Klon
 
Physik ist vieleicht das Falsche Wort, ich meine die toleranz.

Darty 19. Nov 2004 18:51

Re: Pong-Klon
 
Was ist mit Toleranz ? erklär es doch mal näher ..

Nils_13 19. Nov 2004 18:53

Re: Pong-Klon
 
Ich hab doch im Quellcode, dass der Ball auch beim Spieler1 abprallen soll ... nur irgendwie funktioniert es nicht (wegen diesem Problem hab' ich das Thema aufgemacht) :gruebel:

Die Toleranz ist die Physik...
ok...

[edit=Christian Seehase]Beiträge zusammengefasst. Wäre schön, wenn Du die Edit Funktion auch mal benutzen würdest ;-). Danke. Mfg, Christian Seehase[/edit]

Pr0g 19. Nov 2004 18:59

Re: Pong-Klon
 
Wie war das noch mit der Edit Funktion :mrgreen:

Pr0g 19. Nov 2004 19:29

Re: Pong-Klon
 
Ich denke mal, dass das Problem folgendes ist: Du fragst bei der Kollisionskontrolle des Balls einen genauen Pixelwert der "Left"-Eigenschaft ab, welcher aber nie erreicht wird, da du den Ball immer um zwei Pixel bewegst. Ändere daher folgenden Code:
Delphi-Quellcode:
//Ballkollision
if (Abs(ball.Left - enemy.left) <= 5) and (Abs(ball.Top - enemy.Top) <= 5) then xspeed:= -xspeed;
if (ball.top > player1.top -1-toleranz) and (ball.top < player1.top + player1.height +1+toleranz) and (ball.left = player1.left+player1.width) then xspeed := -xspeed;
in diesem um:
Delphi-Quellcode:
//Ballkollision
if ((ball.Top > enemy.Top - 1 - toleranz) and (ball.Top < enemy.Top + enemy.Height + 1 + toleranz) and (ball.Left <= enemy.Left + enemy.width)) or
   ((ball.Top > player1.Top - 1 - toleranz) and (ball.Top < player1.Top + player1.Height + 1 + toleranz) and (ball.Left + ball.Width >= player1.Left)) then
  xspeed := -xspeed;
Die 1 in der Abfrage solltest du vielleicht noch bei Tollerarenz mit unterbringen.

Nicodius 19. Nov 2004 19:54

Re: Pong-Klon
 
[OT]so nen doppelposter hab ich noch nie gesehen(so bin nicht mal ich @stan @luckie @alleanderen ;) )
[/OT]

Die edit funktion - ein kleiner Überblick(l komtm das ja in das tut für die ganz langsamen ^^ )

-->

es gibt recht ober den von dir gestellten Post einen button "edit"

^^ das wars auc hschon der rest ist selbsterklärend würdest du mal draufklicken :zwinker:

Airblader 19. Nov 2004 20:42

Re: Pong-Klon
 
Zitat:

Zitat von Nils_13
Die Toleranz ist die Physik...
ok...

Sorry, aber bist du irgendiwe lernunfähig? :gruebel:

Du wurdest nun mind. 5x drauf hingewisen die Edit-FUnktion zu nutzen..

also TU ES AUCH

air

Nils_13 21. Nov 2004 12:18

Re: Pong-Klon
 
@Prog schick mir mal den veränderten Code plz

:hi:

Oder wollt ihr das ich für diese Fälle die Edit-funktion verwende :freak:

@all danke es läuft endlich!!!

:hi:


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