unit Ufussball;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls,math, StdCtrls;
type
TForm1 =
class(TForm)
Spielfeld: TImage;
Ball: TImage;
speed: TTimer;
Move: TTimer;
power: TScrollBar;
Panel1: TPanel;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure SpielfeldClick(Sender: TObject);
procedure speedTimer(Sender: TObject);
procedure MoveTimer(Sender: TObject);
procedure SpielfeldMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
ges:real;
{Geschwindigkeit des Balles}
ballposx,ballposy:integer;
{Ursprüngliche Position des Balles}
hinposx,hinposy:integer;
{Position des geplanten Balles}
x,y:integer;
{Koordinaten}
fall:integer;
{Für case_abfrage}
zeiger:tpoint;
xmouse,ymouse:integer;
strength:real;
barpos:integer;
schlaege:integer;
implementation
{$R *.dfm}
procedure bewegen ( move:ttimer; speed:ttimer; ball:timage; power:tscrollbar; label1:tlabel);
{Berechnung der Postion vom Ball mit Abhänigkeit der Geschwindikeit}
var bewegenx,bewegeny:integer;
winkel:extended;
begin
speed.Enabled:=false;
if ballposx > hinposx
then bewegenx:=ballposx-hinposx;
{Hinposition ohne die Abhänigkeit der Geschwindkeit berechnet}
if ballposx < hinposx
then bewegenx:=hinposx-ballposx;
if ballposy > hinposy
then bewegeny:=ballposy-hinposy;
if ballposy < hinposy
then bewegeny:=hinposy-ballposy;
{x:= trunc(sin(winkel*pi/180)*ges);} {Hinpositon mit der Abhängigkeit der Geschwindigkeit}
{y:=trunc(cos(winkel*pi/180)*ges);}
x:=bewegenx;
y:=bewegeny;
if ballposx > hinposx
then x:=-x;
if ballposy > hinposy
then y:=-y;
x:=trunc(x*ges);
y:=trunc(y*ges);
move.enabled:=true;
{Nun bewegt sich der Ball}
ges:=0;
{Ist für den zweiten Schlag wichtig}
schlaege:=schlaege+1;
label1.Caption:=label1.Caption+inttostr(schlaege);
power.Position:=0;
ballposx:=ball.Left;
ballposy:=ball.Top;
barpos:=-1;
end;
procedure richtung (timer1:TTimer);
begin
timer1.enabled:=true;
hinposx:=xmouse;
hinposy:=ymouse;
{form1.caption:=inttostr(ballposx)+'-'+inttostr(ballposy)+'-'+inttostr(hinposx)+'-'+inttostr(hinposy);}
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ges:=0;
fall:=1;
strength:=-0.1;
ballposx:=ball.Left;
ballposy:=ball.Top;
barpos:=-1;
schlaege:=0;
end;
procedure TForm1.SpielfeldClick(Sender: TObject);
begin
fall:=-fall;
{Bei Klick auf Spielfeld findet ein Vorzeichenwechsel bei fall statt.}
case fall
of {Bei -1 wird die Geschwindikeit ermittelt und bei 1 wird die Position berechnet.}
-1:richtung(speed);
1:bewegen(move,speed,ball,power,label1);
end;
end;
procedure TForm1.speedTimer(Sender: TObject);
begin
if trunc(ges) = 2
then begin strength:=-strength; barpos:=-barpos;
end;
if frac(ges) < 0
then begin strength:=-strength; barpos:=-barpos;
end;
ges:=ges+strength;
power.Position:=power.position+barpos;
form1.caption:=floattostr(ges);
end;
procedure TForm1.MoveTimer(Sender: TObject);
var n,m:integer;
begin
if (ball.top < 0)
or (ball.Top > 520)
then y:=-y;
if (ball.left < 0)
or (ball.left > 711)
then x:=-x;