aboutsummaryrefslogtreecommitdiff
path: root/morpion_rec/AmaneSuzuha/amane.ml
blob: f96859babeeed0f151558d479e705a8a16bd9720 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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()