Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit2;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Math, Vcl.Imaging.jpeg, GraphUtil,
- Vcl.Imaging.pngimage, Vcl.StdCtrls, System.ImageList, Vcl.ImgList, GDIPAPI, GDIPOBJ,
- Vcl.Menus;
- type
- TForm2 = class(TForm)
- PushkaTimer: TTimer;
- ImageBackGround: TImage;
- ImageShip: TImage;
- PopupMenu1: TPopupMenu;
- ImageBam: TImage;
- MainMenu1: TMainMenu;
- Instruction1: TMenuItem;
- Instruction2: TMenuItem;
- ImagePushka: TImage;
- BlowTimer: TTimer;
- ShipTimer: TTimer;
- ShotTimer: TTimer;
- ShotImage: TImage;
- SpeedLabel: TLabel;
- procedure PushkaTimerTimer(Sender: TObject);
- procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
- procedure FormCreate(Sender: TObject);
- procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
- procedure Instruction2Click(Sender: TObject);
- procedure Instruction1Click(Sender: TObject);
- procedure BlowTimerTimer(Sender: TObject);
- procedure FormKeyPress(Sender: TObject; var Key: Char);
- procedure ShipTimerTimer(Sender: TObject);
- procedure ShotTimerTimer(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- type
- TPushka = record
- Num : Integer;
- Left, Right : Boolean;
- end;
- var
- Form2: TForm2;
- Pushka : TPushka;
- leftShift, TopShift, MoveSideShift, MoveTopShift, Shift: Integer;
- isShot, IsCorrect : Boolean;
- Pos, Offset: Integer;
- implementation
- {$R *.dfm}
- function TakeImage(SpriteNum: Integer): string;
- var
- Res: string;
- begin
- Res := 'pushka' + IntToStr(SpriteNum) + '.png';
- TakeImage := Res;
- end;
- procedure TForm2.ShotTimerTimer(Sender: TObject);
- begin
- ShotImage.Left := ShotImage.Left + Shift;
- ShotImage.Top := ShotImage.Top + MoveTopShift;
- if (ShotImage.Top < 105) then
- begin
- ShotTimer.Enabled := False;
- ShotImage.Visible := false;
- isShot := False;
- end;
- if (ShotImage.left >= ImageShip.Left + 20) and (ShotImage.Left <= ImageShip.Left + ImageShip.Width - 20)
- and (ShotImage.Top >= ImageShip.Top) and (ShotImage.Top <= ImageShip.Top + ImageShip.Height -20) then
- begin
- ShipTimer.Enabled := False;
- ShotImage.Visible := False;
- ImageBam.Left := ImageShip.left;
- ImageBam.top := ImageShip.top;
- ImageBam.Visible := True;
- BlowTimer.Enabled := True;
- end;
- end;
- procedure TForm2.BlowTimerTimer(Sender: TObject);
- begin
- ShipTimer.Interval := Random(55) + 15;
- ImageShip.visible := False;
- ImageShip.Left := 0 - ImageShip.Width;
- ImageBam.Visible := False;
- ImageShip.Visible := True;
- ShipTimer.Enabled := True;
- BlowTimer.Enabled := False;
- end;
- procedure TForm2.FormCreate(Sender: TObject);
- begin
- Offset := 6;
- Pushka.Num := 4;
- ImageShip.Left := 0 - ImageShip.Width;
- ShipTimer.Interval := Random(55) + 15;
- LeftShift := 360;
- TopShift := 320;
- MoveSideShift := 0;
- MoveTopShift := -30;
- IsShot := false;
- Form2.Height := 605;
- Form2.Width := 818;
- end;
- procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if key = VK_LEFT then
- Pushka.Left := True;
- if Key = VK_RIGHT then
- Pushka.Right := True;
- end;
- procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
- begin
- if (key = #13) and (not IsShot) then
- begin
- Shift := MoveSideShift;
- ShotImage.Left := LeftShift;
- ShotImage.Top := TopShift;
- ShotTimer.Enabled := true;
- ShotImage.Visible := True;
- IsShot := True;
- end;
- if (key in ['0'..'9']) then
- begin
- ShotTimer.Interval := 130 - StrToInt(key) * 10;
- SpeedLabel.Caption := 'Скорость: ' + key;
- end;
- end;
- procedure TForm2.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
- begin
- if key = VK_LEFT then
- Pushka.Left := False;
- if Key = VK_RIGHT then
- Pushka.Right := False;
- end;
- procedure TForm2.Instruction1Click(Sender: TObject);
- Const
- Str1 = '1.Введите скорость ядра[0..9].';
- Str2 = #13#10'2.Используйте стрелки, чтобы повернуть пушку.';
- Str3 = #13#10'3.Нажмите ''Enter'', чтобы выстрелить из пушки.';
- begin
- Application.MessageBox(Str1 + Str2 + Str3, 'Справка', MB_ICONQUESTION);
- end;
- procedure TForm2.Instruction2Click(Sender: TObject);
- begin
- Application.MessageBox('Сымоник Вадим, 251004', 'Разработчик', 0);
- end;
- Function ObjectCollision(Shape : TShape; ImageShip : TImage) : Boolean;
- Var
- Shape1Left, Shape1Top, Shape1Right, Shape1Bottom: Integer;
- Shape2Left, Shape2Top, Shape2Right, Shape2Bottom: Integer;
- begin
- Shape1Left := Shape.Left;
- Shape1Top := Shape.Top;
- Shape1Right := Shape.Left + Shape.Width;
- Shape1Bottom := Shape.Top + Shape.Height;
- Shape2Left := ImageShip.Left;
- Shape2Top := ImageShip.Top;
- Shape2Right := ImageShip.Left + ImageShip.Width;
- Shape2Bottom := ImageShip.Top + ImageShip.Height;
- IsCorrect := (Shape1Right >= Shape2Left) and (Shape1Left <= Shape2Right) and
- (Shape1Bottom >= Shape2Top) and (Shape1Top <= Shape2Bottom);
- ObjectCollision := IsCorrect;
- end;
- procedure TForm2.PushkaTimerTimer(Sender: TObject);
- var
- str: string;
- begin
- if (Pushka.Left = True) and (Pushka.Num > 1) then
- begin
- Dec(Pushka.Num);
- str := TakeImage(Pushka.Num);
- ImagePushka.Picture.LoadFromFile(str);
- MoveSideShift := MoveSideShift - 9;
- if (Pushka.Num in [1..3]) then
- begin
- LeftShift := LeftShift - 60;
- TopShift := TopShift + 18;
- end
- else
- begin
- LeftShift := LeftShift - 60;
- TopShift := TopShift - 18;
- end;
- end;
- if (Pushka.Right = True) and (Pushka.Num < 7) then
- begin
- Inc(Pushka.Num);
- str := TakeImage(Pushka.Num);
- ImagePushka.Picture.LoadFromFile(str);
- MoveSideShift := MoveSideShift + 9;
- if (Pushka.Num in [5..7]) then
- begin
- LeftShift := LeftShift + 60;
- TopShift := TopShift + 18;
- end
- else
- begin
- LeftShift := LeftShift + 60;
- TopShift := TopShift - 18;
- end;
- end;
- end;
- procedure TForm2.ShipTimerTimer(Sender: TObject);
- begin
- if ImageShip.Left > Form2.Width then
- begin
- ImageShip.Left := 0 - ImageShip.Width;
- ShipTimer.Interval := Random(55) + 15;
- end;
- ImageShip.Left := ImageShip.Left + offset;
- end;
- end.
Add Comment
Please, Sign In to add comment