unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXClass, DXSprite, DXInput, DXDraws, StdCtrls;

type
  TForm1 = class(TDXForm)
    DXDraw1: TDXDraw;
    DXImageList1: TDXImageList;
    DXInput1: TDXInput;
    DXSpriteEngine1: TDXSpriteEngine;
    DXTimer1: TDXTimer;
    procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:boolean;                                //переменная движения в сторону BOSA

implementation

{$R *.dfm}
  type
  TPlayerSprite = class(TImageSprite)
  protected
    procedure DoMove(MoveCount: Integer); override;
  end;

  TBoSS = class(TImageSprite)
   protected
      procedure DoMove(MoveCount: Integer); override;
      procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
  public
    constructor Create(AParent: TSprite); override;
    destructor Destroy; override;
  end;

   TPlayerFa = class(TImageSprite)
   protected
    procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
    procedure DoMove(MoveCount: Integer); override;
   public
    constructor Create(AParent: TSprite); override;
    destructor Destroy; override;
  end;

   Procedure TPlayerSprite.DoMove(MoveCount: Integer);   var speedrelpl1:integer;
  begin
     inherited DoMove(MoveCount);
      if isLeft in Form1.DXInput1.States then   x:=x-5;  // при нажатии двигаем объект в лево
      if isRight in Form1.DXInput1.States then X:=x+5; // при нажатии двигаем объект вправо
      if isup in Form1.DXInput1.States then            // при нажатие вверх создаётся наша пулька
      begin
      with TPlayerFa.Create(Engine) do
      begin
      PixelCheck := True;
      Image := form1.dxImageList1.Items.Find('Pula');
      X := Self.X+Self.Width  -40;                    //Чтобы пуля создавалась около нашего обьекта 
      Y := Self.Y+Self.Height -80 ;                   //Чтобы пуля создавалась около нашего обьекта
       Width := Image.Width;
      Height := Image.Height;
      end;
      end;
      if  y >= form1.DXDraw1.SurfaceHeight-image.Height then  //непускаем
      y := form1.DXDraw1.SurfaceHeight-image.Height;               //объект 
      if  x >= form1.DXDraw1.SurfaceWidth -image.Width  then  //за границы
      x := form1.DXDraw1.SurfaceWidth -image.Width;                 // формы
      if  y <= 0 then
      y := 1;
      if  x <= 0 then
      x:=1;
end;


  Procedure TPlayerFa.DoMove(MoveCount: Integer);
begin
   inherited DoMove(MoveCount);
   y:=y-3;
end;

  Procedure TBoSS.DoMove(MoveCount: Integer);
  begin
   inherited DoMove(MoveCount);
   if x>= 600 then I:= false;
   if x<= 0 then I:= true;
   if i= true then X := X+5;
   if i= false then X := X-5;
    Collision;
end;

procedure TPlayerFa.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TBoss then dead;
 Collision;
end;

procedure TBoss.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is Tplayerfa then dead;
 Collision;
end;


constructor TBOSS.Create(AParent: TSprite);
begin
  inherited Create(AParent);
  Image := form1.DXImageList1.Items.Find('BOSS');
  Width := Image.Width;
  Height := Image.Height;
end;

constructor TPlayerFa.Create(AParent: TSprite);
begin
  inherited Create(AParent);
  Image := form1.DXImageList1.Items.Find('Pula');
  Width := Image.Width;
  Height := Image.Height;
   Collision;
end;

destructor TPlayerFa.Destroy;
begin
  inherited Destroy;
end;

destructor TBoss.Destroy;
begin
  inherited Destroy;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
if not DXDraw1.CanDraw then exit;
  DXInput1.Update;
  DXSpriteEngine1.Move(LagCount);
  DXSpriteEngine1.Dead;
  DXDraw1.Surface.Fill(0);
  DXSpriteEngine1.Draw;
  DXDraw1.Flip;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  I:=true;
with TBOSS.Create(Dxspriteengine1.Engine) do
begin
  PixelCheck := True;
  Image := form1.dxImageList1.Items.Find('BOSS');
  x:=350;
  y:=10;
  Width := Image.Width;
  Height := Image.Height;
end;

with TPlayerSprite.Create(Dxspriteengine1.Engine) do
begin
 PixelCheck := True;
  Image := form1.dxImageList1.Items.Find('Pla');
  x:=350;
  y:=500;
  Width := Image.Width;
  Height := Image.Height;
end;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=VK_ESCAPE then application.Terminate
end;

end.
