unit Unit1;
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, CastleControl,
CastleGLImages, CastleKeysMouse, CastleTimeUtils;
type
TPlayer = class(TComponent)
public
Image: TGLImage;
X, Y: Single;
procedure Draw;
destructor Destroy; override;
end;
TForm1 = class(TForm)
CastleControl1: TCastleControl;
procedure CastleControl1Press(Sender: TObject;
const Event: TInputPressRelease);
procedure CastleControl1Render(Sender: TObject);
procedure CastleControl1Update(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
GameTimer: TTimerResult;
Player1, Player2: TPlayer;
WallImage: TGLImage;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
destructor TPlayer.Destroy;
begin
FreeAndNil(Image);
inherited;
end;
procedure TPlayer.Draw;
begin
Image.Draw(X, Y);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Player1 := TPlayer.Create(Self);
Player1.Image := TGLImage.Create('castle-data:/IMG/player1.png', true);
Player1.X := 32;
Player1.Y := 32;
Player2 := TPlayer.Create(Self);
Player2.Image := TGLImage.Create('castle-data:/IMG/player2.png', true);
Player2.X := 96;
Player2.Y := 96;
WallImage := TGLImage.Create('castle-data:/IMG/objects/Box.png', true);
GameTimer := Timer;
end;
procedure TForm1.CastleControl1Render(Sender: TObject);
var
I, J: integer;
begin
Player1.Draw;
Player2.Draw;
for I := 0 to 10 do
for J := 0 to 10 do
if Odd(I + J) and Odd(I * 2 + J * 5) then
WallImage.Draw(I * 16, J * 16);
end;
procedure TForm1.CastleControl1Press(Sender: TObject;
const Event: TInputPressRelease);
begin
if Event.IsKey(keySpace) then
begin
Player2.Y := Player2.Y + 30.0;
Player2.X := Player2.X + 10.0;
end;
end;
procedure TForm1.CastleControl1Update(Sender: TObject);
var
SecondsPassed: TFloatTime;
begin
SecondsPassed := TimerSeconds(Timer, GameTimer);
GameTimer := Timer;
if CastleControl1.Pressed[keyLeft] then
Player1.X := Player1.X - 80.0 * SecondsPassed;
if CastleControl1.Pressed[keyRight] then
Player1.X := Player1.X + 80.0 * SecondsPassed;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(WallImage);
end;
end.