source: tags/1.2.0/UCore.pas

Last change on this file was 51, checked in by chronos, 5 years ago
  • Added: New tile skip alpha for alpha letters.
File size: 5.4 KB
Line 
1unit UCore;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, UTheme, UPersistentForm, UApplicationInfo, UTranslator,
9 URegistry, UGame, ActnList, Forms, Controls, Dialogs;
10
11type
12
13 { TCore }
14
15 TCore = class(TDataModule)
16 AAbout: TAction;
17 AComputer: TAction;
18 AHistory: TAction;
19 AHelp: TAction;
20 AUndo: TAction;
21 ASettings: TAction;
22 ActionList1: TActionList;
23 AExit: TAction;
24 ANew: TAction;
25 ApplicationInfo1: TApplicationInfo;
26 PersistentForm1: TPersistentForm;
27 ThemeManager1: TThemeManager;
28 Translator1: TTranslator;
29 procedure AAboutExecute(Sender: TObject);
30 procedure AComputerExecute(Sender: TObject);
31 procedure AExitExecute(Sender: TObject);
32 procedure AHelpExecute(Sender: TObject);
33 procedure AHistoryExecute(Sender: TObject);
34 procedure ANewExecute(Sender: TObject);
35 procedure ASettingsExecute(Sender: TObject);
36 procedure AUndoExecute(Sender: TObject);
37 procedure DataModuleCreate(Sender: TObject);
38 procedure DataModuleDestroy(Sender: TObject);
39 procedure Translator1Translate(Sender: TObject);
40 private
41 procedure GameChange(Sender: TObject);
42 procedure GameWin(Sender: TObject);
43 procedure GameOver(Sender: TObject);
44 public
45 Game: TGame;
46 procedure UpdateInterface;
47 procedure LoadConfig;
48 procedure SaveConfig;
49 end;
50
51var
52 Core: TCore;
53
54implementation
55
56{$R *.lfm}
57
58uses
59 UFormMain, UFormSettings, UFormAbout, UFormNew, UFormHelp, UFormComputer,
60 UFormHistory;
61
62resourcestring
63 SGameOverCaption = 'Lost';
64 SGameOverMessage = 'Game over!';
65 SWinCaption = 'Win';
66 SWinMessage = 'You reached %s and won! You can continue to play to get higher score.';
67
68{ TCore }
69
70procedure TCore.DataModuleCreate(Sender: TObject);
71begin
72 {$IFDEF Linux}
73 // If installed in Linux system then use installation directory for po files
74 if Application.ExeName = '/usr/bin/Game2048' then
75 Translator1.POFilesFolder := '/usr/share/Game2048/languages';
76 {$ENDIF}
77
78 Randomize;
79 Game := TGame.Create;
80 Game.Board.Size := Point(4, 4);
81 Game.OnChange := GameChange;
82 Game.OnWin := GameWin;
83 Game.OnGameOver := GameOver;
84 LoadConfig;
85end;
86
87procedure TCore.ASettingsExecute(Sender: TObject);
88begin
89 FormSettings := TFormSettings.Create(nil);
90 try
91 if FormSettings.ShowModal = mrOk then begin
92 FormMain.Redraw;
93 FormMain.UpdateInterface;
94 UpdateInterface;
95 end;
96 finally
97 FreeAndNil(FormSettings);
98 end;
99end;
100
101procedure TCore.AUndoExecute(Sender: TObject);
102begin
103 Game.Undo;
104end;
105
106procedure TCore.AAboutExecute(Sender: TObject);
107begin
108 FormAbout := TFormAbout.Create(nil);
109 try
110 FormAbout.ApplicationInfo := Core.ApplicationInfo1;
111 FormAbout.ShowModal;
112 finally
113 FreeAndNil(FormAbout);
114 end;
115end;
116
117procedure TCore.AComputerExecute(Sender: TObject);
118begin
119 FormComputer := TFormComputer.Create(nil);
120 try
121 FormComputer.ShowModal;
122 finally
123 FreeAndNil(FormComputer);
124 end;
125end;
126
127procedure TCore.AExitExecute(Sender: TObject);
128begin
129 FormMain.Close;
130end;
131
132procedure TCore.AHelpExecute(Sender: TObject);
133begin
134 FormHelp := TFormHelp.Create(nil);
135 try
136 FormHelp.ShowModal;
137 finally
138 FreeAndNil(FormHelp);
139 end;
140end;
141
142procedure TCore.AHistoryExecute(Sender: TObject);
143begin
144 FormHistory := TFormHistory.Create(nil);
145 try
146 FormHistory.ShowModal;
147 finally
148 FreeAndNil(FormHistory);
149 end;
150end;
151
152procedure TCore.ANewExecute(Sender: TObject);
153begin
154 FormNew := TFormNew.Create(nil);
155 try
156 FormNew.Load(Core.Game);
157 if FormNew.ShowModal = mrOk then begin
158 FormNew.Save(Core.Game);
159 Game.New;
160 UpdateInterface;
161 FormMain.UpdateInterface;
162 end;
163 finally
164 FreeAndNil(FormNew);
165 end;
166end;
167
168procedure TCore.DataModuleDestroy(Sender: TObject);
169begin
170 SaveConfig;
171 FreeAndNil(Game);
172end;
173
174procedure TCore.Translator1Translate(Sender: TObject);
175begin
176 UGame.Translate;
177end;
178
179procedure TCore.GameChange(Sender: TObject);
180begin
181 FormMain.Redraw;
182 UpdateInterface;
183end;
184
185procedure TCore.GameWin(Sender: TObject);
186begin
187 MessageDlg(SWinCaption, Format(SWinMessage, [Game.GetTileSkinValue(Game.WinTileValue)]), mtInformation, [mbOk], 0);
188end;
189
190procedure TCore.GameOver(Sender: TObject);
191begin
192 MessageDlg(SGameOverCaption, SGameOverMessage, mtInformation, [mbOK], 0);
193end;
194
195procedure TCore.UpdateInterface;
196begin
197 AUndo.Enabled := Game.CanUndo;
198 AHistory.Enabled := Game.RecordHistory;
199 {$IFDEF DEBUG}
200 AComputer.Enabled := True;
201 AComputer.Visible := True;
202 {$ELSE}
203 AComputer.Enabled := False;
204 AComputer.Visible := False;
205 {$ENDIF}
206end;
207
208procedure TCore.LoadConfig;
209begin
210 with TRegistryEx.Create do
211 try
212 CurrentContext := ApplicationInfo1.GetRegistryContext;
213
214 if ValueExists('LanguageCode') then
215 Translator1.Language := Translator1.Languages.SearchByCode(ReadStringWithDefault('LanguageCode', ''))
216 else Translator1.Language := Translator1.Languages.SearchByCode('');
217 ThemeManager1.Theme := ThemeManager1.Themes.FindByName(ReadStringWithDefault('Theme', 'System'));
218 finally
219 Free;
220 end;
221 Game.LoadFromRegistry(ApplicationInfo1.GetRegistryContext);
222end;
223
224procedure TCore.SaveConfig;
225begin
226 with TRegistryEx.Create do
227 try
228 CurrentContext := ApplicationInfo1.GetRegistryContext;
229
230 if Assigned(Translator1.Language) and (Translator1.Language.Code <> '') then
231 WriteString('LanguageCode', Translator1.Language.Code)
232 else DeleteValue('LanguageCode');
233 WriteString('Theme', ThemeManager1.Theme.Name);
234 finally
235 Free;
236 end;
237 Game.SaveToRegistry(ApplicationInfo1.GetRegistryContext);
238end;
239
240end.
241
Note: See TracBrowser for help on using the repository browser.