Advertisement
Guest User

Untitled

a guest
May 19th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.21 KB | None | 0 0
  1. unit UnitMainScene;
  2.  
  3. interface
  4.  
  5. uses
  6.    System.SysUtils, System.Types, System.UITypes, System.Classes,
  7.    System.Variants,
  8.    FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,
  9.    FMX.Controls.Presentation, FMX.StdCtrls, FMX.Ani, FMX.Layouts, UnitEngine;
  10.  
  11. type
  12.    TfMainScene = class(TForm)
  13.       odOpenFile: TOpenDialog;
  14.     Settings: TCircle;
  15.     Help: TCircle;
  16.       PauseLayout: TLayout;
  17.       FloatAnimation1: TFloatAnimation;
  18.     Pause: TRectangle;
  19.       RectAnimation1: TRectAnimation;
  20.     btnPlay: TRectangle;
  21.     btnQuit: TRectangle;
  22.     lTask: TLabel;
  23.       procedure FormShow(Sender: TObject);
  24.       procedure FormPaint(Sender: TObject; Canvas: TCanvas;
  25.         const ARect: TRectF);
  26.       procedure SettingsClick(Sender: TObject);
  27.       procedure FloatAnimation1Finish(Sender: TObject);
  28.       procedure btnPlayClick(Sender: TObject);
  29.       procedure FormMouseMove(Sender: TObject; Shift: TShiftState;
  30.         X, Y: Single);
  31.       procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
  32.         Shift: TShiftState; X, Y: Single);
  33.       procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
  34.         Shift: TShiftState; X, Y: Single);
  35.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  36.     procedure HelpClick(Sender: TObject);
  37.     procedure btnQuitClick(Sender: TObject);
  38.    private
  39.       { Private declarations }
  40.    public
  41.       { Public declarations }
  42.    end;
  43.  
  44. var
  45.    fMainScene: TfMainScene;
  46.  
  47. implementation
  48.  
  49. {$R *.fmx}
  50.  
  51. uses UnitContinue, UnitStartGame, UnitChooseLevel, UnitConst, UnitHelp;
  52.  
  53. procedure TfMainScene.SettingsClick(Sender: TObject);
  54. begin
  55.    PauseLayout.Position.Y := fMainScene.Height;
  56.    PauseLayout.Visible := True;
  57.    FloatAnimation1.Inverse := False;
  58.    FloatAnimation1.StartValue := fMainScene.Height;
  59.    FloatAnimation1.StopValue := 0;
  60.    FloatAnimation1.Start;
  61.    IsPause := True;
  62. end;
  63.  
  64. procedure TfMainScene.FloatAnimation1Finish(Sender: TObject);
  65. begin
  66.    if FloatAnimation1.Inverse then
  67.    begin
  68.       PauseLayout.Visible := False;
  69.       IsPause := False;
  70.    end;
  71. end;
  72.  
  73. procedure TfMainScene.FormShow(Sender: TObject);
  74. begin
  75.    PauseLayout.Visible := False;
  76.    GetLevelFromFile(SourcePos, AnswerPos, CurrPos, LvlPath, LvlTask);
  77.    IsPause := False;
  78.    lTask.Text := LvlTask;
  79.  
  80. end;
  81.  
  82. procedure TfMainScene.HelpClick(Sender: TObject);
  83. begin
  84.    fHelp.ShowModal;
  85. end;
  86.  
  87. procedure TfMainScene.FormClose(Sender: TObject; var Action: TCloseAction);
  88. begin
  89.    fStartGame.Close;
  90. end;
  91.  
  92. procedure TfMainScene.FormMouseDown(Sender: TObject; Button: TMouseButton;
  93.   Shift: TShiftState; X, Y: Single);
  94. begin
  95.    if IsMatchCoord(X, Y) and (Button = TMouseButton.mbLeft) then
  96.    begin
  97.       IsOnMatch := True;
  98.       MatchPos := GetMatchPos(X, Y);
  99.       DistanceX := X - MatchCoord[1, MatchPos];
  100.       DistanceY := Y - MatchCoord[2, MatchPos];
  101.       if MatchesOrientation[MatchPos] = Vert then
  102.       begin
  103.          MatchSizeX := MatchSizeVertX;
  104.          MatchSizeY := MatchSizeVertY;
  105.       end
  106.       else
  107.       begin
  108.          MatchSizeX := MatchSizeHorizX;
  109.          MatchSizeY := MatchSizeHorizY;
  110.       end;
  111.    end
  112.    else
  113.       IsOnMatch := False;
  114.    IsMoved := False;
  115. end;
  116.  
  117. procedure TfMainScene.FormMouseMove(Sender: TObject; Shift: TShiftState;
  118.   X, Y: Single);
  119. begin
  120.    if IsOnMatch then
  121.    begin
  122.       MatchX := X - DistanceX;
  123.       MatchY := Y - DistanceY;
  124.       CurrPos[MatchPos] := 0;
  125.       PrevPos := MatchPos;
  126.       IsMoved := True;
  127.       Self.Invalidate;
  128.    end;
  129. end;
  130.  
  131. procedure TfMainScene.FormMouseUp(Sender: TObject; Button: TMouseButton;
  132.   Shift: TShiftState; X, Y: Single);
  133. begin
  134.    if IsOnMatch and IsMoved then
  135.    begin
  136.       if IsFreePos(X, Y, MatchPos) then
  137.       begin
  138.          MatchX := MatchCoord[1, MatchPos];
  139.          MatchY := MatchCoord[2, MatchPos];
  140.          CurrPos[MatchPos] := 1;
  141.          CurrPos[PrevPos] := 0;
  142.          if MatchesOrientation[MatchPos] = Vert then
  143.          begin
  144.             MatchSizeX := MatchSizeVertX;
  145.             MatchSizeY := MatchSizeVertY;
  146.          end
  147.          else
  148.          begin
  149.             MatchSizeX := MatchSizeHorizX;
  150.             MatchSizeY := MatchSizeHorizY;
  151.          end;
  152.       end
  153.       else
  154.       begin
  155.          MatchX := MatchCoord[1, PrevPos];
  156.          MatchY := MatchCoord[2, PrevPos];
  157.          CurrPos[PrevPos] := 1;
  158.       end;
  159.    end;
  160.    IsOnMatch := False;
  161.    Self.Invalidate;
  162.    if IsSolved(CurrPos, AnswerPos) then
  163.       fContinue.Show;
  164. end;
  165.  
  166. procedure TfMainScene.btnPlayClick(Sender: TObject);
  167. begin
  168.    FloatAnimation1.Inverse := True;
  169.    FloatAnimation1.Start;
  170. end;
  171.  
  172. procedure TfMainScene.btnQuitClick(Sender: TObject);
  173. begin
  174.    fMainScene.Close;
  175. end;
  176.  
  177. procedure TfMainScene.FormPaint(Sender: TObject; Canvas: TCanvas;
  178.   const ARect: TRectF);
  179. var
  180.    BrushPos, BrushMatch: TStrokeBrush;
  181.    I: Integer;
  182.    MatchSizeX, MatchSizeY: Single;
  183. begin
  184.    BrushMatch := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColorRec.Brown);
  185.    BrushPos := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColorRec.Black);
  186.    if not IsPause then
  187.    begin
  188.       with Self.Canvas do
  189.       begin
  190.          if IsOnMatch and IsMoved then
  191.             FillRect(TRectF.Create(TPointF.Create(MatchX,
  192.                MatchY), UnitEngine.MatchSizeX,
  193.                UnitEngine.MatchSizeY), 0, 0, AllCorners, 1, BrushMatch,
  194.                TCornerType.Round);
  195.          for I := 0 to High(SourcePos) do
  196.          begin
  197.             if MatchesOrientation[I] = Vert then
  198.             begin
  199.                MatchSizeX := MatchSizeVertX;
  200.                MatchSizeY := MatchSizeVertY;
  201.             end
  202.             else
  203.             begin
  204.                MatchSizeX := MatchSizeHorizX;
  205.                MatchSizeY := MatchSizeHorizY;
  206.             end;
  207.             DrawRect(TRectF.Create(TPointF.Create(MatchCoord[1, I],
  208.                MatchCoord[2, I]), MatchSizeX, MatchSizeY),
  209.                0, 0, AllCorners, 1, BrushPos, TCornerType.Round);
  210.             if CurrPos[I] = 1 then
  211.                FillRect(TRectF.Create(TPointF.Create(MatchCoord[1, I],
  212.                   MatchCoord[2, I]), MatchSizeX,
  213.                   MatchSizeY), 0, 0, AllCorners, 1, BrushMatch,
  214.                   TCornerType.Round);
  215.          end;
  216.       end;
  217.    end;
  218. end;
  219.  
  220. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement