OSDN Git Service

you can game
[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(PEKE):\r
187           inc(k);\r
188         Ord(MARU), Ord(KARA):\r
189           x := true;\r
190       end;\r
191     if x = true then\r
192       inc(result, k);\r
193   end;\r
194 end;\r
195 \r
196 procedure TForm1.SpeedButton10Click(Sender: TObject);\r
197 begin\r
198   Start;\r
199 end;\r
200 \r
201 procedure TForm1.SpeedButton1Click(Sender: TObject);\r
202 begin\r
203   if player = false then\r
204     Exit;\r
205   with Sender as TSpeedButton do\r
206   begin\r
207     if Tag = Ord(KARA) then\r
208     begin\r
209       Tag := Ord(MARU);\r
210       Caption := '〇';\r
211       player := false;\r
212       Check(true);\r
213     end;\r
214   end;\r
215 end;\r
216 \r
217 procedure TForm1.Start;\r
218 var\r
219   i: integer;\r
220   j: integer;\r
221 begin\r
222   for i := 0 to High(List) do\r
223     for j := 0 to 2 do\r
224       with List[i][j] do\r
225       begin\r
226         Caption := '';\r
227         Tag := Ord(KARA);\r
228       end;\r
229   player := RadioButton1.Checked;\r
230 end;\r
231 \r
232 procedure TForm1.Timer1Timer(Sender: TObject);\r
233 var\r
234   i: integer;\r
235   j: integer;\r
236   k: integer;\r
237   x: Boolean;\r
238   procedure click;\r
239   var\r
240     m: integer;\r
241   begin\r
242     for m := 0 to 2 do\r
243       with List[i][m] do\r
244       begin\r
245         if Tag = Ord(KARA) then\r
246         begin\r
247           Caption := '✖';\r
248           Tag := Ord(PEKE);\r
249           x := true;\r
250           Showmessage('LOSE');\r
251           Exit;\r
252         end;\r
253       end\r
254   end;\r
255 \r
256 begin\r
257   if player = false then\r
258   begin\r
259     player := true;\r
260     x := false;\r
261     for i := 0 to High(List) do\r
262     begin\r
263       k := 0;\r
264       for j := 0 to 2 do\r
265         if List[i][j].Tag = Ord(PEKE) then\r
266           inc(k);\r
267       if k = 2 then\r
268         click;\r
269       if x = true then\r
270         Exit;\r
271     end;\r
272     AI;\r
273   end;\r
274 end;\r
275 \r
276 end.\r