source: tags/1.2.0/Forms/UFormMain.pas

Last change on this file was 55, checked in by chronos, 5 years ago
  • Added: Animation of appearence of new tiles.
File size: 3.3 KB
Line 
1unit UFormMain;
2
3{$mode delphi}{$H+}
4
5interface
6
7uses
8 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
9 ActnList, ExtCtrls, StdCtrls, UGame, UPersistentForm, UApplicationInfo;
10
11type
12
13 { TFormMain }
14
15 TFormMain = class(TForm)
16 MainMenu1: TMainMenu;
17 MenuItem1: TMenuItem;
18 MenuItem2: TMenuItem;
19 MenuItem3: TMenuItem;
20 MenuItem4: TMenuItem;
21 MenuItemMovesHistory: TMenuItem;
22 MenuItemTools: TMenuItem;
23 MenuItemNew: TMenuItem;
24 MenuItemExit: TMenuItem;
25 MenuItemHelp: TMenuItem;
26 MenuItemAbout: TMenuItem;
27 MenuItemGame: TMenuItem;
28 TimerDraw: TTimer;
29 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
30 procedure FormCreate(Sender: TObject);
31 procedure FormDestroy(Sender: TObject);
32 procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
33 procedure FormPaint(Sender: TObject);
34 procedure FormShow(Sender: TObject);
35 procedure TimerDrawTimer(Sender: TObject);
36 private
37 RedrawPending: Boolean;
38 KeyBuffer: array of Word;
39 public
40 procedure Redraw;
41 procedure UpdateInterface;
42 end;
43
44var
45 FormMain: TFormMain;
46
47implementation
48
49{$R *.lfm}
50
51uses
52 UCore;
53
54{ TFormMain }
55
56procedure TFormMain.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
57begin
58 if Core.Game.Running then begin
59 SetLength(KeyBuffer, Length(KeyBuffer) + 1);
60 KeyBuffer[Length(KeyBuffer) - 1] := Key;
61 if not Core.Game.Moving then begin
62 while Length(KeyBuffer) > 0 do begin
63 case KeyBuffer[0] of
64 37: Core.Game.MoveAllAndUpdate(drLeft, True);
65 38: Core.Game.MoveAllAndUpdate(drUp, True);
66 39: Core.Game.MoveAllAndUpdate(drRight, True);
67 40: Core.Game.MoveAllAndUpdate(drDown, True);
68 end;
69 if Length(KeyBuffer) > 1 then
70 Move(KeyBuffer[1], KeyBuffer[0], (Length(KeyBuffer) - 1) * SizeOf(Word));
71 if Length(KeyBuffer) > 0 then
72 SetLength(KeyBuffer, Length(KeyBuffer) - 1);
73 end;
74 end else begin
75 end;
76 end;
77end;
78
79procedure TFormMain.FormPaint(Sender: TObject);
80begin
81 Core.Game.Render(Canvas, Point(Width, Height - MainMenu1.Height));
82end;
83
84procedure TFormMain.FormClose(Sender: TObject; var CloseAction: TCloseAction);
85begin
86 Core.PersistentForm1.Save(Self);
87end;
88
89procedure TFormMain.FormCreate(Sender: TObject);
90begin
91end;
92
93procedure TFormMain.FormDestroy(Sender: TObject);
94begin
95end;
96
97procedure TFormMain.FormShow(Sender: TObject);
98begin
99 Core.PersistentForm1.RegistryContext := Core.ApplicationInfo1.GetRegistryContext;
100 Core.PersistentForm1.Load(Self);
101 Core.ThemeManager1.UseTheme(Self);
102 UpdateInterface;
103 if Core.Game.Board.GetEmptyTilesCount > Core.Game.Board.Size.X * Core.Game.Board.Size.Y -
104 InitialTileCount then
105 Core.Game.New;
106end;
107
108procedure TFormMain.TimerDrawTimer(Sender: TObject);
109begin
110 if RedrawPending then begin
111 RedrawPending := False;
112 Repaint;
113 end;
114end;
115
116procedure TFormMain.Redraw;
117begin
118 RedrawPending := True;
119end;
120
121procedure TFormMain.UpdateInterface;
122var
123 I: Integer;
124 ToolsVisible: Boolean;
125begin
126 MenuItemMovesHistory.Visible := Core.Game.RecordHistory;
127 ToolsVisible := False;
128 for I := 0 to MenuItemTools.Count - 1 do
129 if MenuItemTools.Items[I].Visible then begin
130 ToolsVisible := True;
131 Break;
132 end;
133 MenuItemTools.Visible := ToolsVisible;
134end;
135
136end.
137
Note: See TracBrowser for help on using the repository browser.