Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /Unit1.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 25 - (hide annotations) (download) (as text)
Mon Jul 20 00:50:13 2015 UTC (8 years, 8 months ago) by yamat0jp
File MIME type: text/x-pascal
File size: 15894 byte(s)
CalScoreに問題があったことが判明
1 yamat0jp 5 unit Unit1;
2 yamat0jp 1
3     interface
4    
5     uses
6 yamat0jp 5 System.SysUtils, System.Types, System.UITypes, System.Classes,
7     System.Variants,
8     FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Menus,
9     System.Math, FMX.Objects, FMX.StdCtrls;
10 yamat0jp 1
11     const
12     Count = 8;
13    
14     type
15 yamat0jp 14 TStoneType = (stNone, stWhite, stBlack, stError, stEffect);
16 yamat0jp 1
17 yamat0jp 14 TEffectData = record
18     X, Y: integer;
19     Left, Top: integer;
20     end;
21    
22 yamat0jp 3 TGridData = array [0 .. Count - 1] of array [0 .. Count - 1] of TStoneType;
23 yamat0jp 1
24     TPlayer = class
25     private
26     FAuto: Boolean;
27 yamat0jp 4 FStone: TStoneType;
28 yamat0jp 1 public
29     property Auto: Boolean read FAuto write FAuto;
30 yamat0jp 4 property Stone: TStoneType read FStone write FStone;
31 yamat0jp 1 end;
32    
33     TStoneGrid = class
34     private
35     FStrings: TGridData;
36 yamat0jp 7 FBuffer: array [0 .. Count * Count - 4] of TGridData;
37 yamat0jp 1 FTurnNumber: integer;
38     FTurnIndex: integer;
39 yamat0jp 9 FActive: Boolean;
40 yamat0jp 24 FList: TList;
41 yamat0jp 20 FEffectStone: TStoneType;
42 yamat0jp 15 FBool: Boolean;
43 yamat0jp 21 FTerminated: Boolean;
44 yamat0jp 14 FIndex_X: integer;
45     FIndex_Y: integer;
46 yamat0jp 1 function GetStrings(X, Y: integer): TStoneType;
47     procedure SetStrings(X, Y: integer; const Value: TStoneType);
48     procedure SetTurnNumber(const Value: integer);
49     public
50 yamat0jp 14 constructor Create;
51     destructor Destroy; override;
52 yamat0jp 1 procedure Clear;
53 yamat0jp 10 function CalScore(Stone: TStoneType; X, Y: integer): integer;
54     function CanSetStone(Stone: TStoneType; X, Y: integer; Reverse: Boolean;
55 yamat0jp 7 const Visible: Boolean = false): Boolean;
56 yamat0jp 10 function NextStone(Stone: TStoneType): TPoint;
57 yamat0jp 9 procedure Start;
58     procedure Restart;
59     procedure Pause;
60 yamat0jp 14 function ListExecute: Boolean;
61     procedure Paint(Canvas: TCanvas);
62     procedure ImageCount(X, Y: integer);
63 yamat0jp 3 property Strings[X, Y: integer]: TStoneType read GetStrings
64     write SetStrings; default;
65 yamat0jp 1 property TurnNumber: integer read FTurnNumber write SetTurnNumber;
66 yamat0jp 10 property Active: Boolean read FActive;
67 yamat0jp 1 end;
68    
69     TForm1 = class(TForm)
70     Timer1: TTimer;
71     MainMenu1: TMainMenu;
72 yamat0jp 5 MenuItem1: TMenuItem;
73     MenuItem2: TMenuItem;
74     MenuItem3: TMenuItem;
75     MenuItem4: TMenuItem;
76     MenuItem5: TMenuItem;
77     MenuItem6: TMenuItem;
78     MenuItem7: TMenuItem;
79     PaintBox1: TPaintBox;
80 yamat0jp 7 MenuItem8: TMenuItem;
81     MenuItem9: TMenuItem;
82     MenuItem10: TMenuItem;
83     MenuItem11: TMenuItem;
84     MenuItem12: TMenuItem;
85 yamat0jp 14 Timer2: TTimer;
86     Image1: TImage;
87     Image2: TImage;
88     Image3: TImage;
89     Image4: TImage;
90 yamat0jp 15 Image5: TImage;
91 yamat0jp 1 procedure FormCreate(Sender: TObject);
92     procedure FormDestroy(Sender: TObject);
93     procedure Timer1Timer(Sender: TObject);
94     procedure FormResize(Sender: TObject);
95 yamat0jp 5 procedure MenuItem4Click(Sender: TObject);
96     procedure MenuItem2Click(Sender: TObject);
97 yamat0jp 7 procedure PaintBox1Tap(Sender: TObject; const Point: TPointF);
98     procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
99 yamat0jp 5 Shift: TShiftState; X, Y: Single);
100     procedure PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
101     procedure MenuItem6Click(Sender: TObject);
102 yamat0jp 7 procedure PaintBox1Resize(Sender: TObject);
103     procedure MenuItem8Click(Sender: TObject);
104     procedure MenuItem10Click(Sender: TObject);
105     procedure MenuItem11Click(Sender: TObject);
106 yamat0jp 14 procedure Timer2Timer(Sender: TObject);
107 yamat0jp 24 procedure FormDeactivate(Sender: TObject);
108     procedure FormActivate(Sender: TObject);
109 yamat0jp 1 private
110 yamat0jp 5 { Private ���� }
111 yamat0jp 1 StoneGrid: TStoneGrid;
112     Index: TPlayer;
113     Size: integer;
114     procedure CompStone;
115     procedure GameStart;
116     procedure ChangePlayer;
117     public
118 yamat0jp 5 { Public ���� }
119 yamat0jp 1 end;
120    
121     var
122     Player1: TPlayer;
123     Player2: TPlayer;
124    
125     Form1: TForm1;
126    
127     implementation
128    
129 yamat0jp 5 {$R *.fmx}
130 yamat0jp 7 {$R *.Windows.fmx MSWINDOWS}
131 yamat0jp 1 { TStoneGrid }
132    
133 yamat0jp 10 function TStoneGrid.CalScore(Stone: TStoneType; X, Y: integer): integer;
134 yamat0jp 1 var
135     i, j: integer;
136     begin
137 yamat0jp 25 result:=0;
138 yamat0jp 10 if CanSetStone(Stone, X, Y, true) = true then
139 yamat0jp 1 begin
140 yamat0jp 25 if Stone = stEffect then
141     Stone:=FEffectStone;
142 yamat0jp 20 case Stone of
143 yamat0jp 23 stBlack:
144     Stone := stWhite;
145     stWhite:
146     Stone := stBlack;
147 yamat0jp 25 else
148     Exit;
149 yamat0jp 20 end;
150 yamat0jp 3 for i := 0 to Count - 1 do
151     for j := 0 to Count - 1 do
152 yamat0jp 10 if CanSetStone(Stone, i, j, false) = true then
153 yamat0jp 3 inc(result);
154 yamat0jp 1 end;
155 yamat0jp 25 FStrings := FBuffer[FTurnIndex];
156 yamat0jp 1 end;
157    
158 yamat0jp 10 function TStoneGrid.CanSetStone(Stone: TStoneType; X, Y: integer;
159 yamat0jp 7 Reverse: Boolean; const Visible: Boolean): Boolean;
160 yamat0jp 1 var
161 yamat0jp 14 i: integer;
162 yamat0jp 4 p: Boolean;
163 yamat0jp 14 q: ^TEffectData;
164 yamat0jp 4 procedure Method(m, n: integer);
165 yamat0jp 3 var
166 yamat0jp 4 s: TStoneType;
167 yamat0jp 15 j, k: integer;
168 yamat0jp 1 begin
169 yamat0jp 4 if p = false then
170     Exit;
171     i := 1;
172 yamat0jp 3 while true do
173 yamat0jp 4 begin
174     s := GetStrings(X + m * i, Y + n * i);
175 yamat0jp 19 if s = stEffect then
176 yamat0jp 23 s := FEffectStone;
177 yamat0jp 4 if (s = stNone) or (s = stError) then
178     break
179 yamat0jp 10 else if s = Stone then
180 yamat0jp 4 if i > 1 then
181     begin
182 yamat0jp 15 if (result = false) and (Reverse = true) then
183     SetStrings(X, Y, Stone);
184 yamat0jp 4 result := true;
185     if Reverse = true then
186 yamat0jp 1 begin
187 yamat0jp 4 for j := 1 to i - 1 do
188 yamat0jp 7 begin
189 yamat0jp 15 Form1.PaintBox1.Repaint;
190 yamat0jp 14 if Visible = true then
191     begin
192 yamat0jp 23 FEffectStone := Stone;
193 yamat0jp 14 New(q);
194     q^.Left := X + m * j;
195     q^.Top := Y + n * j;
196     q^.X := 0;
197     q^.Y := 0;
198 yamat0jp 24 FList.Add(q);
199 yamat0jp 14 SetStrings(q^.Left, q^.Top, stEffect);
200 yamat0jp 19 for k := 1 to 100 do
201 yamat0jp 15 begin
202 yamat0jp 19 Sleep(1);
203 yamat0jp 15 Application.ProcessMessages;
204     end;
205 yamat0jp 14 end
206     else
207     SetStrings(X + m * j, Y + n * j, Stone);
208 yamat0jp 7 end;
209 yamat0jp 4 break;
210 yamat0jp 3 end
211     else
212 yamat0jp 1 begin
213 yamat0jp 4 p := false;
214 yamat0jp 3 break;
215 yamat0jp 4 end;
216     end
217     else
218     break
219 yamat0jp 3 else
220 yamat0jp 4 inc(i);
221     end;
222 yamat0jp 3 end;
223    
224     begin
225 yamat0jp 17 result := false;
226 yamat0jp 15 if Visible = true then
227     begin
228     FBool := FActive;
229     FActive := false;
230     end;
231 yamat0jp 14 p := true;
232     if GetStrings(X, Y) = stNone then
233 yamat0jp 9 begin
234 yamat0jp 14 Method(-1, -1);
235     Method(-1, 0);
236     Method(-1, 1);
237     Method(0, -1);
238     Method(0, 1);
239     Method(1, -1);
240     Method(1, 0);
241     Method(1, 1);
242 yamat0jp 9 end;
243 yamat0jp 1 end;
244    
245     procedure TStoneGrid.Clear;
246     var
247     i, j: integer;
248     begin
249 yamat0jp 24 for i := 0 to FList.Count - 1 do
250     Dispose(FList[i]);
251     FList.Clear;
252 yamat0jp 3 for i := 0 to Count - 1 do
253     for j := 0 to Count - 1 do
254     Strings[i, j] := stNone;
255     Strings[3, 3] := stBlack;
256     Strings[4, 4] := stBlack;
257     Strings[4, 3] := stWhite;
258     Strings[3, 4] := stWhite;
259 yamat0jp 7 FTurnNumber := 0;
260     FTurnIndex := 0;
261 yamat0jp 10 FBuffer[0] := FStrings;
262 yamat0jp 1 end;
263    
264 yamat0jp 14 constructor TStoneGrid.Create;
265     begin
266     inherited;
267 yamat0jp 24 FList := TList.Create;
268 yamat0jp 14 end;
269    
270     destructor TStoneGrid.Destroy;
271     var
272     i: integer;
273     begin
274 yamat0jp 24 for i := 0 to FList.Count - 1 do
275     Dispose(FList[i]);
276     FList.Free;
277 yamat0jp 14 inherited;
278     end;
279    
280 yamat0jp 1 function TStoneGrid.GetStrings(X, Y: integer): TStoneType;
281     begin
282 yamat0jp 3 if (X >= 0) and (X < Count) and (Y >= 0) and (Y < Count) then
283 yamat0jp 4 result := FStrings[X, Y]
284 yamat0jp 3 else
285     result := stError;
286 yamat0jp 1 end;
287    
288 yamat0jp 14 procedure TStoneGrid.ImageCount(X, Y: integer);
289     begin
290     FIndex_X := X;
291     FIndex_Y := Y;
292     end;
293    
294     function TStoneGrid.ListExecute: Boolean;
295     var
296     p: ^TEffectData;
297     i: integer;
298     begin
299 yamat0jp 24 if FList.Count = 0 then
300 yamat0jp 14 result := false
301     else
302     begin
303 yamat0jp 24 for i := 0 to FList.Count - 1 do
304 yamat0jp 14 begin
305 yamat0jp 24 p := FList[i];
306 yamat0jp 14 if p^.X < FIndex_X - 1 then
307     p^.X := p^.X + 1
308     else if p^.Y < FIndex_Y - 1 then
309     begin
310     p^.X := 0;
311     p^.Y := p^.Y + 1;
312     end
313     else
314     begin
315 yamat0jp 25 SetStrings(p^.Left, p^.Top, FEffectStone);
316 yamat0jp 14 Dispose(p);
317 yamat0jp 24 FList[i] := nil;
318 yamat0jp 14 end;
319     end;
320 yamat0jp 24 for i := FList.Count - 1 downto 0 do
321     if FList[i] = nil then
322     FList.Delete(i);
323     if FList.Count = 0 then
324 yamat0jp 14 begin
325 yamat0jp 21 if FTerminated = true then
326 yamat0jp 23 FActive := false
327 yamat0jp 21 else
328     FActive := FBool;
329 yamat0jp 14 inc(FTurnIndex);
330     inc(FTurnNumber);
331     FBuffer[FTurnIndex] := FStrings;
332     end;
333     result := true;
334     end;
335     end;
336    
337 yamat0jp 10 function TStoneGrid.NextStone(Stone: TStoneType): TPoint;
338 yamat0jp 1 var
339     i, j, m, n: integer;
340     begin
341 yamat0jp 25 n := 0;
342 yamat0jp 3 for i := 0 to Count - 1 do
343     for j := 0 to Count - 1 do
344 yamat0jp 1 begin
345 yamat0jp 10 m := CalScore(Stone, i, j);
346 yamat0jp 25 if ((n = 0)and(m > 0)) or ((0 < m) and (m < n)) then
347 yamat0jp 1 begin
348 yamat0jp 3 n := m;
349     result := Point(i, j);
350 yamat0jp 1 end;
351     end;
352 yamat0jp 25 if n = 0 then
353 yamat0jp 3 result := Point(-1, -1);
354 yamat0jp 1 end;
355    
356 yamat0jp 14 procedure TStoneGrid.Paint(Canvas: TCanvas);
357     var
358     i: integer;
359     k, m, n: integer;
360     s: TBitmap;
361     p: ^TEffectData;
362     begin
363     m := Form1.Image3.Bitmap.Width;
364     n := Form1.Image3.Bitmap.Height;
365 yamat0jp 15 k := Form1.Size;
366 yamat0jp 24 for i := 0 to FList.Count - 1 do
367 yamat0jp 14 begin
368 yamat0jp 24 p := FList[i];
369 yamat0jp 25 if FEffectStone = stBlack then
370 yamat0jp 14 s := Form1.Image1.Bitmap
371     else
372     s := Form1.Image2.Bitmap;
373     Canvas.DrawBitmap(s, RectF(p^.X * m, p^.Y * n, (p^.X + 1) * m,
374     (p^.Y + 1) * n), RectF(p^.Left * k, p^.Top * k, (p^.Left + 1) * k,
375     (p^.Top + 1) * k), 1);
376     end;
377     end;
378    
379 yamat0jp 9 procedure TStoneGrid.Pause;
380     begin
381 yamat0jp 25 FActive := false;
382 yamat0jp 23 FTerminated := true;
383 yamat0jp 9 end;
384    
385     procedure TStoneGrid.Restart;
386     begin
387 yamat0jp 25 FActive := true;
388     FTurnIndex := FTurnNumber;
389     FTerminated := false;
390 yamat0jp 9 end;
391    
392 yamat0jp 1 procedure TStoneGrid.SetStrings(X, Y: integer; const Value: TStoneType);
393     begin
394 yamat0jp 3 if (X >= 0) and (X < Count) and (Y >= 0) and (Y < Count) then
395     FStrings[X, Y] := Value;
396 yamat0jp 1 end;
397    
398     procedure TStoneGrid.SetTurnNumber(const Value: integer);
399     begin
400     if Value > FTurnIndex then
401 yamat0jp 4 FTurnNumber := FTurnIndex
402 yamat0jp 12 else if Value < 0 then
403     FTurnNumber := 0
404 yamat0jp 3 else
405     FTurnNumber := Value;
406     FStrings := FBuffer[FTurnNumber];
407 yamat0jp 1 end;
408    
409 yamat0jp 9 procedure TStoneGrid.Start;
410     begin
411     Clear;
412 yamat0jp 23 FTerminated := false;
413 yamat0jp 9 FActive := true;
414     end;
415    
416 yamat0jp 1 { TForm1 }
417    
418     procedure TForm1.ChangePlayer;
419     var
420     i, j, m, n: integer;
421     s: string;
422     procedure Main;
423     begin
424     if Index = Player1 then
425 yamat0jp 17 begin
426     Index := Player2;
427     s := '������������';
428     end
429 yamat0jp 3 else
430 yamat0jp 17 begin
431 yamat0jp 3 Index := Player1;
432 yamat0jp 17 s := '������������';
433     end;
434 yamat0jp 1 end;
435     function Execute: Boolean;
436     var
437     i, j: integer;
438     begin
439 yamat0jp 18 for i := 0 to Count - 1 do
440     for j := 0 to Count - 1 do
441     if StoneGrid.CanSetStone(Index.Stone, i, j, false) = true then
442     begin
443     result := true;
444     Exit;
445     end;
446 yamat0jp 3 result := false;
447 yamat0jp 1 end;
448 yamat0jp 3
449 yamat0jp 1 begin
450 yamat0jp 3 Main;
451 yamat0jp 1 if Execute = false then
452     begin
453 yamat0jp 3 Main;
454 yamat0jp 1 if Execute = false then
455     begin
456 yamat0jp 9 StoneGrid.Pause;
457 yamat0jp 3 m := 0;
458     n := 0;
459     for i := 0 to Count - 1 do
460     for j := 0 to Count - 1 do
461     case StoneGrid[i, j] of
462     stBlack:
463     inc(m);
464     stWhite:
465     inc(n);
466 yamat0jp 1 end;
467 yamat0jp 17 Caption := s;
468 yamat0jp 1 if m > n then
469 yamat0jp 4 s := 'Player1 Win:' + #13#10
470 yamat0jp 3 else if m < n then
471 yamat0jp 4 s := 'Player2 Win:' + #13#10
472 yamat0jp 3 else
473     s := 'Draw:' + #13#10;
474 yamat0jp 7 Showmessage(s + '(Player1) ' + IntToStr(m) + #13#10 + '(Player2) ' +
475     IntToStr(n));
476 yamat0jp 17 end
477     else
478     Caption := s;
479     end
480     else
481     Caption := s;
482 yamat0jp 1 end;
483    
484     procedure TForm1.CompStone;
485     var
486     s: TPoint;
487     begin
488 yamat0jp 10 s := StoneGrid.NextStone(Index.Stone);
489     StoneGrid.CanSetStone(Index.Stone, s.X, s.Y, true, true);
490 yamat0jp 5 PaintBox1.Repaint;
491 yamat0jp 7 ChangePlayer;
492 yamat0jp 1 end;
493    
494     procedure TForm1.GameStart;
495     begin
496 yamat0jp 24 Timer1.Enabled:=false;
497 yamat0jp 21 Index := Player1;
498 yamat0jp 9 StoneGrid.Start;
499 yamat0jp 5 PaintBox1.Repaint;
500 yamat0jp 17 Caption := '�������n������';
501 yamat0jp 24 Timer1.Enabled:=true;
502 yamat0jp 1 end;
503    
504 yamat0jp 7 procedure TForm1.MenuItem10Click(Sender: TObject);
505     begin
506 yamat0jp 9 StoneGrid.Restart;
507 yamat0jp 7 end;
508    
509     procedure TForm1.MenuItem11Click(Sender: TObject);
510 yamat0jp 17 var
511     i: integer;
512 yamat0jp 7 begin
513     with StoneGrid do
514 yamat0jp 17 begin
515     i := TurnNumber;
516 yamat0jp 7 if Sender = MenuItem11 then
517     TurnNumber := TurnNumber + 1
518     else
519     TurnNumber := TurnNumber - 1;
520 yamat0jp 17 if (i = TurnNumber) then
521     Exit
522     else
523     Pause;
524     end;
525 yamat0jp 14 PaintBox1.Repaint;
526 yamat0jp 12 ChangePlayer;
527 yamat0jp 7 end;
528    
529 yamat0jp 5 procedure TForm1.MenuItem2Click(Sender: TObject);
530 yamat0jp 1 begin
531 yamat0jp 3 GameStart;
532 yamat0jp 1 end;
533    
534 yamat0jp 5 procedure TForm1.MenuItem4Click(Sender: TObject);
535 yamat0jp 1 begin
536 yamat0jp 5 Close;
537 yamat0jp 1 end;
538    
539 yamat0jp 5 procedure TForm1.MenuItem6Click(Sender: TObject);
540     begin
541 yamat0jp 7 Player1.Auto := MenuItem6.IsChecked;
542     Player2.Auto := MenuItem7.IsChecked;
543 yamat0jp 5 end;
544    
545 yamat0jp 7 procedure TForm1.MenuItem8Click(Sender: TObject);
546     begin
547 yamat0jp 9 StoneGrid.Pause;
548 yamat0jp 7 end;
549    
550 yamat0jp 5 procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
551 yamat0jp 1 var
552     i, j: integer;
553     begin
554 yamat0jp 18 if StoneGrid.Active = false then
555     StoneGrid.Paint(Canvas);
556 yamat0jp 17 for i := 0 to Count - 1 do
557 yamat0jp 1 begin
558 yamat0jp 17 for j := 0 to Count - 1 do
559 yamat0jp 1 begin
560 yamat0jp 3 case StoneGrid.Strings[i, j] of
561     stWhite:
562 yamat0jp 14 Canvas.DrawBitmap(Image4.Bitmap, RectF(0, 0, Image4.Bitmap.Width,
563     Image4.Bitmap.Height), RectF(i * Size, j * Size, (i + 1) * Size,
564 yamat0jp 7 (j + 1) * Size), 1);
565 yamat0jp 3 stBlack:
566 yamat0jp 14 Canvas.DrawBitmap(Image3.Bitmap, RectF(0, 0, Image3.Bitmap.Width,
567     Image3.Bitmap.Height), RectF(i * Size, j * Size, (i + 1) * Size,
568     (j + 1) * Size), 1);
569 yamat0jp 15 stEffect:
570     continue;
571 yamat0jp 14 else
572 yamat0jp 15 Canvas.DrawBitmap(Image5.Bitmap, RectF(0, 0, Image5.Bitmap.Width,
573     Image5.Bitmap.Height), RectF(i * Size, j * Size, (i + 1) * Size,
574     (j + 1) * Size), 1);
575 yamat0jp 1 end;
576 yamat0jp 15 Canvas.DrawLine(PointF(0, j * Size), PointF(Count * Size, j * Size), 1);
577 yamat0jp 1 end;
578 yamat0jp 15 Canvas.DrawLine(PointF(i * Size, 0), PointF(i * Size, Size * Count), 1);
579 yamat0jp 1 end;
580 yamat0jp 17 Canvas.DrawLine(PointF(Count * Size, 0),
581     PointF(Count * Size, Count * Size), 1);
582     Canvas.DrawLine(PointF(0, Count * Size),
583     PointF(Count * Size, Count * Size), 1);
584 yamat0jp 1 end;
585    
586 yamat0jp 7 procedure TForm1.PaintBox1Resize(Sender: TObject);
587     begin
588     Size := Min(ClientWidth, ClientHeight) div Count;
589     end;
590    
591 yamat0jp 24 procedure TForm1.FormActivate(Sender: TObject);
592     begin
593     Timer1.Enabled := true;
594     end;
595    
596 yamat0jp 5 procedure TForm1.FormCreate(Sender: TObject);
597 yamat0jp 1 begin
598 yamat0jp 5 StoneGrid := TStoneGrid.Create;
599 yamat0jp 14 StoneGrid.ImageCount(Form1.Image1.Bitmap.Width div Form1.Image3.Bitmap.Width,
600     Form1.Image1.Bitmap.Height div Form1.Image3.Bitmap.Height);
601 yamat0jp 5 Player1 := TPlayer.Create;
602     Player2 := TPlayer.Create;
603     Player1.Stone := stBlack;
604     Player2.Stone := stWhite;
605     Player2.Auto := true;
606     with PaintBox1.Canvas do
607 yamat0jp 1 begin
608 yamat0jp 5 StrokeDash := TStrokeDash.Solid;
609     Stroke.Color := TAlphaColors.Black;
610     StrokeThickness := 3;
611 yamat0jp 1 end;
612 yamat0jp 7 PaintBox1Resize(Sender);
613 yamat0jp 5 GameStart;
614 yamat0jp 1 end;
615    
616 yamat0jp 24 procedure TForm1.FormDeactivate(Sender: TObject);
617     begin
618     Timer1.Enabled := false;
619     end;
620    
621 yamat0jp 5 procedure TForm1.FormDestroy(Sender: TObject);
622     begin
623     StoneGrid.Free;
624     Player1.Free;
625     Player2.Free;
626     end;
627    
628 yamat0jp 7 procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
629 yamat0jp 5 Shift: TShiftState; X, Y: Single);
630     begin
631 yamat0jp 7 PaintBox1Tap(Sender, PointF(X, Y));
632 yamat0jp 5 end;
633    
634 yamat0jp 1 procedure TForm1.Timer1Timer(Sender: TObject);
635     begin
636 yamat0jp 10 if (StoneGrid.Active = true) and (Index.Auto = true) then
637 yamat0jp 3 CompStone;
638 yamat0jp 1 end;
639    
640 yamat0jp 14 procedure TForm1.Timer2Timer(Sender: TObject);
641     begin
642 yamat0jp 23 if (StoneGrid.Active = false) and (StoneGrid.ListExecute = true) then
643 yamat0jp 14 PaintBox1.Repaint;
644     end;
645    
646 yamat0jp 1 procedure TForm1.FormResize(Sender: TObject);
647     begin
648 yamat0jp 3 Size := Min(ClientWidth, ClientHeight) div Count;
649 yamat0jp 5 PaintTo(Canvas);
650 yamat0jp 1 end;
651    
652 yamat0jp 7 procedure TForm1.PaintBox1Tap(Sender: TObject; const Point: TPointF);
653 yamat0jp 1 begin
654 yamat0jp 11 if Index.Auto = false then
655     begin
656 yamat0jp 10 MenuItem10Click(Sender);
657     if StoneGrid.CanSetStone(Index.Stone, Floor(Point.X / Size),
658 yamat0jp 7 Floor(Point.Y / Size), true, true) = true then
659 yamat0jp 5 begin
660     PaintBox1.Repaint;
661 yamat0jp 7 ChangePlayer;
662 yamat0jp 5 end;
663     end;
664 yamat0jp 1 end;
665    
666     end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26