unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Math, StdCtrls;
type
TForm1 =
class(TForm)
shpFeld: TShape;
shpSP1: TShape;
shpCPU: TShape;
btnSpielen: TButton;
shpBall: TShape;
tmrBeweger: TTimer;
tmrCPU: TTimer;
tmrZaehler: TTimer;
lblSpieler: TLabel;
lblCPU: TLabel;
lblPunkteSpieler: TLabel;
lblPunkteCPU: TLabel;
procedure btnSpielenClick(Sender: TObject);
procedure OnKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
procedure tmrBewegerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tmrCPUTimer(Sender: TObject);
procedure tmrZaehlerTimer(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
vBeginne: Boolean;
vX, vY: Integer;
//horizontale u. vertikale Geschw.
implementation
{$R *.dfm}
//Fängt das Spiel an; startet Möglichkeiten zur Balkensteuerung
procedure TForm1.btnSpielenClick(Sender: TObject);
begin
beep;
//beep
vBeginne := True;
//Setzt die Spiel-Variable auf 1
btnSpielen.Enabled := False;
vX := 0;
vY := 12;
end;
//Richtet den Zufallsgenerator ein -> Zufallszahlen werden nicht nach der Systemzeit ausgerichtet
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;
//Startet die zwei Timer, erlaubt es, den Spieler-Balken zu bewegen
procedure TForm1.OnKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if (vBeginne)
then //Wenn Spiel-Variable auf 1, dann beginnt das Spiel
begin
tmrBeweger.Enabled := True;
tmrCPU.Enabled := True;
tmrZaehler.Enabled := True;
if (Key = VK_RIGHT)
and (shpSP1.Left <= 500)
then (shpSP1.Left := shpSP1.Left + 14);
if (Key = VK_Left)
and (shpSP1.Left >= 0)
then (shpSP1.Left := shpSP1.Left - 14);
end;
end;
//Sorgt für die Bewegung des Balls und achtet auf die Spielregeln
procedure TForm1.tmrBewegerTimer(Sender: TObject);
begin
//Falls der Ball auf den unteren Balken trifft...
if (shpBall.Top >= (shpSP1.Top - 20))
and (shpBall.Left >= shpSP1.Left)
and (shpBall.Left <= (shpSP1.Left + 25))
then
begin
vX := -16;
vY := (vY * (-1));
end;
if (shpBall.Top >= (shpSP1.Top - 20))
and (shpBall.Left > (shpSP1.Left + 25))
and (shpBall.Left <= (shpSP1.Left + 50))
then
begin
vX := -12;
vY := (vY * (-1));
end;
if (shpBall.Top >= (shpSP1.Top - 20))
and (shpBall.Left > (shpSP1.Left + 50))
and (shpBall.Left <= (shpSP1.Left + 75))
then
begin
vX := 12;
vY := (vY * (-1));
end;
if (shpBall.Top >= (shpSP1.Top - 29))
and (shpBall.Left > (shpSP1.Left + 75))
and (shpBall.Left <= (shpSP1.Left + 100))
then
begin
vX := 16;
vY := (vY * (-1));
end;
//Falls der Ball auf den oberen Balken trifft...
if (shpBall.Top <= (shpCPU.Top + 20))
and (shpBall.Left >= shpCPU.Left)
and (shpBall.Left <= (shpCPU.Left + 25))
then
begin
vX := -16;
vY := (vY * (-1));
end;
if (shpBall.Top <= (shpCPU.Top + 20))
and (shpBall.Left > (shpCPU.Left +25))
and (shpBall.Left <= (shpCPU.Left + 50))
then
begin
vX := -12;
vY := (vY * (-1));
end;
if (shpBall.Top <= (shpCPU.Top + 20))
and (shpBall.Left > (shpCPU.Left +50))
and (shpBall.Left <= (shpCPU.Left + 75))
then
begin
vX := 12;
vY := (vY * (-1));
end;
if (shpBall.Top <= (shpCPU.Top + 20))
and (shpBall.Left > (shpCPU.Left +75))
and (shpBall.Left <= (shpCPU.Left + 100))
then
begin
vX := 16;
vY := (vY * (-1));
end;
//Abpraller von Wänden!
if (shpBall.Left <= 0)
or (shpBall.Left >= 590)
then
begin
vX := (vX * (-1));
end;
//Bewegt den Ball einfach nur.
shpBall.Top := (shpBall.Top + vY);
//Steuert vertikal!
shpBall.Left := (shpBall.Left + vX);
//Steuert horizontal!
end;
//Bewegt den Balken des Computer-Gegners.
procedure TForm1.tmrCPUTimer(Sender: TObject);
begin
if (shpBall.Left > shpCPU.Left)
then
begin
shpCPU.Left := (shpCPU.Left + 14);
end;
if (shpBall.Left <= shpCPU.Left)
then
begin
shpCPU.Left := (shpCPU.Left - 14);
end;
end;
//Steuert den Zähler.
procedure TForm1.tmrZaehlerTimer(Sender: TObject);
var
vPSpieler, vPCPU: Integer;
begin
if (StrToInt(lblPunkteCPU.Caption) >= 21)
or (StrToInt(lblPunkteSpieler.Caption) >= 21)
then
begin
tmrBeweger.Enabled := False;
tmrZaehler.Enabled := False;
shpBall.Left := 296;
shpBall.Top := 200;
shpSP1.Left := 250;
shpCPU.Left := 250;
vX := 0;
vY := 12;
if (StrToInt(lblPunkteCPU.Caption) >= 21)
then
begin
ShowMessage('
Leider verloren! CPU gewinnt');
//tmrZaehler.Enabled := False;
end;
if (StrToInt(lblPunkteSpieler.Caption) >= 21)
then
begin
ShowMessage('
Herzlichen Glückwunsch! Gewonnen!');
//tmrZaehler.Enabled := False;
end;
//tmrZaehler.Enabled := False;
lblPunkteSpieler.Caption := IntToStr(0);
lblPunkteCPU.Caption := IntToStr(0);
vPSpieler := 0;
vPCPU := 0;
btnSpielen.Enabled := True;
end;
if (shpBall.Top <= 0)
or (shpBall.Top >= 380)
then
begin
if (shpBall.Top <= 0)
then //Gibt Spieler einen Punkt.
begin
vPSpieler := StrToInt(lblPunkteSpieler.Caption);
lblPunkteSpieler.Caption := IntToStr(vPSpieler +1);
end;
if (shpBall.Top >= 380)
then //Gibt CPU einen Punkt.
begin
vPCPU := StrToInt(lblPunkteCPU.Caption);
lblPunkteCPU.Caption := IntToStr(vPCPU +1);
end;
//Reset
tmrBeweger.Enabled := False;
shpBall.Left := 296;
shpBall.Top := 200;
shpSP1.Left := 250;
shpCPU.Left := 250;
vX := 0;
vY := 12;
tmrBeweger.Enabled := True;
sleep(250);
end;
end;
end.