From 6b980deeef3d38b599f5202013a2326af51864f0 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Tue, 12 Nov 2024 22:04:43 +0100 Subject: [PATCH] added double bombing support, dash usage when cornered and changed some numbers --- entrees.txt | 45 ++++++++++++------------ main | Bin 236052 -> 237145 bytes main.cmi | Bin 9916 -> 10051 bytes main.cmo | Bin 38799 -> 40256 bytes main.ml | 97 +++++++++++++++++++++++++++++++++++----------------- main_0.sav | 2 +- main_1.sav | 2 +- main_2.sav | 2 +- main_3.sav | 2 +- sortie.txt | 1 + 10 files changed, 94 insertions(+), 57 deletions(-) diff --git a/entrees.txt b/entrees.txt index 75b2d07..54a418b 100644 --- a/entrees.txt +++ b/entrees.txt @@ -1,26 +1,29 @@ -205.50000000000065 +107.60000000000014 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 6 3 3 3 4 4 4 4 6 6 6 6 6 6 4 6 5 6 6 1 -1 6 1 3 1 6 1 6 1 4 1 6 1 6 1 4 1 5 1 5 1 -1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 4 6 5 1 -1 6 1 3 1 6 1 6 1 4 1 6 1 6 1 4 1 4 1 5 1 -1 6 6 6 6 6 6 6 6 4 6 6 4 6 4 4 4 4 4 4 1 -1 6 1 6 1 6 1 6 1 3 1 6 1 6 1 4 1 4 1 4 1 -1 6 6 6 6 6 6 4 4 4 4 6 4 4 4 4 4 4 4 4 1 -1 6 1 6 1 6 1 6 1 3 1 6 1 6 1 4 1 4 1 4 1 -1 6 6 6 6 3 3 3 4 3 3 6 3 3 3 4 4 4 4 4 1 -1 6 1 6 1 6 1 6 1 3 1 6 1 3 1 3 1 4 1 4 1 -1 6 6 6 3 6 3 3 3 3 3 3 3 3 3 3 3 4 3 4 1 +1 3 3 3 3 3 3 0 2 0 2 2 2 2 2 2 5 5 5 5 1 +1 3 1 3 1 3 1 2 1 2 1 0 1 2 1 2 1 5 1 5 1 +1 3 3 3 3 3 3 3 0 2 2 2 2 2 0 5 5 5 5 5 1 +1 3 1 3 1 3 1 2 1 2 1 2 1 0 1 5 1 5 1 5 1 +1 3 3 3 3 3 0 2 2 2 2 2 2 0 5 5 5 5 5 5 1 +1 0 1 3 1 3 1 2 1 2 1 0 1 2 1 5 1 4 1 5 1 +1 6 6 6 6 6 0 2 2 2 2 2 2 0 2 0 0 4 4 4 1 +1 6 1 3 1 6 1 0 1 2 1 2 1 2 1 0 1 4 1 5 1 +1 6 6 3 6 6 0 2 2 2 2 2 0 0 0 4 4 4 4 4 1 +1 6 1 6 1 6 1 0 1 2 1 2 1 2 1 4 1 4 1 4 1 +1 6 6 6 6 6 6 0 2 2 2 2 2 2 0 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 +5 +7 17 3 108.35799999999998 +11 15 2 109.5 +11 6 2 109.50000000000011 +3 6 3 109.64919999999982 +10 7 2 112.20000000000013 4 -5 9 5 206.50000000000063 -5 18 2 207.00000000000085 -7 10 5 209.20000000000064 -11 15 4 209.69300000000123 -3 -11 17 1 3 2 4 1 3 -3 19 2 1 2 2 1 3 -8 9 3 1 4 5 4 3 -0 +1 7 0 4 3 3 0 0 +8 15 1 0 2 2 3 1 +9 17 2 3 3 3 0 2 +10 7 3 1 2 2 3 0 +1 +5 13 1 diff --git a/main b/main index ae859d2dfa8af438f92985da7580388e64391c25..d1bb265b488b5c3a01627824ccb756176e0a6de3 100755 GIT binary patch delta 3707 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 Ezj}~Y2><{9 diff --git a/main.cmi b/main.cmi index 3bc2c548e054bb837fe7e92452b4628f97903afd..da3dca38353d27ceaf59e5c3bac12971374cc392 100644 GIT binary patch literal 10051 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 diff --git a/main.cmo b/main.cmo index d713901294170ef4ccbf363eec11b1f8777df1fe..d363de2de16952af6f6fba0c74efd6718cff2663 100644 GIT binary patch delta 11537 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 JkE3>e{a;h#gR}qu delta 10598 zcmb7Kd3coNwV&V2_a&3eWFwPgvhT@|bqI+BfiPKsKtgsPge6Q!STt-&kPxGT6%{K> z$O{UV)}f_}7Apc(RCKru z7}X9RF;g82UvZaODtf0G#nY6^^ELrmlUuOy*EB{6YHWQzYsNy7ePNrZE01VXpJ7%F<> zj0HXa9vmzr6Y?cZCDD>q45XDvORHcAVJ*jn;<>nJ%JDC8gV7>oMoj8X+LX;yX_e73 z)9Rr$o7P5J+){zqXwguTCC(`pPJK^_L)hXi;%Z4D0>slwwAhqr@e3e%S=1omEX@_y zGOWU#rig=%V8Ui`+L14=moAfSD-IP`Cn$%{+&_fJxg0r-ehlafVYky%|vRDjq% zH`z~SA`SYB^OGomA}gL1D~cvl51uSaN3b|wlpYXF`?82q&L{#VPe!YlNq>!E%j8^) z6@Q#OHY|S0A+pCuAKp-Q z!6aI1tO2q@(vU21fhewx@RR0c{r&?b`pk-0JzELW8dX7Zsk9VLUS(~urgo07Eij9i zslnn>tvSG-_GL4pX-ya3)y0e8x|CuYQ3hHv8Q!6*##{0qcx^ZG#NIiXVpl_gaKxGq zudX)-3bWJfT2J?%ABoB-k+0?(=&~E=?`iTz%71bL{oW1qt2fY@KmJ7DrF;1LPZ+vl zFP%lf$XipsZo4!%C|f1#uZ{CpKMW4a#>>gmc)ugw$l&(eK(D%ip8bRG;Girw&D_%T z@)WNrU%Fno<}okN4$b__UY<7W+F29nm67dnlZFdEkvqs6SsQg5{-WnxpTCJ001qY~UQdBzE4BkP!kqv6Ufu2wFO=3+>vRK{LjWObK+ue!T zUVS+LTRt8fTt-(DEt!nurEUKrT3jtx#DOIZ$T*Cp@1dxO_}UXmK1C!RPfNZw?tJvW zbh^BU=(PNZBHOOhWh9Utn=WOhbNR{|w4N17%QHid!&(9B@&QE;od^F+ELuJ(v;ucN ziaU=ED5)@b@E^s|<-MWRaP`8~H=xXd!Gm{->RTp8H_%gUgIWGb7*KA5VVF)8kJ5gl z-0GHpem;Eu9Wb6@uolMa z47%Z`xLq>&+u@hMtUKXn<9Hv3AGz4xpRIW=?&xr?hu>KiyC43P7AbCqzn#H0_}4J# zhyQ8<$`kPKrF!;>WP8qd_-~ZF$Kk)3j4HA4-zTqA;XmN|iI>{7ZEM@$PhPewRq*%3 z`4mjD9LhqNQs|oFDP3!8^OE*e&Muf_pvowi+NF>$OgkiPh3S~217Nx+={T5W$Vw>8 z`I1h7dA_{5(qZnEpcCc+5>Rm#0aOD5?;yaF+`9-MS>k+vfK~$89Kq5yZvX+^QvY5A z>|>#i5g;qBJcxiZ%=i?63WKW%Op!Z92wWspsu9>L^H=H+$SHRtsDUL15k!>|s$P#E zN{4`opd$>72$G4ZdJ}@aW)O&A*)-)af=PS3@(hAEcuHT8Q-EL@gt8357g;y~Avy-h z2+1O8mvRyzjZ*DZjG_u{S6;`c6D*Mn3(u@R50(Vx6u?qLK)DDDsZb0P5N45#PY@Qv zjADenFBw-6=J7WT;U3W$2s`Cx-|&j=XOUDsz>+%X3a+UX$k1=4L>VBU6U5k z4}C3W{|j@{2UNY#2#46)5fe8iH!snj@3x4|6u7G2g@_#tx)I?f_1J_wDMB}}{s8oI z&k|gjFqU_QrmLiJAlfW&A+BDqwsB`Qf22od7{w$)64BkO>KFjwadXd|mNt!Oi zSeW%Q#FVqpKM+H<$jwKH>0@viF#|&1l@yT#{he4ChlN!Gsv%h;7K;g8NtRf0v0XLT z5KBoBFd{Zatm!I?m`#L}pcQW9dRB|N zs`QEhBu-@TCnR<;xPnACgGZ5ggu$0cl;f@9S4bjfr1cb%Y|Pn*Bu)c=KoY5w%o9l3 z!!j=*X@EHgkwjie>qR7+hek}i)e{$Q*b59|#>c1#p#uF{BeJ}cCEo0baq&nclRK)> zV@S3$xDUymu>Xo=N}HxF1IY)ZJHrD=u`<|-lmrgoX{6+{%uPsHBsp|rq--GIIaF7y zZTFsODVtdSGE#OC@EmxqrCr+YKDlf7EmAHr*pHMeY&IP!Uo+?TNTsMq=4qss@s=H_ zmCSh-seKHdM=BYofX5@%&71+GUSRMiq;jG3B}k?2keyRVb2%8DM%p3?^ifFL!1|d; zJIEjh=|%=UNbhBkk92ZIJ~klzD64-68&!}jUWCogcJg3rAfQZ#Z9eaO3LB?yxC$F- zldB@w_PIkODu(SC3x&aULR?;#5RnHOouX4H`er~?#(Ig#Mv>5+;IdJDwyR1ZY+N6D zD%q~FK_^Bha9kZ2P4y9~5`)o47{p^Vd(f}I=nKSAHexgtgG6k|urSC(MvMgd^~mt# z(2I<6$uZO*qh@%rj(0~ytN>2H5e`QQ#kW!;W>I`$uBufXUCTUYXvS&|wG$cL4C;}w zk$vnz28|Py@JVExVfS;8>0r==O!lhZkIZ)BD94f6#XF0U>1MD5nfoQsA3>%kt!I&W zR&r=O^_lOBs-EzKDb7xQpQY>vPNKL4#ak)X$2Gz&o?9R9%Dm2T{T^8ggRRI4X3Os& ztB?b{gsl1Ov>#cg8SF$B`_lgdS+elT_sG`q&aaT2#b7V8^Ci%Kj%-gdUm|;vc>*0M4K^6Q#2TR8`T4)&J`l$l)TWe#kLl1tFPa z*mp5VgZ&(X(Xd~Wz_1QuVkE#;jA@s^Ww--lHcF(_Vhrh1uG=x@G=m+;OOab@5%S0) zZT%5>6f1GckjJy2PQ%!8=FGs@8U`~l))Pk!#(LtY$JhbhnvJn18O%k#N6R%I`CZIv zM*bBBEy(A3s%f~Ja*Qhz~i+C1#Z^50|o3} z$wGn0{oS~Ue9>8=cVQg&OuZlDx>}T*MCLEJM*?C4(O@ zxq-pIF?q8DKEUK1?BY>O9$=2I3l1G4e>jW`0^rD!Ksg3SK1=@r4$jqwj$Mw-ClZc6 z7LI}A2n)Xo$1y4FGXur@7|cZRS=#bEi#yl0c%QZ<>_sg{iIsM9>-f`0XIIDal}nqK zwsoPTowetoWCM3N$)1A}3U=rnY-+>u6>akEt4{}X-yz{eBz#Ilr$&4u9&v@mmRw;o z-6;8*K_f~jPm1qOlv>1_u1HsD$_S$=HPg%3rhx88Bo-m@7P7fRBi0Nbi7d(IV5x%* z?nY@jgY_tFVDJb^myNKUI@8(X3HTuBmH0doKN?V7K2K}ZXT#P#vL5rh*w`~Dbu)Mn zr3V-sL+NQQ{zE9eHdNsi&Rg4>Z);oJg)&N%n*A%3#jyM-lvOfkAIjP#Q0q~)gFdPa zm$YQnsui661;B))e=+W~q^9nZ z5&I@$>H!A8)T0d2G4-?zXc?v{%*e*HMbf>m5z{s?Fk#vr27#D%kUPi>1mWklSbHw`=SYR66G5? z!e*3jW-uA$yBM^goYE4?qbQ$ui8;4oI*l>KGZoWY8BE9YE(VpDPIf4+A26NL8LDqu z*{YRo{6W-r6OaYlV%WA(SodqhE;0G;@Z1?RhE&O|m_dCbuo5#Y40d1!^^G_WVMYyu zhcRQd*m!qd?PCDFfBhJ?e~~?U`^3cPIQj}|#s-#r6f{s4jX3>T+Ax+b zb9SJzoOsIHsGKiWZ?w96&qMbvVvZrUfb6}i5mU%s(S6dYQIDAi#Z&i0yT2!s3Nyy`)YWd2p=2c7hxLUas zRXl>mUR3QDwf8Nu8n-}q7-4TA>=UxT)k}m=5~uES=2lbhC?kPtJA+PC(^)7e4peVs z(1q$_4A!Cggt)LZ({6kbx@QpnAi@ukK^j^Q@vN*+wVWr_IDqQ24BV)`Alwf`+Kn`S zM-hGo;WCQ%G=iQf4%B!`a~?HWtn?ge3dN6`TCB!Tq5CaDe~r-RN$E2$VF?oJ?qBSx z>1E-sP(y)|&$m(2$AP|ynsW@!qBfYpJE)~L44n)~ISDkTel&7V!14!JJ|Kcd&O>}S zd{~hjpHsCwtA63Al{c7b{1&wh^c^nSt99>nxcd$zIoMms33LY#7L2foWN)cPI7XOD^qM=tR@za^jrFTUE!9?rH=Vz-Pika) z8=!jW(tljXFwZsIuwu z{aM1z9R6$2Z9!lU0_ouOdtDwfsk+p2m@y{Uz#SkR)4FA)?dYIbCc+^xB;dai(f4eGf9{&v*U+zjQCl0YvSIsaDZwj-z=LH82T zrV*Qm`^u6$)b(5*|65Sc;0~&06>-+D5P9W$wg5Dzs zyEWp1>{5fBvwR2*g$&lAp^RD^wcu&!b|UCU1V@n0A&rP;olPuy5Dk3{`p~dvL|*i6 zVMR-4f=#A&0=kC~oQmK{M7*pKRs1W|w(X(f{cV=QhD&VaJv3Zp@B$jHa|X|0Rt!7G0|=ION6+B z5we@8y&ei7XJlZ97xw$ZGRG|=Gmplc{S5pt=ZNSP)(CojK7vtOG3wC))m)?zM~6D_ z7ZH}*Xk?uRGzK%sM`Mf((42?HE(Qf?>|;=f#v>wfM?%CJ==NgNM+nuCUHY)(A=0Vt zeN!80CMlT5(RiA{{b;0G5a%h(O<`~db7|g020sbg)~t25W9}lVK%Yn(n>X&J!W_)q zEYfx+xy+|@x5Km#rf0~_e|zy8G`Mq*v7wWgOU{NWmsV9>*HA8NWJdzw)Q@J!65Q-+c z6Uh2kXqrFL=$t9uzyfYb*R6-C9;ObmYV+cr5mr5-9;>U_YBrj>83dqd<4CLZ4bv+t zWf234bv-ck!t@KmC0_g+@x_Cb?k-lHh9;i8fOIq+ppJTfa+E)T@+ae{;2cC4gN zMC~%??Yb5i9rTZIzZcJ!s*6ZvC>q_M1I={b40DQ!5$t7D_UQ&aAvaq!8P8h@G}D|6 z&Fkn!?@NB340r{GeDwC9w~vTFYs4P$z^=$C&MdC?X*g-BXe186NhPHeGTT;mb+om0 z=5%#;Nh9yWa1(m>qW1+NKG29)C;?}U_+nRtHQ+J~6LH7QxTA(7KGBHPbRGC~fEt)MlJTB=KD5x8K@na@OD{RJ z#@k_VlJs3Z@(;Z~4;(X+F@gNfv$X7BpVQE?he0}8_KU3#$HdKpVX@S^RsOk)l;@9R zh^Mz%#f68L#I;;vwfoR=mBCW9Tz9+s`_;fbXgzbd^%rYl3H(c+{hiIf$-EeCd^@cE qfWF`j(<<@l9(!`&8*Viq#jX1KyZeniT78BeEkpo?%xCe diff --git a/main.ml b/main.ml index b9c1383..8282a81 100755 --- a/main.ml +++ b/main.ml @@ -1,4 +1,10 @@ (*#! /home/alexandre/.opam/myswitch/bin/ocaml *) +(* +TODO : +- deal with double bombing (DONE) +- well shit ==> dash (DONE (needs dash to be fixed tho)) +- deeper analysis on pathfinfing +*) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) @@ -103,6 +109,8 @@ exception ReturnBool of bool ;; let current_status = ref BlowUpCrates ;; let action = ref 0 ;; +let dash_left = ref 0 ;; + let equal_pt (p1 : pt) (p2 : pt) = p1.x = p2.x && p1.y = p2.y ;; @@ -194,21 +202,32 @@ let rec ln_b b = function let get_meta_info (pid : int) = let ptr = open_in ("main_"^(string_of_int pid)^".sav") in - match (int_of_string (input_line ptr)) with + let fct0 () = match (int_of_string (input_line ptr)) with | 0 -> current_status := EscapeDeath | 1 -> current_status := BlowUpCrates | 2 -> current_status := ClaimLand | 3 -> current_status := KillPlayers - | _ -> current_status := EscapeDeath ; - close_in ptr ;; + | _ -> current_status := EscapeDeath + in + fct0 () ; + try + let resu = int_of_string (input_line ptr) in + dash_left := resu -1; + close_in ptr + with + | End_of_file -> close_in ptr ;; let set_meta_info (pid : int) = let ptr = open_out ("main_"^(string_of_int pid)^".sav") in - match !current_status with + let fct0 () = match !current_status with | EscapeDeath -> Printf.fprintf ptr "0" | BlowUpCrates -> Printf.fprintf ptr "1" | ClaimLand -> Printf.fprintf ptr "2" - | KillPlayers -> Printf.fprintf ptr "3" ; + | KillPlayers -> Printf.fprintf ptr "3" + in + fct0 () ; + if !dash_left > 0 then + Printf.fprintf ptr "\n%d" !dash_left ; close_out ptr ;; (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) @@ -329,21 +348,6 @@ let evaluate_dangers (gd : game_data) = done done ; - (* add players *) - for p = 0 to gd.nplayers -1 do - if p <> gd.player_id then begin - let player_dgr = (Danger (gd.dt +. 5.5)) in - for d = 0 to 3 do - for o = 0 to gd.players.(p).bomb_radius do - let nx = gd.players.(p).xy.x + o*(fst order.(d)) - and ny = gd.players.(p).xy.y + o*(snd order.(d)) in - if is_valid nx ny lines cols then - res.(nx).(ny) <- danger_priority res.(nx).(ny) player_dgr ; - done - done - end - done; - (* add bonuses *) for b = 0 to gd.nboosts -1 do res.(gd.boosts.(b).xy.x).(gd.boosts.(b).xy.y) <- danger_priority (res.(gd.boosts.(b).xy.x).(gd.boosts.(b).xy.y)) Bonus @@ -365,12 +369,12 @@ let evaluate_dangers (gd : game_data) = (* add bomb tiles *) let exploded = Hashtbl.create 12 in for b = 0 to gd.nbombs -1 do - let dgr = warn_level gd.bombs.(b) gd.dt in - let halt = ref false in - let bx = gd.bombs.(b).xy.x and by = gd.bombs.(b).xy.y in + let dgr = danger_priority (warn_level gd.bombs.(b) gd.dt) (res.(bx).(by)) in (* be careful of chained bombs *) + let halt = ref false in + for dir = 0 to 3 do for w = 0 to gd.bombs.(b).size do let cx = bx + w*(fst order.(dir)) @@ -392,6 +396,21 @@ let evaluate_dangers (gd : game_data) = done done; + (* add players *) + for p = 0 to gd.nplayers -1 do + if p <> gd.player_id then begin + let player_dgr = danger_priority (Danger (gd.dt +. 5.5)) (res.(gd.players.(p).xy.x).(gd.players.(p).xy.y)) in + for d = 0 to 3 do + for o = 0 to gd.players.(p).bomb_radius do + let nx = gd.players.(p).xy.x + o*(fst order.(d)) + and ny = gd.players.(p).xy.y + o*(snd order.(d)) in + if is_valid nx ny lines cols then + res.(nx).(ny) <- danger_priority res.(nx).(ny) player_dgr ; + done + done + end + done; + res ;; (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) @@ -588,7 +607,7 @@ let move_explore (gd: game_data) (dgs : danger array array) = let (cxi, cyi) = (gd.players.(pid).xy.x, gd.players.(pid).xy.y) in let move_with_caution (exit : bool) = - let res = has_a_safe_path_origin_2 cxi cyi lines cols gd.dt interval gd dgs [|Bonus|] [||] [|Blocked|] [||] 5 in + let res = has_a_safe_path_origin_2 cxi cyi lines cols gd.dt interval gd dgs [|Bonus|] [||] [|Blocked|] [||] 7 in if res <> 4 then begin if debug_all then Printf.fprintf stderr "[crates] success 1/2!\n" ; res @@ -612,9 +631,10 @@ let move_explore (gd: game_data) (dgs : danger array array) = (* simulate the placement of a bomb, and test if that stills allows safe escape *) let bomb_hash = Hashtbl.create (4 * (bsize +1)) in let saved_dgs = Hashtbl.create (4 * (bsize +1)) in + let bomb_dgr = (danger_priority (Danger (gd.dt +. 5.5)) dgs.(bx).(by)) in for dir = 0 to 3 do for w = 0 to bsize do - Hashtbl.add bomb_hash (bx + w*(fst order.(dir)), by + w*(snd order.(dir))) (Danger (gd.dt +. 5.5)) ; + Hashtbl.add bomb_hash (bx + w*(fst order.(dir)), by + w*(snd order.(dir))) bomb_dgr ; done done; Hashtbl.iter @@ -713,9 +733,10 @@ let move_claim (gd : game_data) (dgs : danger array array) (gns : int array arra let bomb_hash = Hashtbl.create (4 * (bsize +1)) in let saved_dgs = Hashtbl.create (4 * (bsize +1)) in + let bomb_dgr = danger_priority (Danger (gd.dt +. 5.5)) (dgs.(gd.players.(pid).xy.x).(gd.players.(pid).xy.y)) in for dir = 0 to 3 do for w = 0 to bsize do - Hashtbl.add bomb_hash (cxi + w*(fst order.(dir)), cyi + w*(snd order.(dir))) (Danger (gd.dt +. 5.5)) ; + Hashtbl.add bomb_hash (cxi + w*(fst order.(dir)), cyi + w*(snd order.(dir))) bomb_dgr ; done done; Hashtbl.iter @@ -769,7 +790,7 @@ let move_safe (gd : game_data) (dgs : danger array array) (gns : int array array try (* 0. if you're standing on a safe tile, switch mode *) let (cx, cy) = (gd.players.(pid).xy.x, gd.players.(pid).xy.y) in - if dgs.(cx).(cy) = Safe then begin + if (!dash_left = 0) && dgs.(cx).(cy) = Safe then begin if contains_crate gd then begin current_status := BlowUpCrates ; raise (ReturnInt (move_explore gd dgs)) ; @@ -782,13 +803,25 @@ let move_safe (gd : game_data) (dgs : danger array array) (gns : int array array (*let result = has_a_safe_path (cx) (cy) gd.dt in*) let result = has_a_safe_path_origin_2 cx cy lines cols gd.dt interval gd dgs [|Bonus|] [||] [|Blocked|] [||] 20 in - if result <> 4 then result else begin + if (!dash_left = 0) && result <> 4 then + result + else begin let result2 = has_a_safe_path_origin_2 cx cy lines cols gd.dt interval gd dgs [|Safe|] [||] [|Blocked|] [||] 80 in - if result2 <> 4 then result2 + if (!dash_left = 0) && result2 <> 4 then + result2 else begin - (* you're probably dead if the code reaches here... *) - Printf.fprintf stderr "well shit\n" ; - 4 + (* you're probably dead if the code reaches here, unless... *) + if (!dash_left > 0) || gd.players.(pid).ndash > 0 then begin + Printf.fprintf stderr "*teleports*\n" ; + if (!dash_left = 0) then + action := 2 ; + dash_left := 3 ; + has_a_safe_path_origin_2 cx cy lines cols (gd.dt -. interval *. float_of_int (!dash_left)) interval gd dgs [|Safe|] [||] [|Blocked|] [||] 80 + end + else begin + Printf.fprintf stderr "well shit\n" ; + 4 + end end end with diff --git a/main_0.sav b/main_0.sav index c227083..56a6051 100644 --- a/main_0.sav +++ b/main_0.sav @@ -1 +1 @@ -0 \ No newline at end of file +1 \ No newline at end of file diff --git a/main_1.sav b/main_1.sav index c227083..56a6051 100644 --- a/main_1.sav +++ b/main_1.sav @@ -1 +1 @@ -0 \ No newline at end of file +1 \ No newline at end of file diff --git a/main_2.sav b/main_2.sav index d8263ee..56a6051 100644 --- a/main_2.sav +++ b/main_2.sav @@ -1 +1 @@ -2 \ No newline at end of file +1 \ No newline at end of file diff --git a/main_3.sav b/main_3.sav index c227083..56a6051 100644 --- a/main_3.sav +++ b/main_3.sav @@ -1 +1 @@ -0 \ No newline at end of file +1 \ No newline at end of file diff --git a/sortie.txt b/sortie.txt index e69de29..6ad1e30 100644 --- a/sortie.txt +++ b/sortie.txt @@ -0,0 +1 @@ +2 2 \ No newline at end of file