diff options
Diffstat (limited to 'morpion_rec/AmaneSuzuha')
-rw-r--r-- | morpion_rec/AmaneSuzuha/_tags | 2 | ||||
-rw-r--r-- | morpion_rec/AmaneSuzuha/amane.ml | 41 | ||||
l--------- | morpion_rec/AmaneSuzuha/lib | 1 |
3 files changed, 44 insertions, 0 deletions
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 |