-
Notifications
You must be signed in to change notification settings - Fork 1
/
uFormDemineur.pas
138 lines (117 loc) · 3.55 KB
/
uFormDemineur.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
unit uFormDemineur;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts, ClassDemineur,
FMX.StdCtrls, FMX.Controls.Presentation, System.ImageList, FMX.ImgList,
FMX.Objects, FMX.Styles.Objects, FMX.Ani, FMX.Menus, System.Actions,
FMX.ActnList;
type
TFormDemineur = class(TForm)
GridLayout: TGridLayout;
StyleBook: TStyleBook;
LayoutTop: TLayout;
TexteMine: TText;
imgMine: TImage;
TexteTimer: TText;
LayoutMain: TLayout;
RectButton: TRectangle;
btnEasy: TButton;
LayoutOptions: TLayout;
btnHard: TButton;
btnMiddle: TButton;
TextePlay: TText;
faLayoutOptions: TFloatAnimation;
MainMenu: TMainMenu;
miNewGame: TMenuItem;
ActionList: TActionList;
aNouvellePartie: TAction;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormShow(Sender: TObject);
procedure btnEasyClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure aNouvellePartieExecute(Sender: TObject);
procedure aNouvellePartieUpdate(Sender: TObject);
private
FDemineur : TDemineur;
procedure GetActionGame(GameAction : TGameAction);
procedure GetMine(iMine : integer);
procedure GetTimer(iSecond : integer);
public
{ Déclarations publiques }
end;
var
FormDemineur: TFormDemineur;
implementation
uses
System.DateUtils;
{$R *.fmx}
procedure TFormDemineur.aNouvellePartieExecute(Sender: TObject);
begin
FDemineur.Stop(gaNewParty);
end;
procedure TFormDemineur.aNouvellePartieUpdate(Sender: TObject);
begin
aNouvellePartie.Enabled := Assigned(FDemineur);
end;
procedure TFormDemineur.btnEasyClick(Sender: TObject);
begin
if Sender = btnMiddle then
FDemineur.Level := lvMiddle
else
begin
if Sender = btnHard then
FDemineur.Level := lvHard
else
FDemineur.Level := lvEasy;
end;
RectButton.Visible := False;
FDemineur.Play;
end;
procedure TFormDemineur.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if CanClose then
FreeAndNil(FDemineur);
end;
procedure TFormDemineur.FormCreate(Sender: TObject);
begin
FDemineur := nil;
RectButton.Visible := True;
end;
procedure TFormDemineur.FormShow(Sender: TObject);
begin
if not Assigned(FDemineur) then
begin
FDemineur := TDemineur.Create(Self, GridLayout);
FDemineur.OnGameAction := GetActionGame;
FDemineur.OnGetMine := GetMine;
FDemineur.OnGetTimer := GetTimer;
end;
end;
procedure TFormDemineur.GetActionGame(GameAction : TGameAction);
begin
// permet de savoir quand le jeu est gagné, ou perdu
if GameAction = gaLose then
TextePlay.Text := 'Perdu !'
else
if GameAction = gaWin then
TextePlay.Text := 'Gagné !'
else
TextePlay.Text := 'Commencer';
faLayoutOptions.StartValue := Self.Height + 1;
RectButton.Visible := True;
faLayoutOptions.Start;
end;
procedure TFormDemineur.GetMine(iMine : integer);
begin
// ajout d'un effet lors de l'affichage du nombre de mines restantes
TAnimator.AnimateFloat(TexteMine, 'Font.Size', 35);
TAnimator.AnimateFloat(TexteMine, 'Font.Size', 25);
TexteMine.Text := iMine.ToString;
end;
procedure TFormDemineur.GetTimer(iSecond : integer);
begin
// affichage du chronomètre
TexteTimer.Text := iSecond.ToString;
end;
end.