OSDN Git Service

you can game
authorfuke masasi <yamat0jp@yahoo.co.jp>
Thu, 13 Apr 2017 09:41:38 +0000 (18:41 +0900)
committerfuke masasi <yamat0jp@yahoo.co.jp>
Thu, 13 Apr 2017 09:41:38 +0000 (18:41 +0900)
 but
AI is week

Unit1.dfm
Unit1.pas

index 8450193..f3497c0 100644 (file)
--- a/Unit1.dfm
+++ b/Unit1.dfm
@@ -1,6 +1,6 @@
 object Form1: TForm1\r
-  Left = 0\r
-  Top = 0\r
+  Left = 69\r
+  Top = 154\r
   Caption = 'Form1'\r
   ClientHeight = 392\r
   ClientWidth = 635\r
@@ -11,6 +11,7 @@ object Form1: TForm1
   Font.Name = 'Tahoma'\r
   Font.Style = []\r
   OldCreateOrder = False\r
+  Position = poDesigned\r
   OnCreate = FormCreate\r
   PixelsPerInch = 96\r
   TextHeight = 13\r
@@ -122,6 +123,7 @@ object Form1: TForm1
     Checked = True\r
     TabOrder = 0\r
     TabStop = True\r
+    OnClick = SpeedButton10Click\r
   end\r
   object RadioButton2: TRadioButton\r
     Left = 73\r
@@ -130,6 +132,7 @@ object Form1: TForm1
     Height = 17\r
     Caption = 'RadioButton2'\r
     TabOrder = 1\r
+    OnClick = SpeedButton10Click\r
   end\r
   object Timer1: TTimer\r
     Interval = 100\r
index 12a4891..096e64b 100644 (file)
--- a/Unit1.pas
+++ b/Unit1.pas
@@ -38,8 +38,10 @@ type
     { 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
@@ -51,14 +53,54 @@ implementation
 \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
@@ -68,6 +110,7 @@ var
 \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
@@ -77,19 +120,22 @@ begin
       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
@@ -123,6 +169,30 @@ begin
   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
@@ -136,26 +206,18 @@ begin
   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
@@ -169,43 +231,45 @@ end;
 \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