unit USpiel;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg, UPunkte , UDaten;
type
TFSpiel =
class(TForm)
Spielfeld: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Spieler1: TShape;
spieler2: TShape;
Sh_ball: TShape;
Timer_ball: TTimer;
Label5: TLabel;
procedure Label5Click(Sender: TObject);
procedure Timer_ballTimer(Sender: TObject);
procedure FormKeyPress(Sender: TObject;
var Key: Char);
procedure FormKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
procedure Shape2ContextPopup(Sender: TObject; MousePos: TPoint;
var Key: Word; Shift: TShiftState);
procedure Shape1ContextPopup(Sender: TObject; MousePos: TPoint;
var Key: Char);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
const
links = 2;
rechts = 1;
var
FSpiel: TFSpiel;
Balltop, Ballleft, Richtung, LeftStep, TopStep :Integer;
implementation
{$R *.dfm}
procedure TFSpiel.Shape1ContextPopup(Sender: TObject; MousePos: TPoint;
var Key: Char);
begin
case key
of
'
w' :
begin
Spieler1.Top := Spieler1.Top-12;
end;
'
s' :
begin
Spieler1.Top := Spieler1.Top+12;
end;
end;
end;
procedure TFSpiel.Shape2ContextPopup(Sender: TObject; MousePos: TPoint;
var Key: Word; Shift: TShiftState);
begin
case key
of
vk_up :
begin
Spieler2.Top := spieler2.Top-12;
end;
vk_down :
begin
Spieler2.Top := Spieler2.Top+12;
end;
end;
end;
procedure TFSpiel.FormKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
case key
of
vk_up :
begin
if Spieler2.Top >=55
then begin
spieler2.Top := spieler2.top-12;
end;
end;
vk_down :
begin
if Spieler2.Top <=348
then begin
Spieler2.Top := spieler2.top+12;
end;
end;
end;
end;
procedure TFSpiel.FormKeyPress(Sender: TObject;
var Key: Char);
begin
case key
of
'
w' :
begin
if spieler1.top>=55
then begin
spieler1.Top := spieler1.Top-12;
end;
end;
'
s' :
begin
if spieler1.Top<=348
then begin
spieler1.Top := spieler1.Top+12;
end;
end;
end;
end;
procedure TFSpiel.Timer_ballTimer(Sender: TObject);
begin
Sh_Ball.Visible:=true;
if TopStep<0
then {Ball bewegt sich nach oben}
begin
if sh_Ball.Top <=49
then TopStep:=TopStep*(-1);
{Ball trifft oben, Richtung umdrehen}
end
else {TopStep>=0, Ball bewegt sich nach unten}
begin
if sh_Ball.Top >=390
then TopStep:=TopStep*(-1);
{Ball trifft unten, Richtung umdrehen}
end;
sh_Ball.Top := sh_Ball.top+TopStep;
if LeftStep<0
then {Richtung=links}
begin
if sh_Ball.Left <=44-(sh_ball.width)
then begin
Punkte_Zaehlen(SpRechts);
LeftStep:=Leftstep*(-1);
end;
end
else {Richtung=rechts}
begin
if sh_Ball.Left >=672-(sh_ball.width)
then LeftStep:=Leftstep*(-1);
//ab hier abprallen von balken
if (sh_ball.left<spieler1.left+spieler1.width)
and (sh_ball.top>spieler1.top)
and
(sh_ball.top+sh_ball.height<spieler1.top+spieler1.height)
then
LeftStep:=Leftstep*(-1);
if (sh_ball.left+sh_ball.width>spieler2.left)
and (sh_ball.top>spieler2.top)
and
(sh_ball.top+sh_ball.height<spieler2.top+spieler2.height)
then
TopStep:=TopStep*(-1);
end;
//ende abprallen von balken
sh_Ball.Left := sh_Ball.left+LeftStep;
end;
procedure TFSpiel.Label5Click(Sender: TObject);
var i: Integer;
Winkel : real;
Richtung : extended;
begin
Timer_Ball.Enabled := true;
randomize;
LeftStep :=5*(random(4)+1);
Winkel :=random(360)+1;
if Winkel>180
then LeftStep:=LeftStep*(-1);
Winkel:=Winkel*Pi/180;
TopStep:=trunc(10*cos(Winkel));
Timer_Ball.Interval:=5*(random(10)+1);
if timer_ball.Interval <60
then timer_ball.Interval:=40;
Ballleft:= random(540)+40;
Balltop:= random(150)+50;
sh_Ball.Left := Ballleft;
sh_Ball.Top := Balltop;
end;
end.