AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pong Ball

Ein Thema von Chris92 .A · begonnen am 19. Mai 2010 · letzter Beitrag vom 19. Mai 2010
Antwort Antwort
Chris92 .A

Registriert seit: 19. Mai 2010
56 Beiträge
 
#1

Pong Ball

  Alt 19. Mai 2010, 17:22
Hallo,
Wir müssen für die Schule das Spiel Pong programmieren. Bis jetzt hab ich die Schläger Links und Rechts programmiert die ich mit Maus und Tastatur steuern kann. Mein Ball bewegt sich ebenfalls schon, doch nur von Rechts nach Links, er prallt ebenfalls schon von den Schlägern ab und wenn man den Ball nicht mit dem Schläger abfängt fliegt er aus dem Spielfeld und der Gegner bekommt ein Punkt.

So jetzt zu meine Frage:

Wie mach ich das, dass der Ball nicht nur Horizontal fliegt sondern wie in dem gewöhnlichem Pong Spiel wenn er den Schläger berührt, sich um z.b 30 Grad dreht und dann in diese Richtung weiter fliegt und dann z.b am Rand abprallt und sich dann wiederrum um z.b 5 Grad verändern.
Ich hoffe ihr wisst damit was ich meine da ich nicht genau weiß wie ich dies erklären soll. sorry.

Paar Daten zum meinem Programm:

Beide Schläger sind Paneln
Der Ball ist ebenfalls ein Panel.


Ich hoffe ihr könnt mir schon bald helfen.
Schonmal vielen Dank im voraus.


MFG Chris92 .A
  Mit Zitat antworten Zitat
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#2

Re: Pong Ball

  Alt 19. Mai 2010, 17:28
gib mal ein bisschen code
kann mir im moment nicht vorstellen wie du das gemacht hast...

lg fishly
never change a running system...
  Mit Zitat antworten Zitat
Chris92 .A

Registriert seit: 19. Mai 2010
56 Beiträge
 
#3

Re: Pong Ball

  Alt 19. Mai 2010, 17:51
Ok hier ist mein Code hoffe das Hilft weiter



unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;

type
TfrmPong = class(TForm)
tmBall: TTimer;
pnlLeft: TPanel;
pnlBall: TPanel;
pnlLine: TPanel;
lblLeftPoint: TLabel;
lblRightPoint: TLabel;
pnlRight: TPanel;
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormClick(Sender: TObject);
procedure tmBallTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmPong: TfrmPong;
var VERS_DROITE,UPPART,LOWPART:Boolean;

implementation

{$R *.DFM}

procedure TfrmPong.FormKeyPress(Sender: TObject; var Key: Char);
begin

if (Key = 'w') and (pnlLeft.Top-15 >= 0) then
pnlLeft.Top := pnlLeft.Top - 15;
if (Key = 's') and (pnlLeft.Top+15 <= 512 ) then
pnlLeft.Top := pnlLeft.Top + 15;

end;

procedure TfrmPong.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (pnlRight.Top >= 5) and (pnlRight.Top+190 <= frmPong.ClientHeight) then
pnlRight.Top:=Y-10;
end;

procedure TfrmPong.FormCreate(Sender: TObject);
begin
VERS_DROITE:=true;
pnlBall.left := 500;
pnlBall.Top := 349;
LOWPART := False;
UPPART := True;
frmPong.AutoSize := True;

end;

procedure TfrmPong.FormClick(Sender: TObject);
begin
tmBall.Enabled := True;
frmPong.ClientHeight := 650;
frmpong.ClientWidth := 1000;
pnlLine.Left := 500;
pnlLine.Height := 650;
pnlLeft.Left := 0;
pnlright.Left := 1000;
end;

procedure TfrmPong.tmBallTimer(Sender: TObject);
begin
if VERS_DROITE then
begin
if (pnlBall.Left+pnlBall.Width+5 < pnlRight.Left) then
pnlBall.left := pnlBall.left + 5
else
if (pnlBall.Top >= pnlRight.Top) and (pnlBall.Top <= pnlRight.Top+185) then
VERS_DROITE:=false
else
begin
pnlBall.left := 500;
pnlBall.Top := 349;
tmBall.Enabled := false;
lblLeftPoint.Caption := inttostr(strtoint(lblLeftPoint.Caption)+1);
end
else
if (pnlBall.Left-5 > pnlLeft.Left+25) then
pnlBall.Left:=pnlBall.Left-5
else
if (pnlBall.Top >= pnlLeft.Top) and (pnlBall.Top <= pnlLeft.Top+185) then
VERS_DROITE:=true
else
begin
pnlBall.Left := 500;
pnlBall.Top := 349;
tmBall.Enabled := False;
lblRightPoint.Caption := inttostr(strtoint(lblRightPoint.Caption)+1);
end;
end;


if lblLeftPoint.Caption = '10' then
begin
showmessage('Player 1 hat gewonnen');
lblLeftPoint.caption := '0';
end
else
if lblRightPoint.Caption = '10' then
begin
showmessage('Player 2 hat gewonnen');
lblLeftPoint.caption := '0';
end;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Pong Ball

  Alt 19. Mai 2010, 18:00
Nett wäre noch, wenn du den Code markierst und mit dem
Button "Delphi-Code" bemachst. Das macht das Ganze lesbarer.
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Chris92 .A

Registriert seit: 19. Mai 2010
56 Beiträge
 
#5

Re: Pong Ball

  Alt 19. Mai 2010, 18:02
Ok danke hab ich erledigt.

Delphi-Quellcode:
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;

type
TfrmPong = class(TForm)
tmBall: TTimer;
pnlLeft: TPanel;
pnlBall: TPanel;
pnlLine: TPanel;
lblLeftPoint: TLabel;
lblRightPoint: TLabel;
pnlRight: TPanel;
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormClick(Sender: TObject);
procedure tmBallTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmPong: TfrmPong;
var VERS_DROITE,UPPART,LOWPART:Boolean;

implementation

{$R *.DFM}

procedure TfrmPong.FormKeyPress(Sender: TObject; var Key: Char);
begin

if (Key = 'w') and (pnlLeft.Top-15 >= 0) then
pnlLeft.Top := pnlLeft.Top - 15;
if (Key = 's') and (pnlLeft.Top+15 <= 512 ) then
pnlLeft.Top := pnlLeft.Top + 15;

end;

procedure TfrmPong.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (pnlRight.Top >= 5) and (pnlRight.Top+190 <= frmPong.ClientHeight) then
pnlRight.Top:=Y-10;
end;

procedure TfrmPong.FormCreate(Sender: TObject);
begin
VERS_DROITE:=true;
pnlBall.left := 500;
pnlBall.Top := 349;
LOWPART := False;
UPPART := True;
frmPong.AutoSize := True;

end;

procedure TfrmPong.FormClick(Sender: TObject);
begin
tmBall.Enabled := True;
frmPong.ClientHeight := 650;
frmpong.ClientWidth := 1000;
pnlLine.Left := 500;
pnlLine.Height := 650;
pnlLeft.Left := 0;
pnlright.Left := 1000;
end;

procedure TfrmPong.tmBallTimer(Sender: TObject);
begin
if VERS_DROITE then
begin
if (pnlBall.Left+pnlBall.Width+5 < pnlRight.Left) then
pnlBall.left := pnlBall.left + 5
else
if (pnlBall.Top >= pnlRight.Top) and (pnlBall.Top <= pnlRight.Top+185) then
VERS_DROITE:=false
else
begin
pnlBall.left := 500;
pnlBall.Top := 349;
tmBall.Enabled := false;
lblLeftPoint.Caption := inttostr(strtoint(lblLeftPoint.Caption)+1);
end
else
if (pnlBall.Left-5 > pnlLeft.Left+25) then
pnlBall.Left:=pnlBall.Left-5
else
if (pnlBall.Top >= pnlLeft.Top) and (pnlBall.Top <= pnlLeft.Top+185) then
VERS_DROITE:=true
else
begin
pnlBall.Left := 500;
pnlBall.Top := 349;
tmBall.Enabled := False;
lblRightPoint.Caption := inttostr(strtoint(lblRightPoint.Caption)+1);
end;
end;


if lblLeftPoint.Caption = '10then
begin
showmessage('Player 1 hat gewonnen');
lblLeftPoint.caption := '0';
end
else
if lblRightPoint.Caption = '10then
begin
showmessage('Player 2 hat gewonnen');
lblLeftPoint.caption := '0';
end;
end;

end.
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Pong Ball

  Alt 19. Mai 2010, 18:58
Ich sage nur Einfallwinkel=Ausfallwinkel
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Chris92 .A

Registriert seit: 19. Mai 2010
56 Beiträge
 
#7

Re: Pong Ball

  Alt 19. Mai 2010, 18:59
Ok und wie berrechne ich den Einfallwinkel?
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Pong Ball

  Alt 19. Mai 2010, 19:03
Wie wärs, wenn du dich mal an den Object Pascal Style Guide halten würdest?
Dann könnten wir deinen Code auch schneller überblicken und könnten dir leichter helfen.

Edit: Link ergänzt.
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Pong Ball

  Alt 19. Mai 2010, 19:12
Den Style-Guide gibt es auch auf deutsch
hier
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 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