From b8bd16157786935a8b6b65be485ba8fa30fbc5fe Mon Sep 17 00:00:00 2001 From: Adrian Gunnar Lauterer Date: Wed, 14 Feb 2024 21:52:29 +0100 Subject: [PATCH] init --- .vscode/settings.json | 4 ++ main.py | 99 +++++++++++++++++++++++++++++++++++++++ templates/azul.webp | Bin 0 -> 62954 bytes templates/create.html | 53 +++++++++++++++++++++ templates/game.html | 67 ++++++++++++++++++++++++++ templates/home.html | 36 ++++++++++++++ templates/join.html | 47 +++++++++++++++++++ templates/join_game.html | 51 ++++++++++++++++++++ 8 files changed, 357 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 main.py create mode 100644 templates/azul.webp create mode 100644 templates/create.html create mode 100644 templates/game.html create mode 100644 templates/home.html create mode 100644 templates/join.html create mode 100644 templates/join_game.html diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d83c345 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "eslint.enable": false, + "standard.enable": false +} \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..eacbd7a --- /dev/null +++ b/main.py @@ -0,0 +1,99 @@ +# Python +from flask import Flask, render_template, request +import requests + +ozai_url = 'http://localhost:8000/api/' +app = Flask(__name__) + +@app.route('/') +def home(): + return render_template('home.html') + +@app.route('/create', methods=['GET', 'POST']) +def create(): + if request.method == 'POST': + # Handle the post request here + #get all the player names data from the form + player_names = [] + for i in range(1, 5): + player_name = request.form['player' + str(i)] + #purge to long names + if len(player_name) > 20: + player_name = player_name[:20] + #sanitize the input + player_name = player_name.strip() + #replace spaces with underscores + player_name = player_name.replace(' ', '_') + # replace illegal characters with nothing + illegal_chars = ['<', '>', '(', ')', '[', ']', ',', '.', 'exec', 'spectator'] + for char in illegal_chars: + player_name = player_name.replace(char, '') + if player_name: + player_names.append(player_name) + + player_names = {"player_names": player_names} + print(player_names) + response = requests.post(ozai_url + 'game', json=player_names) + if response.status_code == 200: + game_id = response.json() + print("Game ID:", game_id) + else: + print("Error:", response.status_code, response.text)#log the game id + + print('Game ID:', game_id) + #return the game id to the user + return render_template('create.html', game_id=game_id) + pass + return render_template('create.html') + + + + + +@app.route('/join', methods=['GET', 'POST']) +def join(): + if request.method == 'POST': + #get game id from the form and redirect to the join_game page + game_id = request.form['game_id'] + return render_template('join.html', game_id=game_id) + return render_template('join.html') + + +@app.route('/join_game//', methods=['GET','POST']) +def join_game(game_id): + + #get players from servre api and return them to the user + response = requests.get(ozai_url + 'game/' + game_id) + players = response.json().get('players') + + if request.method == 'POST': + #get the chosen player name from the form and redirect to the game page + player_name = request.form['player'] + print('Player Name:', player_name) + return render_template('join_game.html', game_id=game_id, players=players, player_name=player_name) + + return render_template('join_game.html', game_id=game_id, players=players) + + +@app.route('/game//player/', methods=['GET']) +def game(game_id, player_name): + if player_name == 'spectator': + gamestate = requests.get(ozai_url + 'game/' + game_id).json() + return render_template('game.html', game_id=game_id, gamestate=gamestate) + else: + gamestate = requests.get(ozai_url + 'game/' + game_id + '?player=' + player_name).json() + return render_template('game.html', game_id=game_id, gamestate=gamestate, player_name=player_name) + + + +@app.route('/game//player//move', methods=['POST']) +def move(game_id, player_name): + move = request.form['move'] + response = requests.post(ozai_url + 'game/' + game_id + '/player/' + player_name + '/move', json={'move': move}) + if response.status_code == 200: + return 'Move successful' + else: + return 'Move failed' + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file diff --git a/templates/azul.webp b/templates/azul.webp new file mode 100644 index 0000000000000000000000000000000000000000..97c7103db31a0844fe04f6ac89a23d59cea28036 GIT binary patch literal 62954 zcmV*aKvlm|Nk&HE^#A}@MM6+kP&iE0^#A}b|HQ`-Rgc=XZ5aFizgvnUNWp85xnm%*?bGed^dN_KJ#@wqc)y*?CaX`lWdoQZh3SRBpMXZRVzGdBW@% ziE^8n2cyhscFNjjJIr=VLm>@Sm?4bAGbwo>LRy9}v@{$CrB=yDE~(OxTBc#1JPGqK z&ul5o+)}mFVHlpQgP}0nr^7rYSDUL_+iaJV*|wskp)_}%7{fR`mBZ80GNjo<5i-Lt zPiPs-&}3$)JQym&HZzn}bI>X?Ls^QGmZ}XUgu3>C&+)^TVaYL3bJiCt)=_tKdA0!NmmIrh}wlN?Hj{<m6>UnXQIxWGH9(bbZC~D88wUN2uw=Nb~HSZLuT&C95XYVfucEqcE}7- zM`li~*lhPeI+590otfDoGc!}fOh>>B5j&dH88b8erp%!-hb%{xv_tkGcskTFJNFtz z&Y9V%V~4-l12wsqQ>VHiIqD4uq&FrE}4>7-yu_Y`5d?NIiv=~hmaezGJ}W} zidZ2Mg~&9bFcP_zBGXdzLaq^oM&w$8F_s%C3L{0SC1VESM;!7m%C)>q3L{U2mWN#9 z9uo4YejK0Azo_pfH+aZ3UQ&gZM5$Ax^eNHGDzv=*#Yi9A`iq*(C@VL}yMDNLE!BuZ zOJ?h<$qdTSX&B>CgI}47Uh(O6Dx&OA#(>kV*Qvl6k|MH zZcxrWcg#SUmX}m3{Z0DLZdj}}Y)O{J=pZw;RBGWcMy51MEsz_DP-vKfEJtYOVvO+= znN-jj!=z?+XXbPh27ywL&|Y-3$h89Z*BHuT1ex*46NE&_l`ZtaLbLxCVxc)1V~nTq zg@z&M;!DF^g%&bKC=5)>kQiGE^5Kr=6e$HhKp+%!q=SU^A~TB{WyHduu*ejN(zpxa z?Mk#luasjrNKhCb?r07s8WBnbL$GyaEE1`i(qGjE3WUamxr;3bp;DJXs+A@9pfG!I zkhlfL7|#_+1xwKNH{mHtgGhzK9T_sSLPkCrXm+7gB2{vbDLKfbhA*}FWw7pU+ z9BHgX$xEu0kxRrkc6;bCm@DCxkF;-|PpHY%_U+;Zg zy=4YxzEp6LAW^%&3B zs^v-)Bw{&@MlHpcmw21~!6i|+wSMpEBm0XSxDDGuFQ&1sUlt0mCKDD>-yVER{gpBNRjqEN1DY`k3F9eej0B3 zK9`><(oZ8mjYKNqnz7maRDNu-Kct1n_a#@qo)RZR=1OVjNrO8QDcW6I>%Mr%6b@`| zI0ECLKfO$1S$ug_r~xk+0SpM>dzH)DO%UPa&b18GWBQ;ua|TT}h~W}R6$+j6QDSi^ z5WvsL2;f8jeY0=+&O3OQRLYx3YDQr!S5jPBj-rcOxbbEmvncPk`Cl2F+vLedLFz!rB*h%hP`wp-`JbA#_Gt(@*jMKmbR0w<;``AHUKC z?9a9FYVTPQK%24G7Bt2T9VHM1iM;ai24!j)H%a5NrL;5N54&EyQcoiN!3ObS~ ztOR4M&_b^Dj@*!8poNW$SQv)P8HO?L`#(1uV?1`wmOSUF?GPNEG*3q;ZS=A$CP~9B{}0 zSLXKOvrB*gO0aIS-DT;s&ZJM*z zg@wtSUH-Vq zjWB%q=`*BJMlL1zb~I+!YWJmUMF0s;=$?(buXx>Lss@VT2*3gYFd4F@Vxie$+p%+J zjGu;EScbgQ9L~t3Cbp3&0>}Xnz=!~{`j0$|ACFB;;-+pjM3%N?qPR*AJZ_k)P!cAR zBuNH!pb=_5i#%Jms?w!hRc3u^5x~>ai1EG^T7WSg^#AfW!$juAJ}tRWcxr*dqF{`t zAE(c8-qp*kJ&oX9bJ6f(KbbH4{V9zQjPWoEacptetKI>UOj)~TXg9j}?4~1O)^6vO z%i?yv9iB^VSqhKt(fHtH$FFc<`E#u^KgI3pw3&zwH2?&zJiWeKm)Q#-EP2u!HW~&nk>;AuA_n9==IxHV z`vs$)+4=u3G3Zxk%$jH8Px1#_8haMTGNWK~!iCx+ju};^tTx$tO`j(JXpvSb2DK}x zW#LG})rUwWBH+XUdK}K>%+-}fAW|B4ZgBdWa3Rz$)*e;nysoqMnl5$L=R&Ou7vkVc zVyH|b=hBd`-LC78RcCki0`X7g(waDb^5;47Oy9UvD032Q+sFxYPe}zSuS`}&PCiHrF9ygL89!nj70Zj-% z0Ck3}c`ac7;7r^ZlT68$$Nk?MZVopVB@_k)U;C`jh>F}Nk3T9)w`u;}r0FMPN>fH> z&N2wWmzufP5($k+D5M7Q<{N)ZU+B<*_sC#GH2mVmRhcUNgfc=cQwDcwN?+LRDyA3l%8Jb{9jH8@3tj*P4@^bi z7X%)a_X3^DFyV0BQvWP#&o6;Z+XQI*Y}G!%w$$)t(&k-#U^f?L&A;h)uA<{CEL9RJ zvy!UwNoze9MfgJw9Z|bvlQg3%C%JR2oVUpoeCNcfX;hS1rR8I+4vMjyV4?$$s-b-2~e2PhFL%x zJl06i1}_kqGW(=7;)tJ&CJf$EZyyNMd*z17sP?LTI@zm+Um5Z)=Q2WJq#XOwMN&1} zoOX$q0~6+t0H&y}Ww`8pTbdl*M$3(||E&v7SDxN0jBCe9qBMOtmd`cIjGsZgXzZM* zlba@P5AzoLW6n0yJS3mRyV7tjQcHp~{Z9smSTqh`Kz0Z=yq=CYf;Phsw&A|EZkNeEsZ zMD4wWK(s2PVu2DYGRvFcdeq29xl)bAn}N0x!q}(nA9N%w0`EHz07*Tp?g)23)FYKoAAX@J^_n~w4n<4NVT?1F+Pm*f^ zRzM!mIgi$P2|xh|N}shImDzTpL*qPPnwTW%`wFL(53s{w9Z;D)lp2{$rtT^_yTy^9 zY2fTsMosHqQndZWx?K^KovX0u1yNM}k^2P()nA#rb)yabz0&mNa*&W46pXRlB1}%l zK99xwz%-pUEk3_~Yx+)<%K5lM5thw9N!j$B7R`&S=u(EQ#WZ}0PFpfKi>H>*xV0-x z?xhjBR`FdPVTl@uji7Zij)@Y5okYtj9Mr)}fZBUG3M>u2d8}*vrFDRD>EUxCGnQ{f zq7iqluPA^Hzo=)JPYIS_!bQp?kjw$u0~K+T+U zxNfA{ps-R{NF+#wK@DUkN4F{%+7yXy^Gk}hzo=|q#-*zEN%K#fmYf~GC5u1tK991f z`6_<73qI$1b6&yGJG$IT<71jwAX1HeB+QE!%dq@)tHuL-c?jTGY5wpRQj=}+N?$OaPz8{yML_c+%X*YB zfT`MjImRTDRT>;+8V9M;xN~#*X}HBC(|HXKE5-S5V)x6+Ab|56m4mg>C(8g(?NJ9{ zhStpj2q1PM&gSaXk$nb0aO)y!cwFaE5S%fqV-9B&5z3d(5WLoWEtd#-g{hDMWSSQ zZGYPRZePY}FBhb(zOiZg$#k=Kmbd;!x`zuU1c15mH%WQYi~^y!28r6O?mI64O3bhK z-2K{w19*7=8oo1UVfkgX$@Og{2#ufRhL?rzAskx1lN`XGukio<`!-viQbs zhmH~pgF=kOJc#I4hfR^`{i9gr(L29MwVHod4=XL5GRqEMD#U0HI%8g!IxZW3vSQzB;n%unUX{yg>{Nw)NbP5# zNX&}fRLsQ$Lc`N$@8v@k*5sWHRW8e{`g8H9anGYB-@NQpM|$++AiHsNY%?}Iu4N#T z)3Vof@kRh{*1S=7l>fDK#zn!wD{1vhV<`}on5d;37Q`o_BEEsv`|iud04m8tbA zmZ)&0l*4WHhmk3iDRv4-Wx2+Z?vR0`~WahHglmwyM%~&jMH|y(gmHl)AY}|#^RbGfagZr!<)&7kqRXs zF?ZE`EP`Mw0+@!Mp$ky7ucNZgqsaEXFWxm?i=^spv4(}MID8bZ>sX92mK%i0EE&6P zGcRnP$7nII^EBdGEeA=z{2Ool$ z8^3%enlx?N4O?vY$yWQlS}Yz)r$0N=DW80)WdFw_PtMjw*K;{Y0OR{r9^)ubM9qWjK*D0>pUzFjA6Pkw|ifgl-(W26~}ic zXI{P5nqQo*KC1V-FJ5#c}cF@#Yl3p|H<=kv^F*SZ+~%`V{G>9S@*wpyvzqSbp+St;^WV zvs~7;&0#wxPd=W_Qt7ge-B3qKtSDEV->coPrI)>1*Q6F33gN?@8HyW+>x-LfP`{QRKcA)7$8_iOmfm&HA%NBd{u66F3L{gha_3}^#d=7z!kM|N$n2Q~ zA%NP100aSaVGUpTzSaJ46gB(4OB`eg;}%gfmRNP)g-| z3Eiroj2Df*Ok$R&_a1h?ly1@a&2YHRo!E3RkuI@PD2xy`GTHJfJF?vIkQE%hpZNyW zd#%;Q-F&}4nicsHW(LdfUbU}tWKI5_=jy8|j1($mNt}#jt0F0fBY+J;qdHdcSpKwO zz2!+4=s#ci2k+OGyF)s;(D;=w(K3iD3`|C6Oyas!oxa)ivJQ4Vt(_dbx}+kd>urvC zsHMp45v(wMxOScQfGU7#^3BZpn~R~h$Z1<7HJ}EtE<1iICbB4uxK5oWkqDF1?(4ec z=vF0z>2$;GvB1YkgyKT_yKcSTyY|bPR-NAU`IDcENlls}?S02!d-|+t+m=aW%$ikc z;&==-jW6v802sf)<`}yRb6o?o8Bt{Vc&{?M-#?1c|1LV(Zms1t+Ihb|H$U#zg2VSO zw$y&=pQ z>f-jb@$NWoyWdn;=ZnfI#C{ zUM!@(7Zt5x3G$k~;}H-PIiMMWFdxEE?XfW2iArvj}9g+#$Zu1VA$ zn+m7$uZ7g_vY`3y`TA9~{b4h1bKJ4U^72*~`4z`vk*{B^`3En_(XGbCqEWdp+WDNA z*0-BnNodr<;#8&2JCm>bJ_-&Vd-9|&8I1f~-Rf7_%~5Z?-?8EPl!=rnKJxMZ&H}@i zyUyZ#G)zC_v;LSaxC!6{sBjvX)Czdem8 zZ*TCI1kqS*xjPg)oVK#z`k+&`KR<8;JvZ7OBe+gz z(Z%(?h?v$($uyo)t;__4mf{P$btu9#ZPsNng9w#|g}fD;U!(e;{1Y|vto4AS!8;$K zGdIOk8akt^TNUPD%g}9BYnAIN&Dd?6si1a%&U?(m>%9txEA=513b|FA(#U<4`R!{V z^<~w`Et+U|AOLG@_{j{3*(nB{pfSdc5fAi3V4p&1BqDBjLUcwf%D*H`MAOrS+Gep> z5kQhU?+y8nmQ}{r$89~;xYGq+<@UQ^;w(@(FJLXcxP)sgZiy*(zxo^w{#?X1j@GzR zE4$yy!Sd~!n|+h}x{Grx(rV$N=GroYLZ?jDtjQ~0%9}RK8GuEgROO*GB=Tjm-7&W~ z%5DzZ7W=~*skHLp)qrsf{(z1U1Q4W1KMjW%JR-T?cID~q;m*zI5vx|^!_aDT7!g39 zyggJ4njdJ4ctQ`R(8ySy)RbDtNOvS?$iyOF$b^m>k0LhOOjZO?ZL-;i3#s3u(D457 zuyT_bbzDAYzfLEHfZELhmPX&ajGxGtquA`0HY>6RSeBYRD>q8;nIUigJy|s#fL=9( zTkH?-lu6ez&?2*Pm@L9Zz`Nv5OvwQy!3 zfZbvAFTFYI^R@q6WMcX5IE;`fjohO6q^8h9#_%{nXUxaAkouw6;+i6W!DzAtH!otJ zf^JO`ebigyOM_VJQ!ZuO?i`Z}*-E44oTV{z>FDB9?3+7k$b zE6qL&1|#sz9@o{^vZF`AVCE8QbxE}{3N7)4-82mVv!=N-b5y!+URD5A0|K3^C}&BN zx>37cApV`#Tb}|4tTj6o!7GmMURM`Z@RqdRi+S_yUP(2k?x+_^%dyJz_FgO=hkMVI z)n6Md5BV(6I?pjG2VBH0my$lpQvWuEGSnXde%QW2kx_EW1f&dUeBM{h<|Lhinx~bUon!uST z%m9R^%({-P&EjEY&*wz`!Q1!CaGRK_)73&$Oi(DSE(b7T9BjAWyqsG+vZ!4b5mVXm z7nY80b$G15Iu(KWht=CoXu@oD03h%~{=qvI7?qLHB9XWiT|FLLq$_dsslJ;ApIjT^ zI`8n}VBdbfPMAoChmy>hZoo}pP&}>R?XEq$M6=*J@9;W<9bK!iDmZw5cxusdkfhl1 z_7E$z#%j4mu4G!}vhrK<%Y9b9L|*8a&fr-^U{ERK-sOUP3*scrTvxMaAp(uJO>Dbd48c+!trv{knO( zaXu#TC6TJrr$KOL00E}vzc?0s^f2-Mh>xB-(!vC#R-JoJ`i;XzyJh`D^wEuvpPRr>74F zD89OTOitNG+mqAj7i1O$9wNZYhXTlZKdzN6U+YC-WH01I>Q0;ZWw>cW5X7~z7D0|A`pa8EB$T7MA0H9_j!n)S-5|XKvTVMkyj1)R! z$up?@5I}wwfOBrFa$sS2hOF_UvtRNJ>!fQP{H72qLa8bQkbpXPG+{>TXEE(^ET654 zDDGT`5j6f}xpRwy!sAEW;F&vS#|+}JL(nqgcXWBB6{TEggi^J>u-laa@ByyG9mN+H z9|6p8_A$qd09*CPB5wH3D$s;^>g~aJ`Ji`1IIIX@EPvj4i}K0l>s1*7_*7W2I<=<0 z)~kq2#{ig(CWqN-TyuF(T!^)Y`OI;ba%FaI_|7x1+Z-md5e93$$6ju?exI-X_ga2* zHwfU)QQT$k))@lORvS2adl-7VAk{R`L&qv=_qr~8JAlS}j?p*(>=jPs+m*OYBo#7) zD3p{Zlqeb!1l|Dhz^ggtG=T19pevtO2?Bp<1FY%>x}J5I!wj$*ySdmGD_q?;xA#$U zdCu-Q`y*>Dj=p`w4Z&tMIS{~QceF0j%#}^krH=ENTayXP%JX|-GnyR^n-$;~=upHy zi&E{z&4~bRg(k0@#Z1?|3L~Q#Mreb-demWz{9NlA5Cq;r9<<8Q+z~WrBJDrwby4AUgNPe#pk!L1c}ruCJR>^qK1zT@eru-MEs&7Y#r*TFS$HB3F5JIC6kRoZLe#*+u)rgcbxss zrDjLh3V;CWZgpTPoHtpnZtchn4m@ejc+ps`I=+8Zy_IEn+3hi*Fw0OM8TM%6M`L?r z*E(u9+MM1QvNjM%wTqNmlO(;`aD9H)e`ft?6F|2*3S0@-Y0{>7Y#H)ay|+|ptIF%X7nj=MOhw+jLW@+OsvDLx`o3L2xWV;zP;JD#@5GX3XWs?{hE>hLgQQ)K#h z?sZw!2z(w25S2M=!-eH{xn||d*1zNI&!UjBD>}bF8osl_iog>QfEo`5{Rr&sKxNMA zgvuOG>?f0IWhTfX6yMja=2pjdx>Op_!- zPNqDPiG#}xLZuN(&CMyqLLuB0n_aVgZ;O9~Qm@#juKaYdR3wV}rg@QmWX)^sLhQt# z7M|4HQYbW6{@j_Uo7A0;DSuo?2%xc9c06r^^Cv%Tt0Gkhz~u?uy8Jh>DE~^K!97F( z9csMH2pECFzoXMH47S?u-9n>>&NHgJT;11@rQ06)2G1*DG!_(OdnvuL4t+p3Vfq}s zy3f&T$(XfU?m^WrIe67;E-rD6=i;Sld;>=jH-;{CXy}~FfBFqDx#`p)2-=o$enFD7m*FNi zD0*w<4yQ0WQe~eqZ?7U_R-ZY$)sSycwJVM9*)HeJySoq5ixR|9V9%7*aWtIZQX)E= zj;;5*@Ia0*ee75yQ^DG)j>Dx#Z>=<##Ul1(5`rg*Ti*1ub0QN$rK`%<(p__Ly>Yo= zpijsx!a<_Q{NYuFicI``J`-R zngjQIuDobC9pt}>n8YpnJeQvB1R@|p+x#0Ee6n|``6*he|EO~h+wOPI(QRz5UNsAp zHY{$Li~AtcD88_p3$e@Yx6;KJ&mKtn`x1lNHc9)_uD!g54c_@((*#9m_bQBfIVd9t zt@Bp*518j^W%g(oNE8^n(z_@=zZtH?Lf7~_uwxnPwHFtkBlSq8d~&H_jM7R`Xd%Of zjh%BTI<>^HKLddvMT z&;Xdwx}PE=F{^hzZ<5EBI2l?Nb&!#p_El^^<7TT39`Fj#y@bf9Cg1G2$$sag?tD5L zGeu1D!|{EMl*p}u%`6MppIxc3Tx#?x_qwfa-RdX`RzZ|^DZ@k;=2O=I0a^!QExNov z$;9z6l2~=9@lNA+rd^pWD_zPYc=%4oO%mUZC5e4^CL`Xp(x51ekYU3VT5#Bl_=Nb{ z90`-5d#^sK9q$q065sX{m02WGqqIWwtgppK1DUaPL$jY4I~LdW zMjl4uZGG!&h^2u>8Cr|?w4FBD=T@Xqk*m#aIa}yL=Y3fJm3i)HHY%A&-tJ-qu)n?l z;)*@0An)nI7y*pEJ)|{Xi`#0`YZ^ZmRdnVCdTV0nFg<)T=G<~Dw%|Md1jt!+G4`ek)Zz!?b=p_s(km8W+X0X&wQJp7{5 z^K*2oUl!!b-=!N;LnW4jlo}b-_c-Gb5`{>#24f#hKH&#e8bRM}P^A`fu0R-EsYNWb zUSaYm5kNdTOIkfP*qj30zu@oGY2Q!@nT}3SFPgz4Cv+25N>Q5e~bSsOKZr)oHWDu7;larP^m%OAaKA8Q+b2K=(92JGvs&NtWA zM2d9KJ$>-8{b?JfPn$dPkRpI^_4!pRwJ2O#44)eYDy@*duccFD68VHj`s^lE3b9fg z(f8oNAf-Vh5_w5f?)r>*Th{q3!g-}vr&soV8zO+8>nzSe4C=P6H(L)>K0xaLHGt^A zZ{6$A*><=4zRvm*jt2xF^J+fxIC1pJ7?hA2C3^T}xXG0iz1o3=ghHd)<-7^Q?SKI0 zEe}V3gVph?Qx)H|!A}7vd{WS&NNyywhgj*g>UH_q=9hSBI^ApU`_eyf$Ne@*-X63o zv6~wbC(i7<{3j1QNU9YE^79=uurrta<$^ zxw<}g+;474+kHzSZhJVH)F_P*+}}cG5v36#QUrw>p)fx3_TOpw^X9hl?EcKrsb2Yq zZzoHyOCxPTHUQ8x(5y7PIg6*Ghnl$tFzVc##E!;_#Vyk?mMRoli?{VwM=#U?rY-mT z#50m^wfid2H6Sno0;ig4-ts;cwdb0v%U6NH>s4rcf9!fH?@JEf@sC4d_7ZY~!YYpI ze{NG05@9mp%`O&?-FC;#*M^(ZGeg$Ci%g&Qc*&TnAWUIuC;*suI_^BBmTt{Qri_39 zuCT(>M@XU;g;q?SJk3wTjZB>EkFi2YVKV0TKw++I0Ihy$6(<_K_1A}YC;%A4YzSav zak_H$-|_0R`)AH>^(=SXJJu& z@9VbA==n&MeUh@fQ!q**HEc;k%Xbul&U>_e7IVSDGfdU)qgfCz!dT(BO46pC$=qwV z9nL#dbaC|=NFq>**hUU+oS+j2mum(ptzb3lzp6TCqCDpuM0O`b7p`x1*=xBF@F;wm#g8fByho+e9gS=^A2N@V8P z{;D?p!3T0B@qt)qQ5u}NQVUlZ+wPbAE;c=P8MAK6-fc~XGE7YxKMO$XZ(PJAF6&fB z#^hB45K?elB`ji*N7&0W4oanVOw=CZ7R2Zo1nTrOwaUJb& z-bD!D0=4%7L95SiN&56t6&$?RT93?4mX6wuJH$qBaxItF$|TH9Cn>cQ++SnRB%#tU zDMM!tvBE8`v&&@@WyIx zzI5r#o-!>jsZnMUn-jjTo5J8qZaFqwAN+GEXs=bq*VL@3J(@6EX!6Y>cho8h)WKVA z?Xm26EAxfrccZo(&cv<>lObXwpJ!pQGI&@iN{d!z5#0Y{?DdpJh(bv&!I#D|C9MjB zsS|N5EWc88dVL#-qhV^iNJN`$_9>`5Nbe8`ls|7g60_$JfzT+7sDeQ4y@fEbR7utA zG6k;y5&%(buKVva2Azm+$ABlzES88|OZiWgTH+Z=JNC{&?P7!ONuecJEK!)u?y?9o zI4=ptxwUsL&$IFz$ zBSNdND0dEOGK&mSS|LXakSK(Wbn>NX_=?JyOezne z4W8@UGGtA}Bo>}9<36|LW2xcOl?b(;B~>U=iTnS0xY7ubS(N^Y-W2z79$N6e7)VGI zUS|n}y4GKx?py2+Pv@4k?r3%dFv1Bh3HH4$!-RH71GNxfazskC8l(mxQ^yYbZDKNM z9RT}27By4o3;`T4;}t@={WfyN>7p`{lB;vL<>7FXYuQT`BGo8zjR#ZE#pQ&D5!`uv zU=5Q=1sxfIRF_OiD-tMKdQDRMo&QuQ>@N`i+Un0$Yr4VR00J;#rJ_z{qydH5n(T#! z&zg*OjBCf9^5@v$u!;RN+zO5EhKa`V(2%~{)sbL=PzvR=!8;!uH@E?GDTA8BP4$&8 zk$uXV&+Ic%GG-F3E#I*6O07>B0=RB$GVS+Vl&;J!%2-xx%B0V`+V^#H6WYoY zUifgKQVVn~gR1&%;TcD>IAu+~*&9%pF+n(qSg6zt?S4^M^IF`B%pZ4-G@>vPzErZ_ z;_y{weM;P@XD~2~ryp_bI3FtFn#{d6u5e#J zSuA0L;?*l9FRsB$8hG~SD?;(0aFg)Ks0xBKd$3b2KVq>iOl^%Q1h#mRl~ zecj4mx1ULqUP~qN<)`m-aZuJ?Q^cU(ZKL%uOq%r70(Lt0doLV_-1nA$&MLmRB{8V0 zke`DZ@0D7r|GIB=*xi}Tp|oiEl2Ar+LI6QeA9R~-c0pV-YC7Saj=WMCZ5-66M}(7D zDcgU(3bnSLkyzX~om9#jUGV0H=32~-#de2%6r>BY$CGB0D1|`itJw5%&y+Rp%`05W zAaQ%}5J2DLo!mOtVGRf%jzt_?q5CqcYb;cHl_@NaTw{KDf8|`M%Zat0S#f)V|II6m zpSsBG5iDqaSYdQ`Y^KJq^i$P9)2@i~1OFFNCmhUVPqxQ#-hq3seR zV%m6dbSTuGe5v(BN3S~c8$7cB0dx|jvgGZLzKg=MXSVfz_dRE?HtuNguxOc-C_K3r zlN-L%X4UEa%@b;(Q`)G)tu#uTK&ZpR$XTQ{{ROd7$gDi%Ms9S*2Nii`2tM36o!Pss zzu&Xa;ai>d34@UwAJ>SX#O(Tenc+LUT(+RyDTaHT%}8U#?buHt*QI(kpFS%M@|)}Nh6B!xkkrN^(j(Wm%wlcuEu*^aojl{c5wjPL_`|jq`v221mxMdHumI+ztEQ7U56DSEi_RDWeTm$DG8h43S$Y z0%^n@b))lhVKeLeoOSZ?v-KysX__E8Bd!sJL>jKzADBa@j`F9qAJ+L7IqiP&W1h`y zUUB?TPQ=NrMM@)*cxeGXghprk+*ct2h%)9~a{K+?DR2MXSX6#4NG+~&ben$J;iKmW zYNFv}x7zQEcE30vp(~X}tdy2ryO&V&{RVW;ETjfQTB#iwfZB5jC7S2l3hnJ&Usk>NjeTt*AZ|h3Ax7w2>L*l9AxWeQ$co<<^ zsU>y0E6<1>iBzm~Ponnnh25O~XuXuopxlNn4G7?$I7YO5h3$c+TF=GXnYgi85x@7i zugg14|4?M|DDGmr<2H>+Y@znvH2h?~E1^@N5sZ~u;zX@%zCUCz7y!%#NAHe;R%Z4O zW|Ao%oA34s0Kj15nu~k%EIwZ>lNtu29s#J$_eZ@bpQ<)RoZLKKG`1^G?@^B;c`}7w zN-vLzF))3%U1Lz&B7k>nBUh19;@q03{#gdw9d^~jI?I())`T&_%!**(1`g|Ng^ zLw9p^fPhX-x$)*$94J((7D>ZctTX~9v!uyBg%tn*s@<2ZQ_G&$=r40R98RR}d=eV~ zoC7W1sUkBw$(05Vab( zh!+2|4PWV_#QZWkQ8&ho#@_kwhw86ou-$R@^uus#_{tw87T4|%c$;r6b1$3 z!?@g#AQ8nxc=)%Zg-|BPk7dqhhCx2zV@kB_ku=+mQY%HZ&$|-s6t>h9^?bs*O{N5RN_z?DL(Ec@^P)t6$~_%nN(lHbpWCY zUbMl>;NT2tque+#2oDlSgHWkvc&j2U7gDZWED=pN7lsutK6oyg%EG3sG$9RG|1fmMwI$9RVgMx0C zE5s+{Mlz}&YZ{C_wIEi@QQ=e?o0kLmEazLc*={3OWIGgNg+#ukdXGGgjAzCoI-ACQ zpNp*BFZrIP-9|KGEsImv@fXJ6<>%Tnk|hGT6`ni-1~Q6BX_-`Tg=rD^hi~jAGsx3t zGun4KuHT)@@b4Zqc;)toNF?UL8015~W`QsWrM7>BPk0z9&cw0vWt$nt zJtTxDPKJ_0i9Ri}LB}PI`w{{4p*efCy8ZrNNg5ATo>8Sd?YQx|#?y*+_iO2O{Dt4U zRN?=vyEr9GN+MHuO0_ZrZ{{1j_4y(e3Mw;JqEYx#pENY*MIJei8E#7c`@)raXjLSM zBS@*GdEI)G{d34%sbfJ7k*jc10uEy&DX60R7fheAtnV~k8= zv()IF3b{EIQs7fXPC=Gs#;?@`fV{_=v-@_~oKR>KjPVh4WWKFXN3BO5(I^e%zh5}Q z@Ktje!9XKiu6Kz

nq0_gsueeu_M5tFNx4U?jb;Zdu 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�* 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 i(|!f$qSEGtX-iMk1 literal 0 HcmV?d00001 diff --git a/templates/create.html b/templates/create.html new file mode 100644 index 0000000..ed8a5bb --- /dev/null +++ b/templates/create.html @@ -0,0 +1,53 @@ + + + + + Create Game + + + {% if not game_id %} +
+
Fill inn playernames for wanted players ...
+
Leave empty for no player ...
+ + + + \ + + +
+ + + {% endif %} + {% if game_id %} +

Your game ID is: {{ game_id }}

+ +
Join Game + + + {% endif %} + + \ No newline at end of file diff --git a/templates/game.html b/templates/game.html new file mode 100644 index 0000000..52715c4 --- /dev/null +++ b/templates/game.html @@ -0,0 +1,67 @@ + + + + + Game + + +

Game

+

Game ID: {{ game_id }}

+

gamestate: {{ gamestate }}

+ +

Number of Players: {{ gamestate.n_players }}

+

Current Player: {{ gamestate.current_player }}

+

Starting Player: {{ gamestate.starting_player }}

+

Player Names: {{ gamestate.player_names }}

+

Game End: {{ gamestate.game_end }}

+

Rounds: {{ gamestate.rounds }}

+

Days: {{ gamestate.days }}

+ + +

Market

+ {% for color, number in gamestate.market.items() %} +

{{ color }}: {{ number }}

+ {% endfor %} + +

Factories

+ {% for factory in gamestate.factories %} +

factory nr: {{ loop.index }}

+ {% for color, number in factory.items() %} +

{{ color }}: {{ number }}

+ {% endfor %} + {% endfor %} +

Players:

+ + {% for name, player_data in gamestate.players.items() %} + {% if player_name == name %} +

{{ player_name }} (You)

+ {% else %} +

{{ name }}

+ {% endif %} +

Ready: {{ player_data.ready }}

+

Points: {{ player_data.points }}

+

Pattern Lines

+ {% for line in player_data.pattern_lines %} +

Color: {{ line.color }}, Number: {{ line.number }}

+ {% endfor %} +

Wall

+ {% for row in player_data.wall %} +

{{ row }}

+ {% endfor %} +

Floor

+ {% for color, number in player_data.floor.items() %} +

{{ color }}: {{ number }}

+ {% endfor %} + {% endfor %} + + + {% if player_name %} +

Play area

+

Playing as: {{ player_name }}

+ + + {% endif %} + + \ No newline at end of file diff --git a/templates/home.html b/templates/home.html new file mode 100644 index 0000000..904eb9c --- /dev/null +++ b/templates/home.html @@ -0,0 +1,36 @@ + + + + API Interface + + + + Create Game + Join Game + + \ No newline at end of file diff --git a/templates/join.html b/templates/join.html new file mode 100644 index 0000000..6c3afaa --- /dev/null +++ b/templates/join.html @@ -0,0 +1,47 @@ + + + + + Join Game + + + +
+ + +
+ + + + + {% if game_id %} + + + {% endif %} + + + + + \ No newline at end of file diff --git a/templates/join_game.html b/templates/join_game.html new file mode 100644 index 0000000..0564847 --- /dev/null +++ b/templates/join_game.html @@ -0,0 +1,51 @@ + + + + + Join Game + + + {% if game_id %} +

Selected game to join is: {{ game_id }}

+ {% endif %} + + {% if players %} +

Players in game:

+
    + {% for player in players %} +
  • {{ player }}
  • + {% endfor %} +
+ +
+ + +
+ {% else %} +

No players found in game, please recreate the game.

+ {% endif %} + + {% if player_name %} +

Selected player to join as: {{ player_name }}

+ + + {% endif %} + + + + + \ No newline at end of file