aboutsummaryrefslogblamecommitdiff
path: root/morpion_rec/AmaneSuzuha/amane.ml
blob: 7ac321f031b002cbc1f1184d3c1c7dfa9eddfb44 (plain) (tree)





















                                                              







                                     
             




                                







                          
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 ->
          try
            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
          with _ -> true)
        other
      in
      if List.length o' > 0 then
        take_random o'
      else
        take_random other

end

module P = Player.P(Amane)

let () =
  Random.self_init();
  P.run()