Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi 2d game:ping-pong (https://www.delphipraxis.net/43821-2d-game-ping-pong.html)

Nils_13 9. Apr 2005 13:20

Re: 2d game:ping-pong
 
Wieso, das Thema ist jetzt hoffentlich für immer beendet.

mangaka 9. Apr 2005 13:27

Re: 2d game:ping-pong
 
Ich versuche grad delphi von borland zu laden, mal sehn ob es klappt T_T

nachdem ich dann eure codes studiert habe kommen die nächsten fragen.


-ja ich mach neuen thread bei einer neune frage auf

Nils_13 9. Apr 2005 13:30

Re: 2d game:ping-pong
 
kriegst du nicht, Thema ist jetzt beendet sonst wird hier gleich geschlossen.

malo 9. Apr 2005 13:30

Re: 2d game:ping-pong
 
Zitat:

Zitat von mangaka
sagt mal delphi 2005pe kriegt man nicht von borland.com/.de oda?
nur d7

Wie bereits gesagt: neue Frage -> neuer Thread. Um deine Frage aber zu beantworten: nein.

Seniman 9. Apr 2005 15:03

Re: 2d game:ping-pong
 
Hallo Mangaka,

ich weiß nicht genau, wie weit du dich mit Delphi auskennst, aber was du auf jeden Fall können solltest, um ein Ping-Pong spiel zu programmieren ist: Deklarieren eigener Klassen und das Zeichnen von Objekten auf der Canvas.
Dann solltest du dir erstmal generelle Gedanken zur Struktur deines Programms machen. Folgendes solltest du dir überlegen: Was für Variablen/ Objekte brauche ich für das Spiel? Was soll dann damit passieren?
Zu der ersten Frage: Du brauch zwei Schläger, und einen Ball. Der Ball muss ausserdem noch Informationen darüber haben, in welche Richtung er sich bewegt (Bewegungsvektor) gegebenenfalls, wie groß er ist, welche Farbe und so weiter, der Phantasie sind keine Grenzen gesetzt, absolut notwenig sind nur die Koordinaten und der Bewegungsvektor. Die beiden Schläger brauchen eine Position (obere Kante) und die Breite (Abstand Oberkante/Unterkante).
Was soll mit den Objekten passieren? Zuersteinmal müssen sie sich bewegen. Der Ball bewegt sich entlang seines Bewegungsvektors und prallt gegebenenfalls ab. Die Schläger bewegen sich auf Tastendruck. Danach müssen die Objekte noch auf den Bildschirm gezeichnet werden. Da das ganze in Echtzeit ablaufen soll, müssen diese Aktionen alle in einen Timer.
Soweit.
Das sind ersteinmal die Überlegungen, die man sich immer vorher machen muss. Die haben zwar erstmal nichts mit der Programmiersprache zu tun, sind aber mindestens genausowichtig, wie das Coden selbst.
Falls dir die obigen Überlegungen nicht weiterhelfen, dann versuch deine Schwierigkeiten im Detail weiter zu klären.

Grüße
Seniman

sniper_w 9. Apr 2005 15:10

Re: 2d game:ping-pong
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Ball : TRect;
  BallSpeedX : integer = 5;
  BallSpeedY : integer = 5;
  dx : integer = 1;
  dy : integer = 1;
  BallHeight : integer = 30;
  BallWidth : integer = 30;

// offscreen, flickefrei
  Offscreen : TBitmap;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Caption := 'B_Ball';
 Width := 600;
 Height := 300;
 Ball := Rect(0,0,BallWidth,BallHeight);
 Timer1.Interval := 1;

 Offscreen := TBitmap.Create();
 with Offscreen do
 begin
  PixelFormat := pf32bit;
  Width := Screen.Width;
  Height := Screen.Height;
  Canvas.Brush.Color := clOlive;
  Canvas.Pen.Color := clBlack;
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
 var old : integer;
begin//
 FormPaint(Self);

 OffsetRect(Ball,dx * BallSpeedX,dy * BallSpeedY);

      // Korrektur bei Bandenkollision
      if (Ball.Left < 0) then // links
      begin
        dx := 1;
      end
      else if (Ball.Left + BallWidth > ClientRect.Right) then// rechts
      begin
        dx := -1;
      end;

      if (Ball.Top < 0) then         // oben
      begin
        dy := 1;
      end
      else if (Ball.Top + BallHeight > ClientRect.Bottom) then// unten
      begin
        dy := -1;
      end;

 FormPaint(Self);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin//
 with Offscreen do
 begin
  Canvas.Brush.Style := bsSolid;
  Canvas.Brush.Color := clOlive;
  Canvas.FillRect(ClientRect);
  Canvas.Brush.Style := bsClear;
  Canvas.Ellipse(Ball);
 end;
 BitBlt(Canvas.Handle,0,0,Width,Height,
        Offscreen.Canvas.Handle,0,0,SRCCOPY);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin//
 Offscreen.Free();
end;

end.
Und jetzt ist der Ball nicht mehr verzehrt.

Nils_13 9. Apr 2005 15:13

Re: 2d game:ping-pong
 
@mangaka: noch ein Beitrag außer Danke oder sowas und es zählt: ich hab früher auch Pong geproggt und hatte nur ein kleines Problem.

mangaka 9. Apr 2005 15:25

Re: 2d game:ping-pong
 
hmmm.. danke für eure hilfe und seniman danke für deine grundsätzlichen überlegungen!
kann ich dich in icq kontaktieren?
hier meine icqno.:
173976608

Ich frag nur weil ich glaube das Nild_13 irgendwas gegen mich hat Oo
Der geht mir irgendwie langsam auf die nerven...


btw.: habe jetzt delphi7


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr.
Seite 4 von 4   « Erste     234   

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