From 053f2090ebccd14f875b806c578e0f5467d68f5a Mon Sep 17 00:00:00 2001 From: Alex AUVOLAT Date: Mon, 10 Nov 2014 11:47:53 +0100 Subject: Add Amane Suzuha, a minimal IA. --- morpion_rec/AmaneSuzuha/_tags | 2 ++ morpion_rec/AmaneSuzuha/amane.ml | 41 ++++++++++++++++++++++++++++++++++ morpion_rec/AmaneSuzuha/lib | 1 + morpion_rec/FeirisuNyanNyan/feirisu.ml | 4 ++-- 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 morpion_rec/AmaneSuzuha/_tags create mode 100644 morpion_rec/AmaneSuzuha/amane.ml create mode 120000 morpion_rec/AmaneSuzuha/lib diff --git a/morpion_rec/AmaneSuzuha/_tags b/morpion_rec/AmaneSuzuha/_tags new file mode 100644 index 0000000..c653205 --- /dev/null +++ b/morpion_rec/AmaneSuzuha/_tags @@ -0,0 +1,2 @@ +"lib": include +true: use_unix, use_graphics diff --git a/morpion_rec/AmaneSuzuha/amane.ml b/morpion_rec/AmaneSuzuha/amane.ml new file mode 100644 index 0000000..f96859b --- /dev/null +++ b/morpion_rec/AmaneSuzuha/amane.ml @@ -0,0 +1,41 @@ + +module Amane : Player.IA = struct + + module G = Morpion_rec.G + open Core + + let take_random cc = + List.nth cc + (Random.int (List.length cc)) + + let won_game g = match G.s g with Won _ -> true | _ -> false + + let play g = + let cc = G.possibilities g in + match List.partition + (fun act -> won_game (G.play g act)) + cc + with + | win::_, _ -> win + | [], other -> + let o' = List.filter + (fun act -> + let g' = G.play g act in + let adv_win = + G.possibilities g' + |> List.map (G.play g') + |> List.exists won_game + in not adv_win) + other + in match o', other with + | x::_, _ -> x + | _, a::_ -> a + | _ -> assert false + +end + +module P = Player.P(Amane) + +let () = + Random.self_init(); + P.run() diff --git a/morpion_rec/AmaneSuzuha/lib b/morpion_rec/AmaneSuzuha/lib new file mode 120000 index 0000000..e834a2a --- /dev/null +++ b/morpion_rec/AmaneSuzuha/lib @@ -0,0 +1 @@ +../../judge \ No newline at end of file diff --git a/morpion_rec/FeirisuNyanNyan/feirisu.ml b/morpion_rec/FeirisuNyanNyan/feirisu.ml index be6cc63..e15e1d1 100644 --- a/morpion_rec/FeirisuNyanNyan/feirisu.ml +++ b/morpion_rec/FeirisuNyanNyan/feirisu.ml @@ -1,5 +1,5 @@ -module Mayushii : Player.IA = struct +module Feirisu : Player.IA = struct module G = Morpion_rec.G @@ -10,7 +10,7 @@ module Mayushii : Player.IA = struct end -module P = Player.P(Mayushii) +module P = Player.P(Feirisu) let () = Random.self_init(); -- cgit v1.2.3