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

69 lines
12 KiB
Plaintext
Raw Normal View History

new file: .DS_Store new file: CTF/.ipynb_checkpoints/fixed_map_example-checkpoint.png new file: CTF/.ipynb_checkpoints/random_map_example-checkpoint.png new file: CTF/CTF/README.md new file: CTF/CTF/backend/example_init.json new file: CTF/CTF/backend/example_plan_next_actions.json new file: CTF/CTF/backend/lib/game_engine.py new file: CTF/CTF/backend/main.ipynb new file: CTF/CTF/backend/pick_closest_flag.py new file: CTF/CTF/backend/pick_flag_ai.py new file: CTF/CTF/backend/python_tutorial.ipynb new file: CTF/CTF/backend/start.sh new file: CTF/CTF/backend/test_lib.ipynb new file: CTF/CTF/fixed_map_example.png new file: CTF/CTF/frontend/assets/characters.png new file: CTF/CTF/frontend/assets/characters_red_flag.png new file: CTF/CTF/frontend/assets/characters_yellow_flag.png new file: CTF/CTF/frontend/assets/red_flag_16_16.png new file: CTF/CTF/frontend/assets/red_flag_32_32.png new file: CTF/CTF/frontend/assets/tilemap.json new file: CTF/CTF/frontend/assets/tilemap.tmx new file: CTF/CTF/frontend/assets/tiles.png new file: CTF/CTF/frontend/assets/yellow_flag_16_16.png new file: CTF/CTF/frontend/assets/yellow_flag_32_32.png new file: CTF/CTF/frontend/game_config.json new file: CTF/CTF/frontend/index.html new file: CTF/CTF/frontend/phaser.js new file: CTF/CTF/frontend/project.config new file: CTF/CTF/frontend/src/assets.js new file: CTF/CTF/frontend/src/gameObjects/Flag.js new file: CTF/CTF/frontend/src/gameObjects/Player.js new file: CTF/CTF/frontend/src/main.js new file: CTF/CTF/frontend/src/scenes/Boot.js new file: CTF/CTF/frontend/src/scenes/Game.js new file: CTF/CTF/frontend/src/scenes/GameOver.js new file: CTF/CTF/frontend/src/scenes/Preloader.js new file: CTF/CTF/frontend/start.sh new file: CTF/CTF/random_map_example.png new file: CTF/README.md new file: CTF/backend/.ipynb_checkpoints/main-checkpoint.ipynb new file: CTF/backend/.ipynb_checkpoints/pick_closest_flag-checkpoint.py new file: CTF/backend/.ipynb_checkpoints/pick_flag_ai-checkpoint.py new file: CTF/backend/.ipynb_checkpoints/python_tutorial-checkpoint.ipynb new file: CTF/backend/.ipynb_checkpoints/start-checkpoint.sh new file: CTF/backend/.ipynb_checkpoints/test_lib-checkpoint.ipynb new file: CTF/backend/example_init.json new file: CTF/backend/example_plan_next_actions.json new file: CTF/backend/lib/__pycache__/game_engine.cpython-313.pyc new file: CTF/backend/lib/game_engine.py new file: CTF/backend/main.ipynb new file: CTF/backend/pick_closest_flag.py new file: CTF/backend/pick_flag_ai.py new file: CTF/backend/python_tutorial.ipynb new file: CTF/backend/start.sh new file: CTF/backend/test_lib.ipynb new file: CTF/fixed_map_example.png new file: CTF/frontend/.ipynb_checkpoints/game_config-checkpoint.json new file: CTF/frontend/assets/.ipynb_checkpoints/tilemap-checkpoint.json new file: CTF/frontend/assets/characters.png new file: CTF/frontend/assets/characters_red_flag.png new file: CTF/frontend/assets/characters_yellow_flag.png new file: CTF/frontend/assets/red_flag_16_16.png new file: CTF/frontend/assets/red_flag_32_32.png new file: CTF/frontend/assets/tilemap.json new file: CTF/frontend/assets/tilemap.tmx new file: CTF/frontend/assets/tiles.png new file: CTF/frontend/assets/yellow_flag_16_16.png new file: CTF/frontend/assets/yellow_flag_32_32.png new file: CTF/frontend/game_config.json new file: CTF/frontend/index.html new file: CTF/frontend/phaser.js new file: CTF/frontend/project.config new file: CTF/frontend/src/assets.js new file: CTF/frontend/src/gameObjects/Flag.js new file: CTF/frontend/src/gameObjects/Player.js new file: CTF/frontend/src/main.js new file: CTF/frontend/src/scenes/Boot.js new file: CTF/frontend/src/scenes/Game.js new file: CTF/frontend/src/scenes/GameOver.js new file: CTF/frontend/src/scenes/Preloader.js new file: CTF/frontend/start.sh new file: CTF/random_map_example.png
2025-12-27 15:59:21 +08:00
<EFBFBD>
<00><>Oi<4F><00><00>h<00>SSKrSSKJr SSKrSSKrSSKrSSKrSSKrSSKJ r "SS\5r
Sr g)<07>N)<01>ABC)<01> clear_outputc<00>v<00>\rSrSrSSjrSrSrSrSrSr Sr
SS jr SS
jr SS jr S r\S5rSrg )<14>GameMap<61> c<00><><00>SUlSUlURS- Ul[5Ul/Ul/UlSUlSUlSUl Xl
g)z<
@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>2/home/student/saved/CTF/backend/lib/game_engine.py<70>__init__<5F>GameMap.__init__ sW<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<><1D>c<00><><00>USnSUlSUlUSUlUSUlURS- UlUR SS5UlUR S /5UR S
/5-Vs1sH o3S US 4iM snUlUR S /5Vs1sH o3S US 4iM snUlUR S/5Vs1sH o3S US 4iM snUl UR S/5Vs1sH o3S US 4iM snUl
UR S/5Vs1sH o3S US 4iM snUl gs snfs snfs snfs snfs snf)N<>mapr
r r rr <00>
myteamNamer r<00> obstacles<65>x<>y<> myteamPrison<6F>opponentPrison<6F> myteamTarget<65>opponentTarget) rrr rr<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>init<69> GameMap.initsj<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><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>#<23><06><01>#<23><06>/<2F>:U<>W<><04><1B>@C<><07><07>HX<48>Z\<5C>@]<5D>$_<>@]<5D>!<21><03>f<EFBFBD>a<EFBFBD><03>f<EFBFBD>%5<>@]<5D>$_<><04>!<21>:=<3D>'<27>'<27>.<2E>RT<52>:U<>W<>:U<>A<EFBFBD>#<23><06><01>#<23><06>/<2F>:U<>W<><04><1B>@C<><07><07>HX<48>Z\<5C>@]<5D>$_<>@]<5D>!<21><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>6E&c<00>$<00>USUR:agUSUl/UlURS/5H#nSUS'URRU5 M% URS/5H#nSUS'URRU5 M% /UlURS/5H#nSUS'URRU5 M% URS/5H#nSUS'URRU5 M% g) N<>timeF<65> myteamPlayerT<72>mine<6E>opponentPlayer<65>
myteamFlag<EFBFBD> opponentFlag)rrr'<00>appendr)rr,<00>p<>fs r<00>update<74>GameMap.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>URVs/sH1oDSU:XdM US:Xd USU:XdMUS:Xd USU:XdM/UPM3 sn$s snf)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.
r4N<>inPrison<6F>hasFlag)r)rr4r>r?r9s r<00> list_players<72>GameMap.list_playersAs<><00><00>  <20><<3C><<3C>c<02><<3C>a<EFBFBD>V<EFBFBD>9<EFBFBD><04>+<<3C><01>(<28>d<EFBFBD>BR<42>VW<56>Xb<58>Vc<56>go<67>Vo<56><01>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>A
c<00>|<00>URVs/sH o3SU:XdM US:Xd USU:XdMUPM" sn$s snf)a@
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.
r4N<> canPickup)r)rr4rCr:s r<00>
list_flags<EFBFBD>GameMap.list_flagsIsA<00><00>  <20>:<3A>:<3A>r<>:<3A>a<EFBFBD>6<EFBFBD><19>d<EFBFBD>):<3A><01> <09>T<EFBFBD>@Q<>UV<55>Wb<57>Uc<55>gp<67>Up<55><01>:<3A>r<>r<><72>rs <00> 9<04> 9<04>9c<00>@<00>U(a UR$UR$<00>N)r*r+<00>rr4s r<00> list_targets<74>GameMap.list_targetsQ<00><00><00> <0F><17>&<26>&<26> &<26><17>,<2C>,<2C> ,rc<00>@<00>U(a UR$UR$rG)r(r)rHs r<00> list_prisons<6E>GameMap.list_prisonsWrKrc<00><><00>X4UR;agU(d$X4UR;agX4UR;agU(d$X4UR;agX4UR;agUR
H!nUSU:XdMUSU:XdMUSS-s $ UR HInUSU:XdMUSU:XdMUS(a URnOURS :XaS
OS nUS 3s $ U(a$X4UR;agX4UR;agU(a$X4UR;agX4UR;agg ) 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> r4<00>L<>RzF z . )rr(r)r*r+rrr)rr!r"<00>flag_over_target<65>player_over_prisonr9r:<00>teams r<00>get_object_at_XY<58>GameMap.get_object_at_XY]s?<00><00>
<0E>6<EFBFBD>T<EFBFBD>Z<EFBFBD>Z<EFBFBD> <1F> <09>!<21><11>v<EFBFBD><14>,<2C>,<2C>,<2C>U<EFBFBD><11>v<EFBFBD><14>2<>2<>2<>5<EFBFBD><1F><11>v<EFBFBD><14>,<2C>,<2C>,<2C>U<EFBFBD><11>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>v<EFBFBD><14>,<2C>,<2C>,<2C>U<EFBFBD><11>v<EFBFBD><14>2<>2<>2<>5<EFBFBD> <1B><11>v<EFBFBD><14>,<2C>,<2C>,<2C>U<EFBFBD><11>v<EFBFBD><14>2<>2<>2<>5<EFBFBD>rc <00><><00>URUR:aU(dgU(d
[5 SSR[ UR
5Vs/sHoUSPM sn5-n[ U5 [ UR5HDnUSS3n[ UR
5HnX<>RXWX45- nM [ U5 MF URUR-Ulgs snf)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 rS<00>2)
rrr<00>join<69>ranger <00>printrrYr) r<00>force<63> do_not_clearrVrWr!<00>headerr"<00>rows r<00>show<6F> 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><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>,<2C>,<2C>Q<EFBFBD>3C<33>X<>X<><03>'<27> <11>#<23>J<EFBFBD> $<24>
#<23>/<2F>/<2F>$<24>2G<32>2G<32>G<><04><1B><>#Hs<00> C4
Nc<00>
<00>U(a [U5O [5n[R"U//5nU1nU(a<>UR5nUSnX<>:XaU$SH<>up<>USU -USU
-4n SU Ss=::aUR:dM1O M5SU Ss=::aUR
:dMQO MUX<>R ;dMfX<>;dMmX<>;dMtURX{/-5 URU 5 M<> U(aM<>/$)N<><4E><EFBFBD><EFBFBD><EFBFBD>))rrg)r<00>)rgr)rhrrrh) r<00> collections<6E>deque<75>popleftr rrr8<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_to<74>GameMap.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>}<7D><1B> <0B><<3C><06><02><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>,<2C><11>c<EFBFBD>!<21>f<EFBFBD>1J<31>t<EFBFBD>{<7B>{<7B>1J<31>1J<31><17>z<EFBFBD>z<EFBFBD>)<29>c<EFBFBD>.?<3F>C<EFBFBD>O<EFBFBD><19>L<EFBFBD>L<EFBFBD><14><05><1C>.<2E><18>H<EFBFBD>H<EFBFBD>S<EFBFBD>M<EFBFBD> =<3D> <14>e<EFBFBD><12> rc<00>&<00>USUR:$)Nr)r)rrms r<00>
is_on_left<EFBFBD>GameMap.is_on_left<66>s<00><00><14>Q<EFBFBD>x<EFBFBD>$<24>*<2A>*<2A>*<2A>*rc<00>h<00>USUS-
nUSUS-
nUS:XagUS:XagUS:XagUS:Xagg) z5Helper to convert two points into a direction string.rrh<00>rightrg<00>left<66>down<77>upr <00>)<04> currentXY<58>nextXYrurvs r<00> get_direction<6F>GameMap.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)rrrrrr(r*rr)r+rrrr )g@<40>@)FF)FFFFrG)<12>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__rr/r;r@rDrIrMrYrdrxr{<00> staticmethodr<64><00>__static_attributes__r<5F>rrrr sR<00><00> 1<> `<01> <14>,c<02>s<01>-<2D> -<2D> "<15>HH<01>&<12>&+<2B><12><12><12>rrc<00><00>N^^^^^# <00>[R"5mUUUUU4Sjn[STS35 [R"UST5IShv<01>N [
R "5IShv<01>N SSS5IShv<01>N gN2NN !,IShv<01>N (df  g=f7f)Nc<00><00>># <00>[ST35 UShv<01>N n[R"U5nURS5nUS:XaT T "U5 SSS5 MKUS:XaDT T"U5nUR [R
"SU055IShv<01>N SSS5 M<>US:XdM<>T T"U5 SSS5 M<>N<>!,(df  M<>=fN?!,(df  M<>=f!,(df  M<>=f
g7f)NzConnected on port <20>actionr/<00>statusr<00>finished)r_<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>handler<65> 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>D<01>D<02>C<06>D<02>0D<01> C<05>D<01>'3C<05>C<08>C<05>D<01>1D<01>3 C.<05><
D<01>D<02>
C <09>D<01>C<05>
C+ <09>&D<01>.
C= <09>8
DzStarting server on port z...z0.0.0.0)<07> threading<6E>Lockr_<00>
websockets<EFBFBD>serve<76>asyncio<69>Future)r<>r<>r<>r<>r<>r<>s```` @r<00>run_game_serverr<72><00>sq<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<><1E>:<3A>9<>9<>9<>sZ<00>A B%<01>B<06>B%<01>B <03>/B<06>0B <03>4 B%<01>?B <04>B%<01>B <03> B%<01> B"<07>B <0C> B"<07>B%) r<><00>abcrrir<>r<><00>randomr<6D><00>IPython.displayrrr<>r<>rr<00><module>r<>s1<00><01><0E><13><12> <0B><10> <0A><11>(<28>h<12>c<EFBFBD>h<12>Vr