{ Private 宣言 }\r
List: array [0 .. 7] of TLine;\r
player: Boolean;\r
- procedure Check;\r
+ function Check(const Bool: Boolean = true): Boolean;\r
procedure Start;\r
+ function Hantei: integer;\r
+ procedure AI;\r
public\r
{ Public 宣言 }\r
end;\r
\r
{$R *.dfm}\r
\r
-procedure TForm1.Check;\r
+procedure TForm1.AI;\r
var\r
- i: Integer;\r
+ i: integer;\r
+ j: integer;\r
+ m, n: integer;\r
+begin\r
+ j := 0;\r
+ n := 0;\r
+ for i := 1 to 9 do\r
+ with Self.FindComponent(Format('SpeedButton%d', [i])) as TSpeedButton do\r
+ begin\r
+ if Tag = Ord(KARA) then\r
+ begin\r
+ if j = 0 then\r
+ j := i;\r
+ Tag := Ord(PEKE);\r
+ if Check(false) = true then\r
+ begin\r
+ Caption := '✖';\r
+ Showmessage('LOSE');\r
+ Start;\r
+ Exit;\r
+ end;\r
+ m := Hantei;\r
+ if m > n then\r
+ begin\r
+ n := m;\r
+ j := i;\r
+ end;\r
+ Tag := Ord(KARA);\r
+ end;\r
+ end;\r
+ with Self.FindComponent(Format('SpeedButton%d', [j])) as TSpeedButton do\r
+ begin\r
+ Tag := Ord(PEKE);\r
+ Caption := '✖';\r
+ Check;\r
+ end;\r
+end;\r
+\r
+function TForm1.Check(const Bool: Boolean): Boolean;\r
+var\r
+ i: integer;\r
s: string;\r
- j: Integer;\r
+ j: integer;\r
function local(A: TState): Boolean;\r
var\r
- j: Integer;\r
+ j: integer;\r
begin\r
result := true;\r
for j := 0 to 2 do\r
\r
begin\r
s := 'DRAW';\r
+ result := false;\r
for i := 0 to High(List) do\r
for j := 0 to 2 do\r
if List[i][j].Tag = Ord(KARA) then\r
s := 'WIN';\r
for i := 0 to High(List) do\r
if local(PEKE) = true then\r
+ begin\r
s := 'LOSE';\r
- if s <> '' then\r
+ result := true;\r
+ end;\r
+ if (s <> '') and (Bool = true) then\r
begin\r
+ player := true;\r
Showmessage(s);\r
- Start;\r
end;\r
end;\r
\r
procedure TForm1.FormCreate(Sender: TObject);\r
var\r
- i: Integer;\r
- j: Integer;\r
- k: Integer;\r
+ i: integer;\r
+ j: integer;\r
+ k: integer;\r
begin\r
i := 0;\r
k := 1;\r
Start;\r
end;\r
\r
+function TForm1.Hantei: integer;\r
+var\r
+ i: integer;\r
+ j: integer;\r
+ k: integer;\r
+ x: Boolean;\r
+begin\r
+ result := 0;\r
+ for i := 0 to High(List) do\r
+ begin\r
+ k := 0;\r
+ x := false;\r
+ for j := 0 to 2 do\r
+ case List[i][j].Tag of\r
+ Ord(PEKE):\r
+ inc(k);\r
+ Ord(MARU), Ord(KARA):\r
+ x := true;\r
+ end;\r
+ if x = true then\r
+ inc(result, k);\r
+ end;\r
+end;\r
+\r
procedure TForm1.SpeedButton10Click(Sender: TObject);\r
begin\r
Start;\r
begin\r
if Tag = Ord(KARA) then\r
begin\r
- if player = true then\r
- begin\r
- Tag := Ord(MARU);\r
- Caption := '〇';\r
- end\r
- else\r
- begin\r
- Tag := Ord(PEKE);\r
- Caption := '✖';\r
- end;\r
- Check;\r
+ Tag := Ord(MARU);\r
+ Caption := '〇';\r
player := false;\r
+ Check(true);\r
end;\r
end;\r
end;\r
\r
procedure TForm1.Start;\r
var\r
- i: Integer;\r
- j: Integer;\r
+ i: integer;\r
+ j: integer;\r
begin\r
for i := 0 to High(List) do\r
for j := 0 to 2 do\r
\r
procedure TForm1.Timer1Timer(Sender: TObject);\r
var\r
- s: TList;\r
- i: Integer;\r
- j: Integer;\r
- k, m: Integer;\r
+ i: integer;\r
+ j: integer;\r
+ k: integer;\r
+ x: Boolean;\r
+ procedure click;\r
+ var\r
+ m: integer;\r
+ begin\r
+ for m := 0 to 2 do\r
+ with List[i][m] do\r
+ begin\r
+ if Tag = Ord(KARA) then\r
+ begin\r
+ Caption := '✖';\r
+ Tag := Ord(PEKE);\r
+ x := true;\r
+ Showmessage('LOSE');\r
+ Exit;\r
+ end;\r
+ end\r
+ end;\r
+\r
begin\r
if player = false then\r
begin\r
+ player := true;\r
+ x := false;\r
for i := 0 to High(List) do\r
begin\r
k := 0;\r
for j := 0 to 2 do\r
- case List[i][j].Tag of\r
- Ord(MARU):\r
- dec(k);\r
- Ord(PEKE):\r
- inc(k);\r
- end;\r
- case k of\r
- - 2, 2:\r
- begin\r
- for j := 0 to 2 do\r
- with List[i][j] do\r
- begin\r
- if Tag = Ord(KARA) then\r
- begin\r
- Caption := '✖';\r
- Tag := Ord(PEKE);\r
- Check;\r
- end;\r
- end;\r
- break;\r
- end;\r
- else\r
-\r
- end;\r
+ if List[i][j].Tag = Ord(PEKE) then\r
+ inc(k);\r
+ if k = 2 then\r
+ click;\r
+ if x = true then\r
+ Exit;\r
end;\r
- player := true;\r
+ AI;\r
end;\r
end;\r
\r