close Warning: Can't synchronize with repository "(default)" (No changeset 184 in the repository). Look in the Trac log for more information.

source: branches/delphi/UCore.pas

Last change on this file was 44, checked in by chronos, 10 years ago
  • Added: Test Delphi conversion.
File size: 4.7 KB
Line 
1unit UCore;
2
3interface
4
5uses
6 Classes, SysUtils, ActnList, Controls, Dialogs, Forms,
7 UGame, Vcl.ImgList, System.Actions;
8
9type
10
11 { TCore }
12
13 TCore = class(TDataModule)
14 AGameSave: TAction;
15 AGameLoad: TAction;
16 ASettings: TAction;
17 ActionList1: TActionList;
18 AExit: TAction;
19 AGameEnd: TAction;
20 AGameEndTurn: TAction;
21 AGameNew: TAction;
22 AGameRestart: TAction;
23 ImageListLarge: TImageList;
24 ImageListSmall: TImageList;
25 OpenDialog1: TOpenDialog;
26 SaveDialog1: TSaveDialog;
27 procedure AExitExecute(Sender: TObject);
28 procedure AGameEndExecute(Sender: TObject);
29 procedure AGameEndTurnExecute(Sender: TObject);
30 procedure AGameLoadExecute(Sender: TObject);
31 procedure AGameNewExecute(Sender: TObject);
32 procedure AGameRestartExecute(Sender: TObject);
33 procedure AGameSaveExecute(Sender: TObject);
34 procedure ASettingsExecute(Sender: TObject);
35 procedure CoolTranslator1Translate(Sender: TObject);
36 procedure DataModuleCreate(Sender: TObject);
37 procedure DataModuleDestroy(Sender: TObject);
38 private
39 FInitialized: Boolean;
40 procedure DoOnMove(CellFrom, CellTo: TCell; var CountOnce,
41 CountRepeat: Integer; Update: Boolean; var Confirm: Boolean);
42 procedure DoOnWin(Player: TPlayer);
43 public
44 Game: TGame;
45 UseSingleView: Boolean;
46 LastMapFileName: string;
47 View: TView;
48 procedure Init;
49 property Initialized: Boolean read FInitialized;
50 end;
51
52var
53 Core: TCore;
54
55
56implementation
57
58{$R *.dfm}
59
60uses
61 UFormMove, UFormMain, UFormNew, UFormSettings;
62
63resourcestring
64 SPlayerWins = 'Player %s wins';
65
66
67{ TCore }
68
69procedure TCore.DoOnMove(CellFrom, CellTo: TCell; var CountOnce,
70 CountRepeat: Integer; Update: Boolean; var Confirm: Boolean);
71begin
72 if Update then FormMove.SpinEditOnce.MaxValue := CellFrom.GetAvialPower + CountOnce
73 else FormMove.SpinEditOnce.MaxValue := CellFrom.GetAvialPower;
74 FormMove.SpinEditOnce.Value := CountOnce;
75 FormMove.TrackBarOnce.Max := FormMove.SpinEditOnce.MaxValue;
76 FormMove.TrackBarOnce.Position := FormMove.SpinEditOnce.Value;
77 FormMove.SpinEditRepeat.MaxValue := Game.Map.MaxPower;
78 FormMove.SpinEditRepeat.Value := CountRepeat;
79 FormMove.TrackBarRepeat.Max := FormMove.SpinEditRepeat.MaxValue;
80 FormMove.TrackBarRepeat.Position := FormMove.SpinEditRepeat.Value;
81 if FormMove.ShowModal = mrOk then begin
82 CountOnce := FormMove.SpinEditOnce.Value;
83 CountRepeat := FormMove.SpinEditRepeat.Value;
84 Confirm := True;
85 end else Confirm := False;
86end;
87
88procedure TCore.DoOnWin(Player: TPlayer);
89begin
90 ShowMessage(Format(SPlayerWins, [Player.Name]));
91end;
92
93procedure TCore.AExitExecute(Sender: TObject);
94begin
95 Game.Running := False;
96 Application.Terminate;
97end;
98
99procedure TCore.AGameEndExecute(Sender: TObject);
100begin
101 Game.Running := False;
102 FormMain.Redraw;
103end;
104
105procedure TCore.AGameEndTurnExecute(Sender: TObject);
106begin
107 Game.NextTurn;
108 FormMain.Redraw;
109 while Game.Running and (Game.CurrentPlayer.Mode <> pmHuman) do begin
110 if Game.CurrentPlayer.Mode = pmComputer then
111 Game.CurrentPlayer.ComputerTurn;
112 Game.NextTurn;
113 FormMain.Redraw;
114 Application.ProcessMessages;
115 Sleep(1);
116 end;
117end;
118
119procedure TCore.AGameLoadExecute(Sender: TObject);
120begin
121 OpenDialog1.FileName := LastMapFileName;
122 if OpenDialog1.Execute then begin
123 Game.Map.LoadFromFile(OpenDialog1.FileName);
124 LastMapFileName := OpenDialog1.FileName;
125 FormMain.Redraw;
126 end;
127end;
128
129procedure TCore.AGameNewExecute(Sender: TObject);
130begin
131 FormNew.Load(Game);
132 if FormNew.ShowModal = mrOk then begin
133 FormNew.Save(Game);
134 Game.New;
135 Game.Running := True;
136 FormMain.AZoomAll.Execute;
137 end;
138end;
139
140procedure TCore.AGameRestartExecute(Sender: TObject);
141begin
142 Game.New;
143 Game.Running := True;
144 FormMain.Redraw;
145end;
146
147procedure TCore.AGameSaveExecute(Sender: TObject);
148begin
149 SaveDialog1.FileName := ExtractFileDir(LastMapFileName);
150 if SaveDialog1.Execute then begin
151 Game.Map.SaveToFile(SaveDialog1.FileName);
152 LastMapFileName := SaveDialog1.FileName;
153 end;
154end;
155
156procedure TCore.ASettingsExecute(Sender: TObject);
157begin
158 FormSettings.Load;
159 if FormSettings.ShowModal = mrOk then begin
160 FormSettings.Save;
161 end;
162end;
163
164procedure TCore.CoolTranslator1Translate(Sender: TObject);
165begin
166 UGame.InitStrings;
167end;
168
169procedure TCore.DataModuleCreate(Sender: TObject);
170begin
171 Game := TGame.Create;
172 Game.OnMove := DoOnMove;
173 Game.OnWin := DoOnWin;
174end;
175
176procedure TCore.DataModuleDestroy(Sender: TObject);
177begin
178 FreeAndNil(Game);
179end;
180
181procedure TCore.Init;
182var
183 I: Integer;
184begin
185 FInitialized := True;
186 for I := 0 to Game.Players.Count - 1 do
187 TPlayer(Game.Players[I]).View.DestRect := Rect(0, 0, FormMain.PaintBox1.Width,
188 FormMain.PaintBox1.Height);
189 Game.New;
190 Game.Running := True;
191 FormMain.AZoomAll.Execute;
192end;
193
194end.
195
Note: See TracBrowser for help on using the repository browser.