SmnVadik

Lab 7.5

Sep 13th, 2023
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.25 KB | None | 0 0
  1. unit Unit2;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Math, Vcl.Imaging.jpeg, GraphUtil,
  8.   Vcl.Imaging.pngimage, Vcl.StdCtrls, System.ImageList, Vcl.ImgList, GDIPAPI, GDIPOBJ,
  9.   Vcl.Menus;
  10.  
  11. type
  12.   TForm2 = class(TForm)
  13.     PushkaTimer: TTimer;
  14.     ImageBackGround: TImage;
  15.     ImageShip: TImage;
  16.     PopupMenu1: TPopupMenu;
  17.     ImageBam: TImage;
  18.     MainMenu1: TMainMenu;
  19.     Instruction1: TMenuItem;
  20.     Instruction2: TMenuItem;
  21.     ImagePushka: TImage;
  22.     BlowTimer: TTimer;
  23.     ShipTimer: TTimer;
  24.     ShotTimer: TTimer;
  25.     ShotImage: TImage;
  26.     SpeedLabel: TLabel;
  27.     procedure PushkaTimerTimer(Sender: TObject);
  28.     procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  29.     procedure FormCreate(Sender: TObject);
  30.     procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
  31.     procedure Instruction2Click(Sender: TObject);
  32.     procedure Instruction1Click(Sender: TObject);
  33.     procedure BlowTimerTimer(Sender: TObject);
  34.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  35.     procedure ShipTimerTimer(Sender: TObject);
  36.     procedure ShotTimerTimer(Sender: TObject);
  37.  
  38.   private
  39.     { Private declarations }
  40.   public
  41.     { Public declarations }
  42.   end;
  43.  
  44. type
  45.     TPushka = record
  46.         Num : Integer;
  47.         Left, Right : Boolean;
  48.     end;
  49.  
  50. var
  51.   Form2: TForm2;
  52.   Pushka : TPushka;
  53.   leftShift, TopShift, MoveSideShift, MoveTopShift, Shift: Integer;
  54.   isShot, IsCorrect : Boolean;
  55.   Pos, Offset: Integer;
  56.  
  57.  
  58. implementation
  59.  
  60. {$R *.dfm}
  61.  
  62. function TakeImage(SpriteNum: Integer): string;
  63. var
  64.     Res: string;
  65. begin
  66.     Res := 'pushka' + IntToStr(SpriteNum) + '.png';
  67.     TakeImage := Res;
  68. end;
  69.  
  70.  
  71.  
  72. procedure TForm2.ShotTimerTimer(Sender: TObject);
  73. begin
  74.     ShotImage.Left := ShotImage.Left + Shift;
  75.     ShotImage.Top := ShotImage.Top + MoveTopShift;
  76.     if (ShotImage.Top < 105) then
  77.     begin
  78.         ShotTimer.Enabled := False;
  79.         ShotImage.Visible := false;
  80.         isShot := False;
  81.     end;
  82.     if (ShotImage.left >= ImageShip.Left + 20) and (ShotImage.Left <= ImageShip.Left + ImageShip.Width - 20)
  83.     and (ShotImage.Top >= ImageShip.Top) and (ShotImage.Top <= ImageShip.Top + ImageShip.Height -20) then
  84.     begin
  85.         ShipTimer.Enabled := False;
  86.         ShotImage.Visible := False;
  87.         ImageBam.Left := ImageShip.left;
  88.         ImageBam.top := ImageShip.top;
  89.         ImageBam.Visible := True;
  90.         BlowTimer.Enabled := True;
  91.     end;
  92. end;
  93.  
  94. procedure TForm2.BlowTimerTimer(Sender: TObject);
  95. begin
  96.     ShipTimer.Interval := Random(55) + 15;
  97.     ImageShip.visible := False;
  98.     ImageShip.Left := 0 - ImageShip.Width;
  99.     ImageBam.Visible := False;
  100.     ImageShip.Visible := True;
  101.     ShipTimer.Enabled := True;
  102.     BlowTimer.Enabled := False;
  103. end;
  104.  
  105.  
  106. procedure TForm2.FormCreate(Sender: TObject);
  107. begin
  108.     Offset := 6;
  109.     Pushka.Num := 4;
  110.     ImageShip.Left := 0 - ImageShip.Width;
  111.     ShipTimer.Interval := Random(55) + 15;
  112.     LeftShift := 360;
  113.     TopShift := 320;
  114.     MoveSideShift := 0;
  115.     MoveTopShift := -30;
  116.     IsShot := false;
  117.     Form2.Height := 605;
  118.     Form2.Width := 818;
  119. end;
  120.  
  121. procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  122.   Shift: TShiftState);
  123. begin
  124.     if key = VK_LEFT then
  125.         Pushka.Left := True;
  126.     if Key = VK_RIGHT then
  127.         Pushka.Right := True;
  128. end;
  129.  
  130. procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
  131. begin
  132.     if (key = #13) and (not IsShot) then
  133.     begin
  134.         Shift := MoveSideShift;
  135.         ShotImage.Left := LeftShift;
  136.         ShotImage.Top := TopShift;
  137.         ShotTimer.Enabled := true;
  138.         ShotImage.Visible := True;
  139.         IsShot := True;
  140.     end;
  141.     if (key in ['0'..'9']) then
  142.     begin
  143.         ShotTimer.Interval := 130 - StrToInt(key) * 10;
  144.         SpeedLabel.Caption := 'Скорость: ' + key;
  145.     end;
  146. end;
  147.  
  148. procedure TForm2.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
  149. begin
  150.     if key = VK_LEFT then
  151.         Pushka.Left := False;
  152.     if Key = VK_RIGHT then
  153.         Pushka.Right := False;
  154. end;
  155.  
  156.  
  157. procedure TForm2.Instruction1Click(Sender: TObject);
  158. Const
  159.     Str1 = '1.Введите скорость ядра[0..9].';
  160.     Str2 = #13#10'2.Используйте стрелки, чтобы повернуть пушку.';
  161.     Str3 = #13#10'3.Нажмите ''Enter'', чтобы выстрелить из пушки.';
  162. begin
  163.     Application.MessageBox(Str1 + Str2 + Str3, 'Справка', MB_ICONQUESTION);
  164. end;
  165. procedure TForm2.Instruction2Click(Sender: TObject);
  166. begin
  167.     Application.MessageBox('Сымоник Вадим, 251004', 'Разработчик', 0);
  168. end;
  169.  
  170. Function ObjectCollision(Shape : TShape; ImageShip : TImage) : Boolean;
  171. Var
  172.     Shape1Left, Shape1Top, Shape1Right, Shape1Bottom: Integer;
  173.     Shape2Left, Shape2Top, Shape2Right, Shape2Bottom: Integer;
  174. begin
  175.     Shape1Left := Shape.Left;
  176.     Shape1Top := Shape.Top;
  177.     Shape1Right := Shape.Left + Shape.Width;
  178.     Shape1Bottom := Shape.Top + Shape.Height;
  179.  
  180.     Shape2Left := ImageShip.Left;
  181.     Shape2Top := ImageShip.Top;
  182.     Shape2Right := ImageShip.Left + ImageShip.Width;
  183.     Shape2Bottom := ImageShip.Top + ImageShip.Height;
  184.  
  185.     IsCorrect := (Shape1Right >= Shape2Left) and (Shape1Left <= Shape2Right) and
  186.         (Shape1Bottom >= Shape2Top) and (Shape1Top <= Shape2Bottom);
  187.     ObjectCollision := IsCorrect;
  188. end;
  189.  
  190. procedure TForm2.PushkaTimerTimer(Sender: TObject);
  191. var
  192.     str: string;
  193. begin
  194.     if (Pushka.Left = True) and (Pushka.Num > 1) then
  195.     begin
  196.         Dec(Pushka.Num);
  197.         str := TakeImage(Pushka.Num);
  198.         ImagePushka.Picture.LoadFromFile(str);
  199.         MoveSideShift := MoveSideShift - 9;
  200.         if (Pushka.Num in [1..3]) then
  201.         begin
  202.             LeftShift := LeftShift - 60;
  203.             TopShift := TopShift + 18;
  204.         end
  205.         else
  206.         begin
  207.             LeftShift := LeftShift - 60;
  208.             TopShift := TopShift - 18;
  209.         end;
  210.     end;
  211.     if (Pushka.Right = True) and (Pushka.Num < 7) then
  212.     begin
  213.         Inc(Pushka.Num);
  214.         str := TakeImage(Pushka.Num);
  215.         ImagePushka.Picture.LoadFromFile(str);
  216.         MoveSideShift := MoveSideShift + 9;
  217.         if (Pushka.Num in [5..7]) then
  218.         begin
  219.             LeftShift := LeftShift + 60;
  220.             TopShift := TopShift + 18;
  221.         end
  222.         else
  223.         begin
  224.             LeftShift := LeftShift + 60;
  225.             TopShift := TopShift - 18;
  226.         end;
  227.     end;
  228.  
  229. end;
  230.  
  231. procedure TForm2.ShipTimerTimer(Sender: TObject);
  232. begin
  233.     if ImageShip.Left > Form2.Width then
  234.     begin
  235.         ImageShip.Left := 0 - ImageShip.Width;
  236.         ShipTimer.Interval := Random(55) + 15;
  237.     end;
  238.     ImageShip.Left := ImageShip.Left + offset;
  239. end;
  240.  
  241. end.
Add Comment
Please, Sign In to add comment