reworked seek_player to guarantee kills
This commit is contained in:
parent
fdc5c1ca38
commit
ea743f6c17
23
again.ml
23
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;;
|
||||
|
|
46
entrees.txt
46
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
|
||||
|
|
|
@ -1 +1 @@
|
|||
4 0
|
||||
0 0
|
Loading…
Reference in New Issue