diff --git a/again b/again index 2d6cfc6..4b336f1 100755 Binary files a/again and b/again differ diff --git a/again.cmi b/again.cmi index 130c618..0f343a2 100644 Binary files a/again.cmi and b/again.cmi differ diff --git a/again.cmx b/again.cmx index 4dea3a3..6389832 100644 Binary files a/again.cmx and b/again.cmx differ diff --git a/again.ml b/again.ml index c943af1..f163a04 100644 --- a/again.ml +++ b/again.ml @@ -986,7 +986,7 @@ let path_seek (gd : game_data) (dgs : danger_map) (stime : float) (x0 : int) (y0 Hashtbl.add visited (x, y, polar) 1 ; if ct <= stime +. interval *. (float_of_int max_dist) && - not (is_dead_all dgs x y ct interval false) && + (*not (is_dead_all dgs x y ct interval false) && *) (* peace is not an option *) not (Array.fold_left (fun acc (b : bomb) -> acc || (b.xy.x = x && b.xy.y = y)) false gd.bombs) && polar <= 4 then begin @@ -1067,6 +1067,7 @@ let direction_after_trap (gd : game_data) (dgs : danger_map) (x0 : int) (y0 : in let interval = Float.pow (0.9) (float_of_int gd.players.(gd.player_id).nspeed) in let ok = ref false in let result = bfs_for_crate ~return_ok:ok gd dgs x0 y0 (gd.dt -. interval *. !remaining_dash) false false false 0 true 80 in + if logg then Printf.fprintf stderr "trapping result : %d\n" (int_of_bool !ok) ; if !ok then result else @@ -1080,8 +1081,13 @@ let remove_bombs (dgs : danger_map) (lst : (int * int, float) Hashtbl.t list) = aux t in aux lst ;; +let closest_boom (dgs : danger_map) (x : int) (y : int) = + if logg then Printf.fprintf stderr "%d %d\n" x y ; + List.fold_left min 999999. dgs.explosionTimes.(x).(y) ;; + let seek_player (gd : game_data) (dgs : danger_map) = (* returns whether or not it found a target, and prints if found *) + (* note : if this triggers then someone WILL die *) let pid = gd.player_id in let cxi = ref gd.players.(pid).xy.x and cyi = ref gd.players.(pid).xy.y in @@ -1103,7 +1109,7 @@ let seek_player (gd : game_data) (dgs : danger_map) = if logg then Printf.fprintf stderr "Can trap\n" ; while not !has_trapped do for pl = 0 to Array.length gd.players -1 do - if not !break && gd.players.(pl).id <> -1 && pl <> pid then begin + if not !break && (gd.players.(pl).id <> -1 && pl <> pid) && closest_boom dgs gd.players.(pl).xy.x gd.players.(pl).xy.y <= 3. +. gd.dt then begin let destx = gd.players.(pl).xy.x and desty = gd.players.(pl).xy.y in let foundpath = ref false in @@ -1128,14 +1134,6 @@ let seek_player (gd : game_data) (dgs : danger_map) = cyi := !cyi + snd order.(directn) ; break := true ; end - else if abs (destx - !cxi) + abs (desty - !cyi) <= gd.players.(pid).bomb_radius && gd.players.(pid).bomb_to_place > 0 then begin - if logg then Printf.fprintf stderr " Bombing\n" ; - print_ret "again_dash.sav" directn 1 print_escape ; - simulated_bombs := (simulate_bomb_deconstruct gd dgs gd.players.(pid).xy.x gd.players.(pid).xy.y gd.players.(pid).bomb_radius (gd.dt +. 5.5))::(!simulated_bombs) ; - cxi := !cxi + fst order.(directn) ; - cyi := !cyi + snd order.(directn) ; - break := true ; - end else begin if logg then Printf.fprintf stderr " Moving\n" ; print_ret "again_dash.sav" directn 0 print_escape ; @@ -1164,7 +1162,7 @@ let seek_player (gd : game_data) (dgs : danger_map) = b ;; let read_queue (filename : string) = - let strings = Array.make 45 "e" in + let strings = Array.make 100 "e" in let id = ref 0 in let ptr = open_in filename in try @@ -1404,7 +1402,6 @@ let set_cd (nspeed : int) (filename : string) = (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) - let __start = Unix.gettimeofday() ;; let game_map = parse_input "entrees.txt" ;; if debug_all then print_game_data game_map ;; @@ -1453,7 +1450,7 @@ else begin if logg then Printf.fprintf stderr "[player %d] %d %d (at time %f - with %d dash potential)\n" game_map.player_id !direction !action game_map.dt (int_of_float !remaining_dash); end else begin - cd := (Float.pow 0.9 (float_of_int game_map.players.(game_map.player_id).nspeed)) *. 1.9 ; + cd := (Float.pow 0.9 (float_of_int game_map.players.(game_map.player_id).nspeed)) *. 2.5 ; ignore (read_queue "again_dash.sav") end end;; diff --git a/again.o b/again.o index d4bd298..ea31d32 100644 Binary files a/again.o and b/again.o differ diff --git a/entrees.txt b/entrees.txt index 3187858..147559a 100644 --- a/entrees.txt +++ b/entrees.txt @@ -1,27 +1,27 @@ -92.0 -1 +140.0 +2 13 21 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 3 3 3 3 3 0 2 2 2 2 2 2 2 2 0 5 5 5 5 1 -1 3 1 3 1 0 1 2 1 2 1 2 1 2 1 0 1 5 1 5 1 -1 3 3 3 3 0 2 2 2 2 2 2 2 2 0 4 4 4 5 5 1 -1 3 1 3 1 2 1 2 1 2 1 2 1 2 1 0 1 5 1 5 1 -1 3 3 3 0 2 2 2 2 2 2 2 2 2 2 0 5 5 5 5 1 -1 6 1 3 1 0 1 2 1 2 1 2 1 2 1 2 1 5 1 5 1 -1 3 3 3 3 3 0 2 2 2 2 2 2 2 2 0 5 5 5 5 1 -1 6 1 3 1 3 1 2 1 2 1 2 1 2 1 0 1 5 1 4 1 -1 6 6 3 3 3 3 0 2 2 2 2 2 2 0 5 5 5 4 4 1 -1 6 1 6 1 3 1 2 1 2 1 2 1 2 1 5 1 4 1 4 1 -1 6 3 3 3 3 0 2 2 2 2 2 2 2 0 5 5 4 4 4 1 +1 6 3 3 3 3 3 3 0 2 2 2 0 5 5 5 5 5 5 5 1 +1 6 1 3 1 0 1 2 1 2 1 2 1 2 1 5 1 5 1 5 1 +1 6 6 3 6 6 6 0 2 2 2 2 0 5 5 5 5 5 5 5 1 +1 6 1 3 1 6 1 0 1 2 1 2 1 2 1 5 1 5 1 5 1 +1 3 6 6 6 6 6 6 0 2 2 2 2 0 0 5 5 5 5 5 1 +1 6 1 3 1 6 1 0 1 2 1 2 1 5 1 5 1 5 1 4 1 +1 6 6 6 6 6 6 6 6 6 0 0 0 5 5 5 4 4 4 4 1 +1 6 1 3 1 6 1 0 1 2 1 5 1 5 1 4 1 4 1 4 1 +1 6 6 6 6 6 6 6 6 5 5 5 5 5 5 4 4 4 4 4 1 +1 6 1 6 1 6 1 0 1 2 1 5 1 5 1 4 1 4 1 4 1 +1 6 6 6 6 6 6 6 0 2 0 5 5 5 5 4 4 4 4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -3 -3 17 1 92.5 -11 6 3 92.50000000000007 -9 5 3 94.93000000000008 -3 -7 6 0 2 0 3 1 1 -1 15 1 0 0 1 0 0 -3 16 2 1 2 1 0 0 +1 +11 5 5 140.17600000000024 2 -11 14 3 -9 14 0 +10 11 2 0 4 2 2 2 +7 3 3 3 1 5 1 1 +5 +1 8 4 +1 12 2 +3 7 3 +3 12 2 +2 5 3 diff --git a/sortie.txt b/sortie.txt index 7cc0f37..4a3b60a 100644 --- a/sortie.txt +++ b/sortie.txt @@ -1 +1 @@ -4 0 \ No newline at end of file +0 0 \ No newline at end of file