experimental changes to pathfinding
This commit is contained in:
parent
f620572de5
commit
2cc0bfa70a
33
again.ml
33
again.ml
|
@ -11,7 +11,7 @@ TODO :
|
||||||
Random.self_init () ;;
|
Random.self_init () ;;
|
||||||
|
|
||||||
let debug_all = false ;;
|
let debug_all = false ;;
|
||||||
let logg = false ;;
|
let logg = true ;;
|
||||||
|
|
||||||
(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *)
|
(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *)
|
||||||
(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *)
|
(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *)
|
||||||
|
@ -797,7 +797,7 @@ let bfs_for_crate (gd : game_data) (dgs : danger_map) (x0 : int) (y0 : int) (sti
|
||||||
|
|
||||||
let undead_end_tiles = generate_dead_end_map gd in
|
let undead_end_tiles = generate_dead_end_map gd in
|
||||||
|
|
||||||
if gd.player_id = 0 then begin
|
if false && gd.player_id = 0 then begin
|
||||||
for l = 0 to Array.length undead_end_tiles -1 do
|
for l = 0 to Array.length undead_end_tiles -1 do
|
||||||
for c = 0 to Array.length undead_end_tiles.(l) -1 do
|
for c = 0 to Array.length undead_end_tiles.(l) -1 do
|
||||||
if undead_end_tiles.(l).(c) >= 727 then
|
if undead_end_tiles.(l).(c) >= 727 then
|
||||||
|
@ -819,27 +819,38 @@ let bfs_for_crate (gd : game_data) (dgs : danger_map) (x0 : int) (y0 : int) (sti
|
||||||
try
|
try
|
||||||
while not (Queue.is_empty q) do
|
while not (Queue.is_empty q) do
|
||||||
let (x, y, ct, direction, polar) = Queue.pop q in
|
let (x, y, ct, direction, polar) = Queue.pop q in
|
||||||
|
(*Printf.fprintf stderr "at (%d %d)\n" x y;*)
|
||||||
if is_valid x y lines cols && gd.laby.(x).(y) <> 1 && gd.laby.(x).(y) <> 2 then begin (* within the map *)
|
if is_valid x y lines cols && gd.laby.(x).(y) <> 1 && gd.laby.(x).(y) <> 2 then begin (* within the map *)
|
||||||
if Hashtbl.find_opt visited (x, y, polar) = None then begin (* has not been visited yet *)
|
if Hashtbl.find_opt visited (x, y, polar) = None then begin (* has not been visited yet *)
|
||||||
Hashtbl.add visited (x, y, polar) 1 ;
|
Hashtbl.add visited (x, y, polar) 1 ;
|
||||||
if
|
if
|
||||||
not (is_dead_all dgs x y ct interval ignorePlayers) &&
|
not (is_dead_all dgs x y ct interval ignorePlayers) &&
|
||||||
ct < stime +. (float_of_int maxDist) *. interval &&
|
ct < stime +. (float_of_int maxDist) *. interval &&
|
||||||
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
|
||||||
then begin (* is not lethal *)
|
then begin (* is not lethal *)
|
||||||
|
if ct = stime+. interval then begin
|
||||||
|
Printf.fprintf stderr "%b %b %b %b %b\n"
|
||||||
|
(ct >= stime +. (float_of_int minDist) *. interval) (* not too deep *)
|
||||||
|
(is_empty_lst dgs.explosionTimes.(x).(y)) (* safe *)
|
||||||
|
(needs_gtfo || undead_end_tiles.(x).(y) * 2 <= nearest_player) (* is not going to be an ez kill *)
|
||||||
|
(not searchCrate || (sees_a_crate gd dgs x y && not dgs.explodedCrates.(x).(y))) (* sees a crate *)
|
||||||
|
(not searchBonus || dgs.bonusMap.(x).(y)) (* is a bonus *)
|
||||||
|
end;
|
||||||
if
|
if
|
||||||
(ct >= stime +. (float_of_int minDist) *. interval) && (* not too deep *)
|
(ct >= stime +. (float_of_int minDist) *. interval) && (* not too deep *)
|
||||||
(is_empty_lst dgs.explosionTimes.(x).(y)) && (* safe *)
|
(is_empty_lst dgs.explosionTimes.(x).(y)) && (* safe *)
|
||||||
(undead_end_tiles.(x).(y) * 2 <= nearest_player) && (* is not going to be an ez kill *)
|
(needs_gtfo || undead_end_tiles.(x).(y) * 2 <= nearest_player) && (* is not going to be an ez kill *)
|
||||||
(not searchCrate || (sees_a_crate gd dgs x y && not dgs.explodedCrates.(x).(y))) && (* sees a crate *)
|
(not searchCrate || (sees_a_crate gd dgs x y && not dgs.explodedCrates.(x).(y))) && (* sees a crate *)
|
||||||
(not searchBonus || dgs.bonusMap.(x).(y)) (* is a bonus *)
|
(not searchBonus || dgs.bonusMap.(x).(y)) (* is a bonus *)
|
||||||
then begin
|
then begin
|
||||||
raise (ReturnInt direction)
|
raise (ReturnInt direction)
|
||||||
end;
|
end;
|
||||||
if not (x0 == x && y0 == y) && (needs_gtfo || undead_end_tiles.(x).(y) * 2 <= nearest_player) then begin
|
if not (x0 = x && y0 = y) && (needs_gtfo || undead_end_tiles.(x).(y) * 2 <= nearest_player) then begin
|
||||||
for dir = 0 to 3 do
|
for dir = 0 to 3 do
|
||||||
Queue.add (x + (fst order.(dir)), y + (snd order.(dir)), ct +. interval, direction, polar) q ;
|
Queue.add (x + (fst order.(dir)), y + (snd order.(dir)), ct +. interval, direction, polar) q ;
|
||||||
done;
|
done;
|
||||||
|
Queue.add (x, y, ct +. interval, direction, polar+1) q
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -855,7 +866,7 @@ let move_crate (gd : game_data) (dgs : danger_map) =
|
||||||
and cyi = gd.players.(pid).xy.y in
|
and cyi = gd.players.(pid).xy.y in
|
||||||
try
|
try
|
||||||
(* send away a player standing right on top *)
|
(* send away a player standing right on top *)
|
||||||
if Array.exists (fun (p : player) -> p.id <> pid && p.xy.x = cxi && p.xy.y = cyi) gd.players then begin
|
if Array.exists (fun (p : player) -> p.id <> pid && p.xy.x = cxi && p.xy.y = cyi) gd.players && (is_empty_lst dgs.explosionTimes.(cxi).(cyi)) then begin
|
||||||
if gd.players.(pid).bomb_to_place > 0 then begin
|
if gd.players.(pid).bomb_to_place > 0 then begin
|
||||||
if logg then Printf.fprintf stderr "oh no you dont\n" ;
|
if logg then Printf.fprintf stderr "oh no you dont\n" ;
|
||||||
let saved_p = simulate_bomb_deconstruct dgs cxi cyi gd.players.(pid).bomb_radius (gd.dt +. 5.5) in
|
let saved_p = simulate_bomb_deconstruct dgs cxi cyi gd.players.(pid).bomb_radius (gd.dt +. 5.5) in
|
||||||
|
@ -883,6 +894,7 @@ let move_crate (gd : game_data) (dgs : danger_map) =
|
||||||
let bonusres_2 = bfs_for_crate gd dgs cxi cyi gd.dt false true false 0 false 7 in
|
let bonusres_2 = bfs_for_crate gd dgs cxi cyi gd.dt false true false 0 false 7 in
|
||||||
if bonusres_2 <> 4 then begin
|
if bonusres_2 <> 4 then begin
|
||||||
if logg then Printf.fprintf stderr "Bonus Spotted\n" ;
|
if logg then Printf.fprintf stderr "Bonus Spotted\n" ;
|
||||||
|
action := 1 ;
|
||||||
raise (ReturnInt bonusres_2) ;
|
raise (ReturnInt bonusres_2) ;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -904,12 +916,19 @@ let move_crate (gd : game_data) (dgs : danger_map) =
|
||||||
end;
|
end;
|
||||||
if logg then Printf.fprintf stderr "searching...\n" ;
|
if logg then Printf.fprintf stderr "searching...\n" ;
|
||||||
let rescr = bfs_for_crate gd dgs cxi cyi gd.dt true false false 0 false 80 in
|
let rescr = bfs_for_crate gd dgs cxi cyi gd.dt true false false 0 false 80 in
|
||||||
|
if logg then Printf.fprintf stderr "searching Done...\n" ;
|
||||||
if rescr <> 4 then
|
if rescr <> 4 then
|
||||||
rescr
|
rescr
|
||||||
else begin
|
else begin
|
||||||
if logg then Printf.fprintf stderr "searching 2...\n" ;
|
if logg then Printf.fprintf stderr "searching 2...\n" ;
|
||||||
let rescr2 = bfs_for_crate gd dgs cxi cyi gd.dt false false false 0 false 80 in
|
let rescr2 = bfs_for_crate gd dgs cxi cyi gd.dt false false false 0 false 80 in
|
||||||
rescr2
|
if logg then Printf.fprintf stderr "searching 2 Done...\n" ;
|
||||||
|
if rescr2 <> 4 then
|
||||||
|
rescr2
|
||||||
|
else begin
|
||||||
|
if logg then Printf.fprintf stderr "Needs dash lmao\n";
|
||||||
|
4
|
||||||
|
end
|
||||||
end
|
end
|
||||||
with
|
with
|
||||||
| ReturnInt k -> k ;;
|
| ReturnInt k -> k ;;
|
||||||
|
|
36
entrees.txt
36
entrees.txt
|
@ -1,23 +1,25 @@
|
||||||
229.1200000000008
|
224.90000000000097
|
||||||
2
|
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 6 3 6 3 3 3 3 3 5 5 5 5 5 5 5 5 1
|
1 3 3 3 3 3 0 3 0 3 0 0 4 4 4 4 3 3 3 3 1
|
||||||
1 3 1 3 1 3 1 6 1 3 1 3 1 4 1 5 1 5 1 5 1
|
1 3 1 3 1 3 1 3 1 3 1 0 1 4 1 3 1 3 1 5 1
|
||||||
1 3 3 6 6 3 6 6 6 3 0 3 5 5 5 5 5 5 4 4 1
|
1 3 3 3 3 3 3 3 3 3 3 3 3 4 3 3 3 3 3 3 1
|
||||||
1 0 1 6 1 3 1 3 1 6 1 3 1 4 1 5 1 5 1 5 1
|
1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 5 1
|
||||||
1 3 3 3 3 3 3 3 3 6 3 4 3 4 4 4 4 4 4 4 1
|
1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1
|
||||||
1 0 1 6 1 3 1 3 1 6 1 4 1 4 1 3 1 4 1 5 1
|
1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 0 1
|
||||||
1 3 3 3 3 3 6 6 6 6 6 4 5 4 5 3 5 5 5 4 1
|
1 3 3 3 3 3 3 3 3 3 6 3 6 3 6 3 6 4 4 4 1
|
||||||
1 6 1 6 1 3 1 6 1 6 1 4 1 4 1 3 1 4 1 4 1
|
1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 6 1 3 1 4 1
|
||||||
1 3 3 6 3 6 6 6 6 6 4 4 4 4 4 4 4 4 4 4 1
|
1 3 3 3 6 6 6 6 6 6 6 3 6 3 4 6 4 5 4 4 1
|
||||||
1 6 1 6 1 3 1 6 1 0 1 4 1 4 1 5 1 4 1 4 1
|
1 6 1 3 1 3 1 3 1 6 1 3 1 3 1 6 1 5 1 4 1
|
||||||
1 6 6 6 0 3 0 4 4 4 4 4 4 4 4 4 4 4 4 4 1
|
1 3 3 3 6 6 6 6 6 6 6 6 6 6 6 6 6 5 6 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
|
||||||
0
|
0
|
||||||
4
|
4
|
||||||
10 7 0 1 2 4 3 3
|
1 9 0 2 4 7 1 3
|
||||||
10 11 1 2 1 6 0 1
|
3 10 1 3 1 2 1 1
|
||||||
10 13 2 2 1 3 2 3
|
3 9 2 1 4 1 2 3
|
||||||
9 6 3 5 2 2 4 1
|
3 14 3 0 1 3 2 1
|
||||||
0
|
2
|
||||||
|
2 11 0
|
||||||
|
1 10 1
|
||||||
|
|
|
@ -428,6 +428,7 @@ def execute_evenement(evenements, evenement, plateau, plateauCouleur, bombes, jo
|
||||||
while indiceJoueur != None:
|
while indiceJoueur != None:
|
||||||
joueurs[indiceJoueur] = None
|
joueurs[indiceJoueur] = None
|
||||||
print("DEATH :", indiceJoueur)
|
print("DEATH :", indiceJoueur)
|
||||||
|
assert(false)
|
||||||
indiceJoueur = trouve_objet(i,j,joueurs)
|
indiceJoueur = trouve_objet(i,j,joueurs)
|
||||||
|
|
||||||
# On fait exploser la bombe s'il y en a une
|
# On fait exploser la bombe s'il y en a une
|
||||||
|
|
Loading…
Reference in New Issue