OSDN Git Service

check inserted
[marupeke/marupeke.git] / Unit1.pas
1 unit Unit1;\r
2 \r
3 interface\r
4 \r
5 uses\r
6   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,\r
7   System.Classes, Vcl.Graphics,\r
8   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Buttons, Vcl.StdCtrls;\r
9 \r
10 type\r
11   TState = (MARU, PEKE, KARA);\r
12 \r
13   TLine = array [0 .. 2] of TSpeedButton;\r
14 \r
15   TForm1 = class(TForm)\r
16     SpeedButton1: TSpeedButton;\r
17     SpeedButton2: TSpeedButton;\r
18     SpeedButton3: TSpeedButton;\r
19     Bevel1: TBevel;\r
20     SpeedButton4: TSpeedButton;\r
21     SpeedButton5: TSpeedButton;\r
22     SpeedButton6: TSpeedButton;\r
23     SpeedButton7: TSpeedButton;\r
24     SpeedButton8: TSpeedButton;\r
25     SpeedButton9: TSpeedButton;\r
26     Bevel2: TBevel;\r
27     Bevel3: TBevel;\r
28     Bevel4: TBevel;\r
29     SpeedButton10: TSpeedButton;\r
30     Timer1: TTimer;\r
31     RadioButton1: TRadioButton;\r
32     RadioButton2: TRadioButton;\r
33     procedure FormCreate(Sender: TObject);\r
34     procedure SpeedButton1Click(Sender: TObject);\r
35     procedure SpeedButton10Click(Sender: TObject);\r
36     procedure Timer1Timer(Sender: TObject);\r
37   private\r
38     { Private 宣言 }\r
39     List: array [0 .. 7] of TLine;\r
40     player: Boolean;\r
41     function Check(const Bool: Boolean = true): Boolean;\r
42     procedure Start;\r
43     function Hantei: integer;\r
44     procedure AI;\r
45   public\r
46     { Public 宣言 }\r
47   end;\r
48 \r
49 var\r
50   Form1: TForm1;\r
51 \r
52 implementation\r
53 \r
54 {$R *.dfm}\r
55 \r
56 procedure TForm1.AI;\r
57 var\r
58   i: integer;\r
59   j: integer;\r
60   m, n: integer;\r
61 begin\r
62   j := 0;\r
63   n := 0;\r
64   for i := 1 to 9 do\r
65     with Self.FindComponent(Format('SpeedButton%d', [i])) as TSpeedButton do\r
66     begin\r
67       if Tag = Ord(KARA) then\r
68       begin\r
69         if j = 0 then\r
70           j := i;\r
71         Tag := Ord(PEKE);\r
72         if Check(false) = true then\r
73         begin\r
74           Caption := '✖';\r
75           Showmessage('LOSE');\r
76           Start;\r
77           Exit;\r
78         end;\r
79         m := Hantei;\r
80         if m > n then\r
81         begin\r
82           n := m;\r
83           j := i;\r
84         end;\r
85         Tag := Ord(KARA);\r
86       end;\r
87     end;\r
88   with Self.FindComponent(Format('SpeedButton%d', [j])) as TSpeedButton do\r
89   begin\r
90     Tag := Ord(PEKE);\r
91     Caption := '✖';\r
92     Check;\r
93   end;\r
94 end;\r
95 \r
96 function TForm1.Check(const Bool: Boolean): Boolean;\r
97 var\r
98   i: integer;\r
99   s: string;\r
100   j: integer;\r
101   function local(A: TState): Boolean;\r
102   var\r
103     j: integer;\r
104   begin\r
105     result := true;\r
106     for j := 0 to 2 do\r
107       if List[i][j].Tag <> Ord(A) then\r
108         result := false;\r
109   end;\r
110 \r
111 begin\r
112   s := 'DRAW';\r
113   result := false;\r
114   for i := 0 to High(List) do\r
115     for j := 0 to 2 do\r
116       if List[i][j].Tag = Ord(KARA) then\r
117         s := '';\r
118   for i := 0 to High(List) do\r
119     if local(MARU) = true then\r
120       s := 'WIN';\r
121   for i := 0 to High(List) do\r
122     if local(PEKE) = true then\r
123     begin\r
124       s := 'LOSE';\r
125       result := true;\r
126     end;\r
127   if (s <> '') and (Bool = true) then\r
128   begin\r
129     player := true;\r
130     Showmessage(s);\r
131   end;\r
132 end;\r
133 \r
134 procedure TForm1.FormCreate(Sender: TObject);\r
135 var\r
136   i: integer;\r
137   j: integer;\r
138   k: integer;\r
139 begin\r
140   i := 0;\r
141   k := 1;\r
142   while i <= 2 do\r
143   begin\r
144     for j := 0 to 2 do\r
145     begin\r
146       List[i][j] := Self.FindComponent(Format('SpeedButton%d', [k]))\r
147         as TSpeedButton;\r
148       inc(k);\r
149     end;\r
150     inc(i);\r
151   end;\r
152   k := 1;\r
153   while i <= 5 do\r
154   begin\r
155     for j := 0 to 2 do\r
156     begin\r
157       List[i][j] := Self.FindComponent(Format('SpeedButton%d', [k + j * 3]))\r
158         as TSpeedButton;\r
159     end;\r
160     inc(i);\r
161     inc(k);\r
162   end;\r
163   List[6][0] := SpeedButton1;\r
164   List[6][1] := SpeedButton5;\r
165   List[6][2] := SpeedButton9;\r
166   List[7][0] := SpeedButton7;\r
167   List[7][1] := SpeedButton5;\r
168   List[7][2] := SpeedButton3;\r
169   Start;\r
170 end;\r
171 \r
172 function TForm1.Hantei: integer;\r
173 var\r
174   i: integer;\r
175   j: integer;\r
176   k: integer;\r
177   x: Boolean;\r
178 begin\r
179   result := 0;\r
180   for i := 0 to High(List) do\r
181   begin\r
182     k := 0;\r
183     x := false;\r
184     for j := 0 to 2 do\r
185       case List[i][j].Tag of\r
186         Ord(MARU):\r
187           begin\r
188             x := false;\r
189             break;\r
190           end;\r
191         Ord(PEKE):\r
192           inc(k);\r
193         Ord(KARA):\r
194           x := true;\r
195       end;\r
196     if x = true then\r
197       inc(result, k);\r
198   end;\r
199 end;\r
200 \r
201 procedure TForm1.SpeedButton10Click(Sender: TObject);\r
202 begin\r
203   Start;\r
204 end;\r
205 \r
206 procedure TForm1.SpeedButton1Click(Sender: TObject);\r
207 begin\r
208   if player = false then\r
209     Exit;\r
210   with Sender as TSpeedButton do\r
211   begin\r
212     if Tag = Ord(KARA) then\r
213     begin\r
214       Tag := Ord(MARU);\r
215       Caption := '〇';\r
216       player := false;\r
217       Check(true);\r
218     end;\r
219   end;\r
220 end;\r
221 \r
222 procedure TForm1.Start;\r
223 var\r
224   i: integer;\r
225   j: integer;\r
226 begin\r
227   for i := 0 to High(List) do\r
228     for j := 0 to 2 do\r
229       with List[i][j] do\r
230       begin\r
231         Caption := '';\r
232         Tag := Ord(KARA);\r
233       end;\r
234   player := RadioButton1.Checked;\r
235 end;\r
236 \r
237 procedure TForm1.Timer1Timer(Sender: TObject);\r
238 var\r
239   i: integer;\r
240   x: Boolean;\r
241   procedure click;\r
242   var\r
243     m: integer;\r
244     y: Boolean;\r
245   begin\r
246     y := false;\r
247     for m := 0 to 2 do\r
248       with List[i][m] do\r
249         case Tag of\r
250           Ord(KARA):\r
251             begin\r
252               Caption := '✖';\r
253               Tag := Ord(PEKE);\r
254               x := true;\r
255             end;\r
256           Ord(PEKE):\r
257             y := true;\r
258         end;\r
259     if (x = true) and (y = true) then\r
260       Showmessage('LOSE');\r
261   end;\r
262   procedure test(A: Boolean);\r
263   var\r
264     j, k, m: integer;\r
265   begin\r
266     k := 0;\r
267     if A = true then\r
268       m := Ord(MARU)\r
269     else\r
270       m := Ord(PEKE);\r
271     for j := 0 to 2 do\r
272       if List[i][j].Tag = m then\r
273         inc(k);\r
274     if k = 2 then\r
275       click;\r
276   end;\r
277 \r
278 begin\r
279   if player = false then\r
280   begin\r
281     player := true;\r
282     x := false;\r
283     for i := 0 to High(List) do\r
284     begin\r
285       test(false);\r
286       if x = true then\r
287         Exit\r
288       else\r
289       begin\r
290         test(true);\r
291         if x = true then\r
292         begin\r
293           Check;\r
294           Exit;\r
295         end;\r
296       end;\r
297     end;\r
298     AI;\r
299   end;\r
300 end;\r
301 \r
302 end.\r