diff --git a/again b/again index 167df63..dbdc889 100755 Binary files a/again and b/again differ diff --git a/again.cmi b/again.cmi index 637b87e..62ce127 100644 Binary files a/again.cmi and b/again.cmi differ diff --git a/again.cmx b/again.cmx index 0e9b5d5..35f281e 100644 Binary files a/again.cmx and b/again.cmx differ diff --git a/again.ml b/again.ml index 1d9b34e..632e4f9 100644 --- a/again.ml +++ b/again.ml @@ -17,6 +17,7 @@ let logg = true ;; (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) let fodder = ref 0 ;; +let bodder = ref false ;; type pt = { x : int ; y : int ; @@ -448,30 +449,8 @@ let generate_gain_map (gd : game_data) = (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) -let simulate_bomb (dgs : danger_map) (b : bomb) = - let saved_data = Hashtbl.create 30 in - let bx = b.xy.x - and by = b.xy.y in - let bsize = b.size - and dtime = min (b.det_time) (List.fold_left min (32760.) dgs.explosionTimes.(bx).(by)) in - let lines = Array.length dgs.explosionTimes - and cols = Array.length dgs.explosionTimes.(0) in - for dir = 0 to 3 do - for w = 0 to bsize do - if (w > 0 || dir = 0) then begin - let nx = bx + w * (fst order.(dir)) - and ny = by + w * (snd order.(dir)) in - if is_valid nx ny lines cols then begin - Hashtbl.add saved_data (nx, ny) dtime ; - dgs.explosionTimes.(nx).(ny) <- (dtime)::(dgs.explosionTimes.(nx).(ny)) - end - end - done; - done; - saved_data ;; - let simulate_bomb_deconstruct (gd : game_data) (dgs : danger_map) (bx : int) (by : int) (bsize : int) (dtime0 : float) = - let saved_data = Hashtbl.create 30 in + let saved_data = Hashtbl.create 40 in let dtime = min dtime0 (List.fold_left min (32760.) dgs.explosionTimes.(bx).(by)) in let lines = Array.length dgs.explosionTimes and cols = Array.length dgs.explosionTimes.(0) in @@ -643,7 +622,7 @@ let generate_dead_end_map (gd : game_data) = (not (Array.fold_left (fun acc (p : player) -> acc || (p.xy.x = x && p.xy.y = y && p.id <> pid)) false gd.players))*) then begin Hashtbl.add visit_mem (x, y) 1; - if res.(x).(y) = 0 && not (x = gd.players.(pid).xy.x && y = gd.players.(pid).xy.y) then + if res.(x).(y) = 0(* && not (x = gd.players.(pid).xy.x && y = gd.players.(pid).xy.y) *)then raise (ReturnInt d) ; for dir = 0 to 3 do Queue.add (x + fst (order.(dir)), y + snd (order.(dir)), d+1) q @@ -692,7 +671,7 @@ let is_dead (dgs : danger_map) (x : int) (y : int) (t : float) (dt : float) = let is_dead_2 (dgs : danger_map) (x : int) (y : int) (t : float) (dt : float) = (List.fold_left (fun acc curtime -> - acc || (t > curtime && t < curtime +. dt) + acc || (t >= curtime && t <= curtime +. dt) ) false dgs.explosionTimes.(x).(y) @@ -822,7 +801,7 @@ let sees_a_crate (gd : game_data) (dgs : danger_map) (x : int) (y : int) = with | ReturnBool b -> b ;; -let bfs_for_crate ?return_x:(retx=fodder) ?return_y:(rety=fodder) (gd : game_data) (dgs : danger_map) (x0 : int) (y0 : int) (stime : float) (searchCrate : bool) (searchBonus : bool) (placedBomb : bool) (minDist : int) (ignorePlayers : bool) (maxDist : int) = +let bfs_for_crate ?return_x:(retx=fodder) ?return_y:(rety=fodder) ?return_ok:(retfl=bodder) (gd : game_data) (dgs : danger_map) (x0 : int) (y0 : int) (stime : float) (searchCrate : bool) (searchBonus : bool) (placedBomb : bool) (minDist : int) (ignorePlayers : bool) (maxDist : int) = let lines = Array.length gd.laby and cols = Array.length gd.laby.(0) in @@ -832,11 +811,12 @@ let bfs_for_crate ?return_x:(retx=fodder) ?return_y:(rety=fodder) (gd : game_dat let pid = gd.player_id in let needs_gtfo = not (is_empty_lst dgs.explosionTimes.(x0).(y0)) in - let nearest_player = min_dist_with_dash gd gd.players.(pid).xy.x gd.players.(pid).xy.y in + (*let nearest_player = min_dist_with_dash gd gd.players.(pid).xy.x gd.players.(pid).xy.y in*) + let nearest_player = min_dist_from_player gd gd.players.(pid).xy.x gd.players.(pid).xy.y in let undead_end_tiles = generate_dead_end_map gd in - if gd.player_id = 2 then begin + if gd.player_id = 4 then begin for l = 0 to Array.length undead_end_tiles -1 do for c = 0 to Array.length undead_end_tiles.(l) -1 do if undead_end_tiles.(l).(c) >= 727 then @@ -870,11 +850,11 @@ let bfs_for_crate ?return_x:(retx=fodder) ?return_y:(rety=fodder) (gd : game_dat then begin (* is not lethal *) if false && ct <= stime +. 3. *. interval then begin Printf.fprintf stderr "(at %d %d) %b %b %b %b %b\n" x y - (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 *) + (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 (ct >= stime +. (float_of_int minDist) *. interval) && (* not too deep *) @@ -897,9 +877,12 @@ let bfs_for_crate ?return_x:(retx=fodder) ?return_y:(rety=fodder) (gd : game_dat end end done; + retfl := false ; 4 ; with - | ReturnInt k -> k ;; + | ReturnInt k -> + retfl := true ; + k ;; let move_crate (gd : game_data) (dgs : danger_map) = let pid = gd.player_id in @@ -963,9 +946,10 @@ let move_crate (gd : game_data) (dgs : danger_map) = rescr else begin 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 success = ref false in + let rescr2 = bfs_for_crate ~return_ok:success gd dgs cxi cyi gd.dt false false false 0 false 80 in if logg then Printf.fprintf stderr "searching 2 Done...\n" ; - if rescr2 <> 4 then + if !success then rescr2 else begin if logg then Printf.fprintf stderr "Needs dash lmao\n"; @@ -1044,7 +1028,7 @@ let gain_map = generate_gain_map game_map ;; (*Printf.fprintf stderr "\n" ;; print_dangers danger_data ;;*) -get_meta_info game_map.player_id ;; +(*get_meta_info game_map.player_id ;;*) (*Printf.fprintf stderr "\n" ;; print_dangers danger_data ;;*) let direction = ref 4 ;; @@ -1061,9 +1045,9 @@ else begin end ;; Printf.printf "%d %d" !direction !action ; -if logg then Printf.fprintf stderr "[player %d] %d %d (at time %f)\n" game_map.player_id !direction !action game_map.dt; +if logg then Printf.fprintf stderr "[player %d] %d %d (at time %f)\n" game_map.player_id !direction !action game_map.dt;; -set_meta_info game_map.player_id ;; +(*set_meta_info game_map.player_id ;;*) let __end = Unix.gettimeofday() ;; if logg then Printf.fprintf stderr "Time : %f\n" (__end -. __start) ;; diff --git a/again.o b/again.o index eaedde0..d540821 100644 Binary files a/again.o and b/again.o differ diff --git a/audio/Night of Knights.mp3 b/audio/Night of Knights.mp3 new file mode 100644 index 0000000..ee71864 Binary files /dev/null and b/audio/Night of Knights.mp3 differ diff --git a/audio/wood-effect-254997.mp3 b/audio/wood-effect-254997.mp3 new file mode 100644 index 0000000..d061a5d Binary files /dev/null and b/audio/wood-effect-254997.mp3 differ diff --git a/entrees.txt b/entrees.txt index f3b59c9..711f97b 100644 --- a/entrees.txt +++ b/entrees.txt @@ -1,29 +1,27 @@ -93.0 -2 +10.0 +3 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 0 2 2 2 2 2 2 0 2 2 2 2 0 5 5 5 1 -1 3 1 0 1 2 1 2 1 2 1 0 1 2 1 2 1 0 1 5 1 -1 3 3 0 2 2 2 2 2 2 2 2 0 0 2 2 0 5 5 5 1 -1 3 1 2 1 2 1 2 1 2 1 2 1 0 1 2 1 0 1 5 1 -1 3 0 2 0 0 0 2 2 2 2 2 0 2 2 2 0 5 4 5 1 -1 3 1 0 1 6 1 2 1 2 1 2 1 2 1 0 1 5 1 5 1 -1 6 6 6 6 6 2 0 2 0 2 2 0 2 2 5 5 5 5 5 1 -1 3 1 6 1 6 1 2 1 2 1 2 1 2 1 2 1 5 1 4 1 -1 6 6 6 6 6 6 0 2 2 0 2 0 2 0 5 5 4 5 5 1 -1 6 1 6 1 6 1 2 1 0 1 2 1 2 1 2 1 4 1 4 1 -1 6 6 6 6 6 6 0 2 2 2 2 2 2 5 5 5 5 5 4 1 +1 3 0 0 2 2 2 2 2 2 2 0 2 0 2 2 2 2 0 5 1 +1 3 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 5 1 +1 0 0 2 0 2 2 0 2 2 2 2 0 2 2 2 2 2 2 0 1 +1 0 1 2 1 2 1 2 1 0 1 2 1 2 1 2 1 2 1 2 1 +1 2 2 2 0 2 2 2 0 0 2 2 2 2 2 0 2 2 2 2 1 +1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 0 1 2 1 2 1 +1 2 2 2 2 0 2 2 2 2 0 2 0 2 2 2 0 2 2 2 1 +1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 0 1 2 1 2 1 +1 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 1 +1 6 1 0 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 4 1 +1 6 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -2 -11 19 2 94.5 -9 18 2 97.5 -2 -9 17 1 0 1 1 1 2 -9 19 2 0 0 2 0 0 -6 -1 4 0 -9 7 0 -11 7 3 -6 3 0 -5 5 3 -4 17 3 +4 +1 3 1 12.5 +11 18 1 12.5 +1 18 1 12.5 +11 2 1 12.5 +4 +3 1 0 0 0 1 0 0 +9 19 1 0 0 1 0 1 +3 19 2 0 1 1 0 0 +9 1 3 0 0 1 0 0 +0 diff --git a/iachallenge2024_bomberman_tkinter.py b/iachallenge2024_bomberman_tkinter.py index c4795c9..dedcff3 100644 --- a/iachallenge2024_bomberman_tkinter.py +++ b/iachallenge2024_bomberman_tkinter.py @@ -62,6 +62,8 @@ from copy import deepcopy import subprocess from tkinter import * import os +from playsound import playsound +from threading import Thread def attente(vitesse): return TEMPS_BASE * 0.9**vitesse @@ -413,6 +415,8 @@ def execute_evenement(evenements, evenement, plateau, plateauCouleur, bombes, jo return elif plateau[i][j]==PLATEAU_BOIS: # Bois : destructible, on détruit + '''CTS[CTPTR].start() + CTPTR = (CTPTR+1)%12''' casse(plateau, powerups, i,j) return else: @@ -461,6 +465,23 @@ Y_STEP_CLAIMS = 40 X_LARGEUR_EMPIRES = 60 Y_LARGEUR_EMPIRES = 180 +''' +CT1= Thread(target=play_planks) +CT2= Thread(target=play_planks) +CT3= Thread(target=play_planks) +CT4= Thread(target=play_planks) +CT5= Thread(target=play_planks) +CT6= Thread(target=play_planks) +CT7= Thread(target=play_planks) +CT8= Thread(target=play_planks) +CT9= Thread(target=play_planks) +CT10= Thread(target=play_planks) +CT11= Thread(target=play_planks) +CT12= Thread(target=play_planks) +CTS=[CT1, CT2, CT3, CT4, CT5, CT6, CT7, CT8, CT9, CT10, CT11, CT12] +CTPTR=0 +''' + def decision(programme, indiceJoueur, plateau, plateauCouleur, bombes, joueurs, powerups, instant): with open("entrees.txt", "w") as entrees: print(instant, file=entrees) @@ -543,6 +564,8 @@ def simulation(strategies): fenetre.mainloop() return +def play_planks(): + playsound('./audio/wood-effect-254997.mp3') #simulation(["./again"]) #simulation(["./again", "./again"]) simulation(["./again", "./again", "./again", "./again"]) diff --git a/main_0.sav b/main_0.sav deleted file mode 100644 index 56a6051..0000000 --- a/main_0.sav +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/main_1.sav b/main_1.sav deleted file mode 100644 index 56a6051..0000000 --- a/main_1.sav +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/main_2.sav b/main_2.sav deleted file mode 100644 index 56a6051..0000000 --- a/main_2.sav +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/main_3.sav b/main_3.sav deleted file mode 100644 index 56a6051..0000000 --- a/main_3.sav +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/sortie.txt b/sortie.txt index 4a3b60a..7cc0f37 100644 --- a/sortie.txt +++ b/sortie.txt @@ -1 +1 @@ -0 0 \ No newline at end of file +4 0 \ No newline at end of file