open logic open System.IO open System.Net #nowarn "25" let start_game server = let request = WebRequest.Create(sprintf "%s/start" server) use response = request.GetResponse() use reader = new StreamReader(response.GetResponseStream()) let id = int <| reader.ReadLine() let board = Array.zeroCreate 400 for i=0 to 19 do reader.ReadLine() |> String.iteri (fun j c -> board.[20*i+j] <- c) let [|col; row; dir|] = reader.ReadLine().Split(' ') let pos = 80 * (int row - 1) + 4 * (int col - 1) + List.findIndex ((=) dir) ["N"; "R"; "D"; "L"] let offer = reader.ReadLine() id, board, pos, offer let next_round server id chosen = let request = WebRequest.Create(sprintf "%s/kolo?id=%d&pohyby=%s" server id chosen) use response = request.GetResponse() use reader = new StreamReader(response.GetResponseStream()) match reader.ReadLine() with | ok when ok = string id -> for i=1 to 20 do ignore <| reader.ReadLine() let [|col; row; dir|] = reader.ReadLine().Split(' ') let pos = 80 * (int row - 1) + 4 * (int col - 1) + List.findIndex ((=) dir) ["N"; "R"; "D"; "L"] let offer = reader.ReadLine() Some (pos, offer) | err -> printfn "%s" err None let set_server_param server name value = let request = WebRequest.Create(sprintf "%s/nastav?%s=%d" server name value) use response = request.GetResponse() use reader = new StreamReader(response.GetResponseStream()) let resp = reader.ReadToEnd() () [] let main args = let args, seed_range = if args.Length >= 3 && args.[0] = "-s" then args.[3..], Some (int args.[1], int args.[2]) else args, None let server = "http://" + if args.Length = 0 then "localhost:8000" else args.[0] if Option.isSome seed_range then set_server_param server "seed" (seed_range |> Option.get |> fst) let id, board, pos, offer = start_game server let ui = logic.robot board let rec play id pos offer = let chosen = ui pos offer match next_round server id chosen with | Some (pos, offer) -> play id pos offer | None -> () play id pos offer match seed_range with | Some (s1, s2) -> for i = s1+1 to s2 do set_server_param server "seed" i let id, board', pos', offer = start_game server if board <> board' || pos <> pos' then failwith "Server settings changed." play id pos offer | None -> () 0