From 59292ef41b8997c875c1fb2ff139eb77100a99db Mon Sep 17 00:00:00 2001 From: Alexandre Date: Fri, 8 Nov 2024 22:24:33 +0100 Subject: [PATCH] minor-ish changes to BFS conditions --- bin/main | Bin 227925 -> 227977 bytes input_test.txt | 2 +- main.cmi | Bin 6827 -> 6828 bytes main.cmo | Bin 28084 -> 28154 bytes main.ml | 20 ++++++++++---------- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bin/main b/bin/main index ca9926e553b6f1b64c97d85eaaefeb49e448bce5..4387b05eabd7e5a6fb681c3ed745b120e3949500 100755 GIT binary patch delta 309 zcmccmg}3u7Z$k^?7N&PE7?ZcZf5DWjz3OAIho5@LxBQ3 z)9X2z)mbxu%*yTWIho^`811L~^DrATYHV-jVYXKg{r2tue@>vZHV}irQy`yr`uzD! z;?v*hFsm^A{XAVnm)VQac6+=obG>DKa#3PQYH_TBc5r@aNd}jLK{T4kg4IYue)&ac ziXb8jR_i15xh58ua5Dw$U>W=t2YVs-!kMWt#w delta 163 zcmeDD%6s(-Z$k^?7N&PE7{j)|f5DWjzM zFfsZ}=jUTKW;ETtorl?8L6rIX|NopomD)fI0-wJ9|Ia&p{(L6!=}NlHDok8orhDiz zdog-#pRCJVZ#msMlX=4SMd{4V9E=aPs}(S3aSD_vt-W;k;Z?;K{*0!KCtn3lUr@=s Mg3)BUXBD#p0Q!kGjQ{`u diff --git a/input_test.txt b/input_test.txt index 20bb71f..1dd06c7 100644 --- a/input_test.txt +++ b/input_test.txt @@ -13,7 +13,7 @@ 4 4 2 4.3 8 6 3 5.5 5 -3 0 0 0 2 4 5 3 +2 6 0 0 2 4 5 3 2 0 1 4 3 2 2 2 10 5 2 0 2 3 2 3 5 5 3 5 1 10 2 3 diff --git a/main.cmi b/main.cmi index 15e807a7b64d00413b96d0a536a461a620a3b4eb..bab3cd8df8476577b2af4a265bd78fd40b72f65a 100644 GIT binary patch delta 750 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 diff --git a/main.ml b/main.ml index a633b7d..a3c775f 100644 --- a/main.ml +++ b/main.ml @@ -3,7 +3,7 @@ let debug_all = true ;; let fatal_time = 1.0 ;; -let explosion_time = 0.5 ;; +let explosion_time = 1.0 ;; (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) @@ -160,8 +160,8 @@ let print_danger_levels (map : danger array array) = match map.(l).(c) with | Blocked -> Printf.printf "@ " | Safe -> Printf.printf ". " - | Danger _ -> Printf.printf "! " - | Fatal _ -> Printf.printf "X " + | Danger x -> Printf.printf "! " + | Fatal x -> Printf.printf "X " done; Printf.printf "\n" done ;; @@ -348,7 +348,7 @@ let cell_values (gd : game_data) = for ln = 0 to lines -1 do for cl = 0 to cols -1 do - if gd.laby.(ln).(cl) >= 3 && gd.laby.(ln).(cl) <> 3 + gd.player_id then begin + if (gd.laby.(ln).(cl) >= 3 && gd.laby.(ln).(cl) <> 3 + gd.player_id) || gd.laby.(ln).(cl) = 0 then begin (* use a similar method than danger for bombs *) let halt = ref false in @@ -481,19 +481,19 @@ let move_explore (gd: game_data) (dgs : danger array array) = Hashtbl.add visited (cx0, cy0) 1 ; if is_valid (cx0+1) (cy0) lines cols && not ((simt +. interval) > (level_of_danger dgs.(cx0+1).(cy0)) && (simt +. interval) < (level_of_danger dgs.(cx0+1).(cy0)) +. explosion_time) then begin (* South *) - if debug_all then Printf.printf "[escape] +South\n" ; + if debug_all then Printf.printf "[crates] +South\n" ; Queue.add (cx0+1, cy0, simt +. interval, 2) q ; end; if is_valid (cx0-1) (cy0) lines cols && not ((simt +. interval) > (level_of_danger dgs.(cx0-1).(cy0)) && (simt +. interval) < (level_of_danger dgs.(cx0-1).(cy0)) +. explosion_time) then begin (* North *) - if debug_all then Printf.printf "[escape] +North\n" ; + if debug_all then Printf.printf "[crates] +North\n" ; Queue.add (cx0-1, cy0, simt +. interval, 0) q ; end; if is_valid (cx0) (cy0+1) lines cols && not ((simt +. interval) > (level_of_danger dgs.(cx0).(cy0+1)) && (simt +. interval) < (level_of_danger dgs.(cx0).(cy0+1)) +. explosion_time) then begin (* East *) - if debug_all then Printf.printf "[escape] +East\n" ; + if debug_all then Printf.printf "[crates] +East\n" ; Queue.add (cx0, cy0+1, simt +. interval, 1) q ; end; if is_valid (cx0) (cy0-1) lines cols && not ((simt +. interval) > (level_of_danger dgs.(cx0).(cy0-1)) && (simt +. interval) < (level_of_danger dgs.(cx0).(cy0-1)) +. explosion_time) then begin (* West *) - if debug_all then Printf.printf "[escape] +West\n" ; + if debug_all then Printf.printf "[crates] +West\n" ; Queue.add (cx0, cy0-1, simt +. interval, 3) q ; end; @@ -508,7 +508,7 @@ let move_explore (gd: game_data) (dgs : danger array array) = raise (ReturnInt direct) else if dgs.(cx).(cy) = Blocked then () - else begin (* either danger or fatal *) + else begin (* we need to go deeper *) let dang_time = level_of_danger dgs.(cx).(cy) in for dir = 0 to 3 do let newx = cx + fst order.(dir) @@ -560,7 +560,7 @@ let move_explore (gd: game_data) (dgs : danger array array) = result in - (* check if there's a crate next to the player, and if upon placing a bomb it won't block the player *) + (* check if there's a crate next to the player, and if upon placing a bomb it won't softlock the player *) if is_valid (cxi+1) (cyi) lines cols && gd.laby.(cxi+1).(cyi) = 2 && (safe_path_with_bomb cxi cyi gd.players.(pid).bomb_radius <> 4) then begin (* Crate at South *) current_status := EscapeDeath ; action := 1;