unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DXSounds, DXDraws, DXClass, DXSprite, DXInput,Math;
type
TForm1 =
class(TForm)
DXDraw1: TDXDraw;
DXInput1: TDXInput;
DXSpriteEngine1: TDXSpriteEngine;
DXTimer1: TDXTimer;
DXImageList1: TDXImageList;
DXSound1: TDXSound;
procedure FormCreate(Sender: TObject);
procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
TBall =
Class(TImagesprite)
public
procedure DoMove(Movecount: Integer);
override;
//Bewegung des Balles
procedure DoCollision(Sprite: Tsprite;
var Done: Boolean);
override;
//Hat der Schlaeger getroffen?
end;
TSchlaeger =
Class(TImagesprite)
public
procedure DoMove(Movecount: Integer);
override;
//Gewegung des Schlaegers
end;
var
Form1 : TForm1;
Schlaeger1 : TSchlaeger;
//Schlaeger des 1. Spielers
Schlaeger2 : TSchlaeger;
//Schlaeger des 2. Spielers
Ball : TBall;
//Der Ball ;-)
mx,my,sy : real;
//mx und my sind die Bewegung des Balles & Richtung! Sy die des Schlaegers
coll : boolean;
//Ist der Ball im aus?
c : integer = 0;
//Wie oft wurde der Ball schon getroffen? Wenn mehr,dann wird der Ball schneller!
p1,p2 : integer;
//Die Punkte der jeweiligen Spieler!
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//DXDraw1.DoubleBuffered := True;
Schlaeger1 := TSchlaeger.Create(DXSpriteengine1.Engine);
//Erstellen des ersten Schlaegers!
with Schlaeger1
do
begin
Image := DXImagelist1.Items.Items[0];
//Das bild audwählen!
X := 20;
//Die X-Position des Bildes
Y := (480
div 2) - 32;
//Die Y-Position des Bildes
Z := 0;
Width := Schlaeger1.Image.Width;
//Die Breite des Bildes
Height := Schlaeger1.Image.Height;
//Die Höhe des Bildes
end;
Schlaeger2 := TSchlaeger.Create(DXSpriteengine1.Engine);
//Der 2. Schläger
with Schlaeger2
do //Die Angaben: Siehe oben!
begin
Image := DXImagelist1.Items.Items[0];
X := 772;
Y := (480
div 2) - 32 + 50;
Z := 0;
Width := Schlaeger2.Image.Width;
Height := Schlaeger2.Image.Height;
end;
Ball := TBall.Create(DXSpriteEngine1.Engine);
//Der Ball
with Ball
do //Angaban: Siehe Schlaeger 1;
begin
//Pixelcheck := true;
Image := DXImageList1.Items.Items[1];
X := (800
div 2) - 8;
Y := (480
div 2) - 8 + 50;
Z := 0;
Width := Ball.Image.Width;
Height := Ball.Image.Height;
end;
mx := -2;
//X Bewegung des Balles;
my := -2;
//Y Bewegung des Balles;
sy := 3;
//Die Bewegung des Schlägers!
coll := false;
//Noch keine Kollision;
p1 := 0;
//Die Punkte der Spieler!
p2 := 0;
//Die Punkte der Spieler!
end;
Procedure TSchlaeger.DoMove(MoveCount: Integer);
begin
Inherited DoMove(Movecount);
if IsUp
in Form1.DXInput1.States
then //Wird Pfeil nach oben gedrückt, dann geht Schlaeger 1 nach oben!
Schlaeger2.Y := Schlaeger2.Y - sy;
if IsDown
in Form1.DXInput1.States
then //Wird Pfeil nach unten gedrückt, dann geht Schlaeger 1 nach unten!
Schlaeger2.Y := Schlaeger2.Y + sy;
if IsButton1
in Form1.DXInput1.States
then //Wird die Taste Q gedrückt, dann geht Schlaeger 2 nach oben!
Schlaeger1.Y := Schlaeger1.Y - sy;
if IsButton2
in Form1.DXInput1.States
then //Wird die Taste A gedrückt, dann geht Schlaeger 2 nach unten!
Schlaeger1.Y := Schlaeger1.Y + sy;
if Schlaeger1.Y < 57
then // Geht der Schlaeger über den Bildschrirm hinaus, wird er zurückgesetzt!
Schlaeger1.Y := 57;
if Schlaeger2.Y < 57
then
Schlaeger2.Y := 57;
if Schlaeger1.Y > 462
then
Schlaeger1.Y := 462;;
if Schlaeger2.Y > 462
then
Schlaeger2.Y := 462;
end;
Procedure TBall.DoCollision(Sprite: TSprite;
var Done: Boolean);
begin
if (Sprite
is TSchlaeger)
then
begin
mx := mx * -1;
inc(c);
if (c
mod 5) = 0
then
begin
mx := mx * 1.3;
my := my * 1.3;
sy := sy * 1.1;
end;
end;
end;
Procedure TBall.DoMove(MoveCount: Integer);
begin
Inherited DoMove(MoveCount);
Ball.X := Ball.X + mx;
Ball.Y := Ball.Y + my;
collision;
//Kollidoert der Schlaeger?
if (Ball.Y < 54)
or (Ball.Y > 522)
then
my := my * -1;
if Ball.X < 0
then
begin
inc(P2);
Ball.X := (800
div 2) - 8;
Ball.Y := (480
div 2) - 8 + 50;
mx := 2;
my := 2;
sy := 3;
coll := true;
c := 0;
end;
if Ball.X > 800
then
begin
inc(P1);
Ball.X := (800
div 2) - 8;
Ball.Y := (480
div 2) - 8 + 50;
mx := -2;
my := -2;
sy := 3;
coll := true;
c := 0;
end;
end;
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
DXInput1.Update;
DXDraw1.Surface.Fill(0);
with DXDraw1.Surface.Canvas
do
begin
Brush.Style := bsClear;
Font.Color := clWhite;
Font.
Name := '
BankGothic Md BT';
Font.Size := 50;
Textout(100, -10, inttostr(P1));
Textout(640, -10, inttostr(P2));
pen.Color := clWhite;
pen.Width := 2;
Moveto(0,50);
lineto(800,50);
release;
end;
DXSpriteEngine1.Move(1);
DXSpriteEngine1.Draw;
DXDraw1.Flip;
if coll = true
then
sleep(300);
coll := false;
end;
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
DXDraw1.Finalize;
end;
end.