reworked seek_player to guarantee kills

This commit is contained in:
Alexandre 2025-01-07 21:49:23 +01:00
parent fdc5c1ca38
commit ea743f6c17
7 changed files with 34 additions and 37 deletions

BIN
again

Binary file not shown.

BIN
again.cmi

Binary file not shown.

BIN
again.cmx

Binary file not shown.

View File

@ -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 ; Hashtbl.add visited (x, y, polar) 1 ;
if if
ct <= stime +. interval *. (float_of_int max_dist) && 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) && not (Array.fold_left (fun acc (b : bomb) -> acc || (b.xy.x = x && b.xy.y = y)) false gd.bombs) &&
polar <= 4 polar <= 4
then begin 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 interval = Float.pow (0.9) (float_of_int gd.players.(gd.player_id).nspeed) in
let ok = ref false 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 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 if !ok then
result result
else else
@ -1080,8 +1081,13 @@ let remove_bombs (dgs : danger_map) (lst : (int * int, float) Hashtbl.t list) =
aux t in aux t in
aux lst ;; 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) = let seek_player (gd : game_data) (dgs : danger_map) =
(* returns whether or not it found a target, and prints if found *) (* 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 pid = gd.player_id in
let cxi = ref gd.players.(pid).xy.x let cxi = ref gd.players.(pid).xy.x
and cyi = ref gd.players.(pid).xy.y in 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" ; if logg then Printf.fprintf stderr "Can trap\n" ;
while not !has_trapped do while not !has_trapped do
for pl = 0 to Array.length gd.players -1 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 let destx = gd.players.(pl).xy.x
and desty = gd.players.(pl).xy.y in and desty = gd.players.(pl).xy.y in
let foundpath = ref false in let foundpath = ref false in
@ -1128,14 +1134,6 @@ let seek_player (gd : game_data) (dgs : danger_map) =
cyi := !cyi + snd order.(directn) ; cyi := !cyi + snd order.(directn) ;
break := true ; break := true ;
end 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 else begin
if logg then Printf.fprintf stderr " Moving\n" ; if logg then Printf.fprintf stderr " Moving\n" ;
print_ret "again_dash.sav" directn 0 print_escape ; print_ret "again_dash.sav" directn 0 print_escape ;
@ -1164,7 +1162,7 @@ let seek_player (gd : game_data) (dgs : danger_map) =
b ;; b ;;
let read_queue (filename : string) = 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 id = ref 0 in
let ptr = open_in filename in let ptr = open_in filename in
try try
@ -1404,7 +1402,6 @@ let set_cd (nspeed : int) (filename : string) =
(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *)
(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *)
let __start = Unix.gettimeofday() ;; let __start = Unix.gettimeofday() ;;
let game_map = parse_input "entrees.txt" ;; let game_map = parse_input "entrees.txt" ;;
if debug_all then print_game_data game_map ;; 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); 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 end
else begin 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") ignore (read_queue "again_dash.sav")
end end
end;; end;;

BIN
again.o

Binary file not shown.

View File

@ -1,27 +1,27 @@
92.0 140.0
1 2
13 21 13 21
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 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 6 3 3 3 3 3 3 0 2 2 2 0 5 5 5 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 6 1 3 1 0 1 2 1 2 1 2 1 2 1 5 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 6 6 3 6 6 6 0 2 2 2 2 0 5 5 5 5 5 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 6 1 3 1 6 1 0 1 2 1 2 1 2 1 5 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 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 0 1 2 1 2 1 2 1 2 1 2 1 5 1 5 1 1 6 1 3 1 6 1 0 1 2 1 2 1 5 1 5 1 5 1 4 1
1 3 3 3 3 3 0 2 2 2 2 2 2 2 2 0 5 5 5 5 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 3 1 2 1 2 1 2 1 2 1 0 1 5 1 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 3 3 3 3 0 2 2 2 2 2 2 0 5 5 5 4 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 3 1 2 1 2 1 2 1 2 1 5 1 4 1 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 3 3 3 3 0 2 2 2 2 2 2 2 0 5 5 4 4 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 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
3 1
3 17 1 92.5 11 5 5 140.17600000000024
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
2 2
11 14 3 10 11 2 0 4 2 2 2
9 14 0 7 3 3 3 1 5 1 1
5
1 8 4
1 12 2
3 7 3
3 12 2
2 5 3

View File

@ -1 +1 @@
4 0 0 0