Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit UnitMainScene;
- interface
- uses
- System.SysUtils, System.Types, System.UITypes, System.Classes,
- System.Variants,
- FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,
- FMX.Controls.Presentation, FMX.StdCtrls, FMX.Ani, FMX.Layouts, UnitEngine;
- type
- TfMainScene = class(TForm)
- odOpenFile: TOpenDialog;
- Settings: TCircle;
- Help: TCircle;
- PauseLayout: TLayout;
- FloatAnimation1: TFloatAnimation;
- Pause: TRectangle;
- RectAnimation1: TRectAnimation;
- btnPlay: TRectangle;
- btnQuit: TRectangle;
- lTask: TLabel;
- procedure FormShow(Sender: TObject);
- procedure FormPaint(Sender: TObject; Canvas: TCanvas;
- const ARect: TRectF);
- procedure SettingsClick(Sender: TObject);
- procedure FloatAnimation1Finish(Sender: TObject);
- procedure btnPlayClick(Sender: TObject);
- procedure FormMouseMove(Sender: TObject; Shift: TShiftState;
- X, Y: Single);
- procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Single);
- procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Single);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure HelpClick(Sender: TObject);
- procedure btnQuitClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- fMainScene: TfMainScene;
- implementation
- {$R *.fmx}
- uses UnitContinue, UnitStartGame, UnitChooseLevel, UnitConst, UnitHelp;
- procedure TfMainScene.SettingsClick(Sender: TObject);
- begin
- PauseLayout.Position.Y := fMainScene.Height;
- PauseLayout.Visible := True;
- FloatAnimation1.Inverse := False;
- FloatAnimation1.StartValue := fMainScene.Height;
- FloatAnimation1.StopValue := 0;
- FloatAnimation1.Start;
- IsPause := True;
- end;
- procedure TfMainScene.FloatAnimation1Finish(Sender: TObject);
- begin
- if FloatAnimation1.Inverse then
- begin
- PauseLayout.Visible := False;
- IsPause := False;
- end;
- end;
- procedure TfMainScene.FormShow(Sender: TObject);
- begin
- PauseLayout.Visible := False;
- GetLevelFromFile(SourcePos, AnswerPos, CurrPos, LvlPath, LvlTask);
- IsPause := False;
- lTask.Text := LvlTask;
- end;
- procedure TfMainScene.HelpClick(Sender: TObject);
- begin
- fHelp.ShowModal;
- end;
- procedure TfMainScene.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- fStartGame.Close;
- end;
- procedure TfMainScene.FormMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Single);
- begin
- if IsMatchCoord(X, Y) and (Button = TMouseButton.mbLeft) then
- begin
- IsOnMatch := True;
- MatchPos := GetMatchPos(X, Y);
- DistanceX := X - MatchCoord[1, MatchPos];
- DistanceY := Y - MatchCoord[2, MatchPos];
- if MatchesOrientation[MatchPos] = Vert then
- begin
- MatchSizeX := MatchSizeVertX;
- MatchSizeY := MatchSizeVertY;
- end
- else
- begin
- MatchSizeX := MatchSizeHorizX;
- MatchSizeY := MatchSizeHorizY;
- end;
- end
- else
- IsOnMatch := False;
- IsMoved := False;
- end;
- procedure TfMainScene.FormMouseMove(Sender: TObject; Shift: TShiftState;
- X, Y: Single);
- begin
- if IsOnMatch then
- begin
- MatchX := X - DistanceX;
- MatchY := Y - DistanceY;
- CurrPos[MatchPos] := 0;
- PrevPos := MatchPos;
- IsMoved := True;
- Self.Invalidate;
- end;
- end;
- procedure TfMainScene.FormMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Single);
- begin
- if IsOnMatch and IsMoved then
- begin
- if IsFreePos(X, Y, MatchPos) then
- begin
- MatchX := MatchCoord[1, MatchPos];
- MatchY := MatchCoord[2, MatchPos];
- CurrPos[MatchPos] := 1;
- CurrPos[PrevPos] := 0;
- if MatchesOrientation[MatchPos] = Vert then
- begin
- MatchSizeX := MatchSizeVertX;
- MatchSizeY := MatchSizeVertY;
- end
- else
- begin
- MatchSizeX := MatchSizeHorizX;
- MatchSizeY := MatchSizeHorizY;
- end;
- end
- else
- begin
- MatchX := MatchCoord[1, PrevPos];
- MatchY := MatchCoord[2, PrevPos];
- CurrPos[PrevPos] := 1;
- end;
- end;
- IsOnMatch := False;
- Self.Invalidate;
- if IsSolved(CurrPos, AnswerPos) then
- fContinue.Show;
- end;
- procedure TfMainScene.btnPlayClick(Sender: TObject);
- begin
- FloatAnimation1.Inverse := True;
- FloatAnimation1.Start;
- end;
- procedure TfMainScene.btnQuitClick(Sender: TObject);
- begin
- fMainScene.Close;
- end;
- procedure TfMainScene.FormPaint(Sender: TObject; Canvas: TCanvas;
- const ARect: TRectF);
- var
- BrushPos, BrushMatch: TStrokeBrush;
- I: Integer;
- MatchSizeX, MatchSizeY: Single;
- begin
- BrushMatch := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColorRec.Brown);
- BrushPos := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColorRec.Black);
- if not IsPause then
- begin
- with Self.Canvas do
- begin
- if IsOnMatch and IsMoved then
- FillRect(TRectF.Create(TPointF.Create(MatchX,
- MatchY), UnitEngine.MatchSizeX,
- UnitEngine.MatchSizeY), 0, 0, AllCorners, 1, BrushMatch,
- TCornerType.Round);
- for I := 0 to High(SourcePos) do
- begin
- if MatchesOrientation[I] = Vert then
- begin
- MatchSizeX := MatchSizeVertX;
- MatchSizeY := MatchSizeVertY;
- end
- else
- begin
- MatchSizeX := MatchSizeHorizX;
- MatchSizeY := MatchSizeHorizY;
- end;
- DrawRect(TRectF.Create(TPointF.Create(MatchCoord[1, I],
- MatchCoord[2, I]), MatchSizeX, MatchSizeY),
- 0, 0, AllCorners, 1, BrushPos, TCornerType.Round);
- if CurrPos[I] = 1 then
- FillRect(TRectF.Create(TPointF.Create(MatchCoord[1, I],
- MatchCoord[2, I]), MatchSizeX,
- MatchSizeY), 0, 0, AllCorners, 1, BrushMatch,
- TCornerType.Round);
- end;
- end;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement