Files
zhichun-project/CTF/backend/lib/__pycache__/game_engine.cpython-312.pyc

59 lines
11 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><>Oi<4F><00><00>h<00>ddlZddlmZddlZddlZddlZddlZddlZddlm Z Gd<04>de<02>Z
d<06>Z y)<07>N)<01>ABC)<01> clear_outputc<00>f<00>eZdZdd<01>Zd<02>Zd<03>Zd<04>Zd<05>Zd<06>Zd<07>Z dd<08>Z
dd <09>Z dd <0B>Z d <0C>Z ed <0A><00>Zy
)<12>GameMapc<00><><00>d|_d|_|jdz |_t<00>|_g|_g|_d|_d|_d|_ ||_
y)zL
@show_gap: how many milliseconds when show can be invoked
r<00><00><00><00><><EFBFBD>N) <0B>width<74>height<68> middle_line<6E>set<65>walls<6C>players<72>flags<67> current_time<6D>next_show_time<6D> my_team_name<6D>show_gap_in_msec)<02>selfrs <20>?/Users/liuhaiyan/zhichun-project/CTF/backend/lib/game_engine.py<70>__init__zGameMap.__init__ sY<00><00><17><04>
<EFBFBD><17><04> <0B><1F>:<3A>:<3A><01>><3E><04><18><18>U<EFBFBD><04>
<EFBFBD><19><04> <0C><17><04>
<EFBFBD><1F><04><19>"<22><04><1B><1E><04><19> 0<><04><1D>c<00><><00>|d}d|_d|_|d|_|d|_|jdz |_|j dd<08>|_|j d g<00>|j d
g<00>zD<00>chc] }|d |d f<02><02>c}|_|j d g<00>D<00>chc] }|d |d f<02><02>c}|_|j dg<00>D<00>chc] }|d |d f<02><02>c}|_ |j dg<00>D<00>chc] }|d |d f<02><02>c}|_
|j dg<00>D<00>chc] }|d |d f<02><02>c}|_ ycc}wcc}wcc}wcc}wcc}w)N<>mapr r
r r r<00>
myteamNamer r<00> obstacles<65>x<>y<> myteamPrison<6F>opponentPrison<6F> myteamTarget<65>opponentTarget) rrr r r<00>getrr<00>my_team_prison<6F>opponent_team_prison<6F>my_team_target<65>opponent_team_target)r<00>req<65>map_data<74>ws r<00>initz GameMap.initst<00><00><16>u<EFBFBD>:<3A><08><1F><04><19>"<22><04><1B><1D>g<EFBFBD>&<26><04>
<EFBFBD><1E>x<EFBFBD>(<28><04> <0B><1F>:<3A>:<3A><01>><3E><04><18><1F>G<EFBFBD>G<EFBFBD>L<EFBFBD>"<22>5<><04><19>19<31><1C><1C>g<EFBFBD>r<EFBFBD>1J<31>X<EFBFBD>\<5C>\<5C>Ze<5A>gi<67>Mj<4D>1j<31>l<>1j<31>1<EFBFBD>q<EFBFBD><13>v<EFBFBD>q<EFBFBD><13>v<EFBFBD>&<26>1j<31>l<><04>
<EFBFBD>:=<3D>'<27>'<27>.<2E>RT<52>:U<>W<>:U<>A<EFBFBD><01>#<23><06><01>#<23><06>/<2F>:U<>W<><04><1B>@C<><07><07>HX<48>Z\<5C>@]<5D>$_<>@]<5D>!<21>a<EFBFBD><03>f<EFBFBD>a<EFBFBD><03>f<EFBFBD>%5<>@]<5D>$_<><04>!<21>:=<3D>'<27>'<27>.<2E>RT<52>:U<>W<>:U<>A<EFBFBD><01>#<23><06><01>#<23><06>/<2F>:U<>W<><04><1B>@C<><07><07>HX<48>Z\<5C>@]<5D>$_<>@]<5D>!<21>a<EFBFBD><03>f<EFBFBD>a<EFBFBD><03>f<EFBFBD>%5<>@]<5D>$_<><04>!<21><> m<01><>W<><57>$_<><5F>W<><57>$_s<00>:E<04>'E <04>E<04>E<04>.Ec<00><00>|d|jkry|d|_g|_|jdg<00>D]"}d|d<|jj|<02><00>$|jdg<00>D]"}d|d<|jj|<02><00>$g|_|jdg<00>D]"}d|d<|jj|<03><00>$|jdg<00>D]"}d|d<|jj|<03><00>$y) N<>timeF<65> myteamPlayerT<72>mine<6E>opponentPlayer<65>
myteamFlag<EFBFBD> opponentFlag)rrr%<00>appendr)rr*<00>p<>fs r<00>updatezGameMap.update+s<><00><00> <0E>v<EFBFBD>;<3B><14>*<2A>*<2A> *<2A><18><1F><06>K<EFBFBD><04><19><19><04> <0C><14><17><17><1E><12>,<2C>A<EFBFBD><1C>A<EFBFBD>f<EFBFBD>I<EFBFBD> <10>L<EFBFBD>L<EFBFBD> <1F> <1F><01> "<22>-<2D><15><17><17>)<29>2<EFBFBD>.<2E>A<EFBFBD><1D>A<EFBFBD>f<EFBFBD>I<EFBFBD> <10>L<EFBFBD>L<EFBFBD> <1F> <1F><01> "<22>/<2F><18><04>
<EFBFBD><14><17><17><1C>r<EFBFBD>*<2A>A<EFBFBD><1C>A<EFBFBD>f<EFBFBD>I<EFBFBD> <10>J<EFBFBD>J<EFBFBD> <1D> <1D>a<EFBFBD> <20>+<2B><15><17><17><1E><12>,<2C>A<EFBFBD><1D>A<EFBFBD>f<EFBFBD>I<EFBFBD> <10>J<EFBFBD>J<EFBFBD> <1D> <1D>a<EFBFBD> <20>-<2D>rc<00><><00>|jD<00>cgc])}|d|k(s<01> |dk(s |d|k(s<01>|dk(s |d|k(s<01>(|<04><02>+c}Scc}w)a<>
mine: True or False. If True, return players on my side, otherwise return opponent players;
inPrison: True or False or None. If True, return players that are in prison; if false, return players that can move around freely; if none, return all of them.
hasFlag: True or False or None. If True, return players that have flags; if false, return players that do not have flags; if none, return all of them.
r1N<>inPrison<6F>hasFlag)r)rr1r:r;r6s r<00> list_playerszGameMap.list_playersAs<><00><00>  <20><<3C><<3C>c<02><<3C>a<EFBFBD>1<EFBFBD>V<EFBFBD>9<EFBFBD><04>+<<3C>(<28>d<EFBFBD>BR<42>VW<56>Xb<58>Vc<56>go<67>Vo<56>v}<7D>BF<02>wF<02>JK<02>LU<02>JV<02>Za<02>Ja<02><01><<3C>c<02> c<02><>cs<00> A<04> A<04> A<04>Ac<00>n<00>|jD<00>cgc]}|d|k(s<01> |dk(s |d|k(s<01>|<03><02>c}Scc}w)aX
mine: True or False. If True, return flags on my side (i.e., flags I should protect), otherwise return opponent's flags (i.e., flags I should pick up);
canPickup: True or False or None. If True, return flags that can be picked up; if false, return flags that are already placed in my camp; if none, return all of them.
r1N<> canPickup)r)rr1r>r7s r<00>
list_flagszGameMap.list_flagsIsA<00><00>  <20>:<3A>:<3A>r<>:<3A>a<EFBFBD><11>6<EFBFBD><19>d<EFBFBD>):<3A> <09>T<EFBFBD>@Q<>UV<55>Wb<57>Uc<55>gp<67>Up<55><01>:<3A>r<>r<><72>rs <00> 2<04> 2<04>2c<00>6<00>|r |jS|jS<00>N)r(r)<00>rr1s r<00> list_targetszGameMap.list_targetsQ<00><00><00> <0F><17>&<26>&<26> &<26><17>,<2C>,<2C> ,rc<00>6<00>|r |jS|jSrA)r&r'rBs r<00> list_prisonszGameMap.list_prisonsWrDrc<00>:<00>||f|jvry|s"||f|jvry||f|jvry|s"||f|jvry||f|jvry|j
D]}|d|k(s<01> |d|k(s<01>|ddzcS|j D]?}|d|k(s<01> |d|k(s<01>|dr |j}n|jd k(rd
nd }|<07>d <0B>cS|r"||f|jvry||f|jvry|r"||f|jvry||f|jvryy ) z<>
flags could overlap with targets, and players could overlap with prisons.
These are controlled by @flag_over_target and @player_over_prison.
u██ zPP zTT <20>posX<73>posY<73>name<6D> r1<00>L<>RzF z . )rr&r'r(r)rrr)rrr <00>flag_over_target<65>player_over_prisonr6r7<00>teams r<00>get_object_at_XYzGameMap.get_object_at_XY]sQ<00><00>
<0E>q<EFBFBD>6<EFBFBD>T<EFBFBD>Z<EFBFBD>Z<EFBFBD> <1F> <09>!<21><11>1<EFBFBD>v<EFBFBD><14>,<2C>,<2C>,<2C>U<EFBFBD><11>1<EFBFBD>v<EFBFBD><14>2<>2<>2<>5<EFBFBD><1F><11>1<EFBFBD>v<EFBFBD><14>,<2C>,<2C>,<2C>U<EFBFBD><11>1<EFBFBD>v<EFBFBD><14>2<>2<>2<>5<EFBFBD><16><1C><1C>A<EFBFBD><10><16>y<EFBFBD>A<EFBFBD>~<7E>!<21>F<EFBFBD>)<29>q<EFBFBD>.<2E><18><16>y<EFBFBD>3<EFBFBD><EFBFBD>&<26><1E>
<16><1A><1A>A<EFBFBD><10><16>y<EFBFBD>A<EFBFBD>~<7E>!<21>F<EFBFBD>)<29>q<EFBFBD>.<2E><14>V<EFBFBD>9<EFBFBD><1F>,<2C>,<2C>D<EFBFBD>"&<26>"3<>"3<>s<EFBFBD>":<3A>3<EFBFBD><03>D<EFBFBD><1E><16>r<EFBFBD>{<7B>"<22> <1C> <1E><11>1<EFBFBD>v<EFBFBD><14>,<2C>,<2C>,<2C>U<EFBFBD><11>1<EFBFBD>v<EFBFBD><14>2<>2<>2<>5<EFBFBD> <1B><11>1<EFBFBD>v<EFBFBD><14>,<2C>,<2C>,<2C>U<EFBFBD><11>1<EFBFBD>v<EFBFBD><14>2<>2<>2<>5<EFBFBD>rc <00><><00>|j|jkr|sy|s
t<00>ddjt |j
<00>D<00>cgc]}|d<04><04><02>c}<05>z}t |<06>t |j<00>D]D}|d<04>d<03>}t |j
<00>D]}||j||||<04>z }<08>t |<08><00>F|j|jz|_ycc}w)z<>
Prints the grid with L1, R2, LF, RF labels.
flags could overlap with targets, and players could overlap with prisons.
These are controlled by @flag_over_target and @player_over_prison.
Nz rK<00>2)
rrr<00>join<69>ranger <00>printr rQr) r<00>force<63> do_not_clearrNrOr<00>headerr <00>rows r<00>showz GameMap.show<6F>s<><00><00> <10> <1C> <1C>t<EFBFBD>2<>2<> 2<>E<EFBFBD> <12><1B> <18>N<EFBFBD><16><13><18><18>U<EFBFBD>4<EFBFBD>:<3A>:<3A>5F<35>"G<>5F<35><01>a<EFBFBD><01>U<EFBFBD>8<EFBFBD>5F<35>"G<>H<>H<><06> <0A>f<EFBFBD> <0A><16>t<EFBFBD>{<7B>{<7B>#<23>A<EFBFBD><16>q<EFBFBD>E<EFBFBD><11>)<29>C<EFBFBD><1A>4<EFBFBD>:<3A>:<3A>&<26><01><13>t<EFBFBD>,<2C>,<2C>Q<EFBFBD><01>3C<33>EW<45>X<>X<><03>'<27> <11>#<23>J<EFBFBD> $<24>
#<23>/<2F>/<2F>$<24>2G<32>2G<32>G<><04><1B><>#Hs<00> C&
Nc<00><><00>|r t|<03>n t<00>}tj|gg<01>}|h}|r<>|j<00>}|d}||k(r|SdD]<5D>\} }
|d| z|d|
zf} d| dcxkr|jks<01>/n<00>2d| dcxkr|j
ks<01>Kn<00>N| |j vs<01>]| |vs<01>b| |vs<01>g|j|| gz<00>|j| <0B><00><>|r<01><>gS)N<><4E><EFBFBD><EFBFBD><EFBFBD>))rr])r<00>)r]r)r^rrr^) r<00> collections<6E>deque<75>popleftr r rr5<00>add) r<00>srcXY<58>dstXY<58>extra_obstacles<65>extras<61>queue<75>seen<65>path<74>curr<72>dx<64>dy<64>nxts r<00>route_tozGameMap.route_to<74>s<><00><00>)8<><13>_<EFBFBD>%<25>c<EFBFBD>e<EFBFBD><06><1B>!<21>!<21>E<EFBFBD>7<EFBFBD>)<29>,<2C><05><15>w<EFBFBD><04><13><18>=<3D>=<3D>?<3F>D<EFBFBD><17><02>8<EFBFBD>D<EFBFBD><13>u<EFBFBD>}<7D><1B> <0B><<3C><06><02>B<EFBFBD><1B>A<EFBFBD>w<EFBFBD><12>|<7C>T<EFBFBD>!<21>W<EFBFBD>r<EFBFBD>\<5C>2<><03><15><13>Q<EFBFBD><16>,<2C>$<24>*<2A>*<2A>,<2C><11>c<EFBFBD>!<21>f<EFBFBD>1J<31>t<EFBFBD>{<7B>{<7B>1J<31><17>t<EFBFBD>z<EFBFBD>z<EFBFBD>)<29>c<EFBFBD><16>.?<3F>C<EFBFBD>t<EFBFBD>O<EFBFBD><19>L<EFBFBD>L<EFBFBD><14><13><05><1C>.<2E><18>H<EFBFBD>H<EFBFBD>S<EFBFBD>M<EFBFBD> =<3D> <14><12> rc<00>&<00>|d|jkS)Nr)r)rrcs r<00>
is_on_leftzGameMap.is_on_left<66>s<00><00><14>Q<EFBFBD>x<EFBFBD>$<24>*<2A>*<2A>*<2A>*rc<00>`<00>|d|dz
}|d|dz
}|dk(ry|dk(ry|dk(ry|dk(ryy) z5Helper to convert two points into a direction string.rr^<00>rightr]<00>left<66>down<77>upr <00>)<04> currentXY<58>nextXYrkrls r<00> get_directionzGameMap.get_direction<6F>sO<00><00><14>A<EFBFBD>Y<EFBFBD><19>1<EFBFBD><1C> %<25><02> <13>A<EFBFBD>Y<EFBFBD><19>1<EFBFBD><1C> %<25><02> <0A><11>7<EFBFBD>7<EFBFBD> <0A><12>8<EFBFBD>F<EFBFBD> <0A><11>7<EFBFBD>6<EFBFBD> <0A><12>8<EFBFBD>D<EFBFBD>r)g@<40>@)FF)FFFFrA)<10>__name__<5F>
__module__<EFBFBD> __qualname__rr-r8r<r?rCrFrQr[rnrp<00> staticmethodryrvrrrr sR<00><00> 1<> `<01> <14>,c<02>s<01>-<2D> -<2D> "<15>HH<01>&<12>&+<2B><12><12><12>rrc<00><00><<00><00><01><02><03>K<00>tj<00><00><05><03><05><02><00>fd<01>}td<02><00>d<03><03>tj|d<04><00>4<00>d{<00><02><03>t j <00><00>d{<00><03><03>ddd<00><00>d{<00><02><03>y7<00>17<00>7<00> #1<00>d{<00><03><03>7swYyxYw<01>w)Nc<00><00><><00>K<00>td<01><08><00><02>|23d{<00><03><03>}tj|<01>}|jd<02>}|dk(r<14>5<00> |<02>ddd<00><00>H|dk(rB<72>5<00>|<02>}|j tj
d|i<01><00><00>d{<00><03><03>ddd<00><00><>|dk(s<01><><EFBFBD>5<00>|<02>ddd<00><00><>7<00><>#1swY<00><>xYw7<00>5#1swY<00><>xYw#1swY<00><>xYw6y<00>w)NzConnected on port <20>actionr-<00>statusr<00>finished)rV<00>json<6F>loadsr%<00>send<6E>dumps)
<EFBFBD> websocket<65>msgr*r<><00>moves<65>end_fn<66>lock<63>plan_fn<66>port<72>start_fns
<20><><EFBFBD><EFBFBD><EFBFBD>r<00>handlerz run_game_server.<locals>.handler<65>s<><00><><00><><00> <0A>"<22>4<EFBFBD>&<26>)<29>*<2A>"<22> <20>#<23><16>*<2A>*<2A>S<EFBFBD>/<2F>C<EFBFBD><18>W<EFBFBD>W<EFBFBD>X<EFBFBD>&<26>F<EFBFBD><15><16><1F><19><1C>S<EFBFBD>M<EFBFBD><1A>T<EFBFBD><17>8<EFBFBD>#<23><19>#<23>C<EFBFBD>L<EFBFBD>E<EFBFBD>#<23>.<2E>.<2E><14><1A><1A>Y<EFBFBD><05>4F<34>)G<>H<>H<>H<><1A>T<EFBFBD><18>:<3A>%<25><19><1A>3<EFBFBD>K<EFBFBD><1A>T<EFBFBD> <20><><1A>T<EFBFBD><54>
I<01><><1A>T<EFBFBD><54><1A>T<EFBFBD><54>#<23>s<00>C'<01>C%<02>B=<06>C%<02>.C'<01>
B?<05>C'<01>#2C <05>C <08>C <05>C'<01>)C'<01>+ C<05>4 C'<01>=C%<02>?C <09>C'<01> C <05> C <09>C'<01>C" <09> C'zStarting server on port z...z0.0.0.0)<07> threading<6E>LockrV<00>
websockets<EFBFBD>serve<76>asyncio<69>Future)r<>r<>r<>r<>r<>r<>s```` @r<00>run_game_serverr<72><00>su<00><><00><><00> <14>><3E>><3E> <1B>D<EFBFBD> <20> <20> 
<EFBFBD> $<24>T<EFBFBD>F<EFBFBD>#<23>
.<2E>/<2F><19><1F><1F><07><19>D<EFBFBD>9<>9<><15>n<EFBFBD>n<EFBFBD><1E><1E><1E>:<3A>9<>9<><39><1E><>:<3A><>9<>9<>9<>sZ<00>AB<01>B<06>B<01>B<03>+B<06>,B<03>0 B<01>;B<04><B<01>B<03>B<01>B<07> B <0C>B<07>B) r<><00>abcrr_r<>r<><00>randomr<6D><00>IPython.displayrrr<>rvrr<00><module>r<>s1<00><01><0E><13><12> <0B><10> <0A><11>(<28>h<12>c<EFBFBD>h<12>Vr