From 5e5fda4be5850362d7c85b5b9e7e1570a6d32c7f Mon Sep 17 00:00:00 2001 From: NetMan <13informatyka14@gmail.com> Date: Wed, 31 Jan 2024 00:06:48 +0100 Subject: [PATCH] Setup polishing, choose first player, GUI display info, reset buttons --- README.md | 17 +++--- image-1.png | Bin 0 -> 27356 bytes image.png | Bin 11462 -> 25001 bytes index.html | 19 ++++++- script.js | 153 +++++++++++++++++++++++++++++++++++++++++++--------- style.css | 28 ++++++++-- 6 files changed, 182 insertions(+), 35 deletions(-) create mode 100644 image-1.png diff --git a/README.md b/README.md index 05fd261..529a2f0 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,21 @@ # odin-tic-tac-toe +## Tic Tac Toe -Tic Tac Toe - -using IIFE to prevent unwanted user-forced changes, using addEventListeners +using IIFE's to prevent unwanted user-forced changes, using addEventListeners utilizing pubsub, and splitting functions into parts used by others for code readability :) ## todo: -- [ ] "setup screen" on first startup (majorly done) -- [ ] display points, turn, etc - info in GUI -- [ ] reset everything btn +- [X] "setup screen" on startup +- [X] display points, turn, etc - info in GUI +- [X] reset points / everything btn +- [ ] clean code, although most of it is fine and intact, parts from later commits (from creating the form setup screen) are quite a little messy + +### nice to haves ("todo" that will probably never be done) - [ ] localstorage or other similar implementation to save progress and players - [ ] edit player settings - name, marker # preview: -![preview](image.png) \ No newline at end of file +![preview1](image-1.png) +![preview2](image.png) \ No newline at end of file diff --git a/image-1.png b/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..777d42758304e6af795e8ee6ea81d4dea5f8b8ad GIT binary patch literal 27356 zcmeFZd03C{+b;Sf(mW_iQWQxvYe0i0DWXx)9EsAXSraM^l8{QK%2d*T=6OVsqLk)A zib_S1Ci}dt_g%+&_g=^TW3P4WWB;)ozu#9HK0VKK-}iN$)AfnaJE+CN$jeAk6pQvg z4Figz>BIlK>FMy9TFLY;_-pwYHEkn${PCwh9*%#n_0Tl+FmyTL;ceq?N7*~OIN6Dv zIp%I>=X~a*i^l|QxiY>~Ssu@^ny_W(8AWQ>@!wc^2|;u|;8$h-8^EYAO)n*M4i5~q{1A4@Xw z^=tCcT!+UdS^PKUT`uQ2bw*mOG7j#E;M_7hzIb`xzI_#6KRk-PeOt_HtH%8c2M!#t zc5!*PAy8|Qd3L?qKn=q!l^}kq>9M|$$5=au=eL$~iHU2|4?h)k_te-FcIy_OqR%At z_3PL0s3>)JcWG7uUAm-^84}(jTUS>{RmA@A;Q9Z=Iq@66uCux9@6y?Vq9WU= zfm-rR?q9o)6FpEIxVS5fW!8oZ_@gEv@ z{8=>GrupH~AuUtW_H9n77R6reMV_OhTf@UG*S-t>n)}4?5i1@eMbXjGJ=RYRd$pQ_ z<17Ci8cyCFCxajCk9V*r_y6O5|Ni}Zho2su{gUMJBG0ikeKmD2aBW5AZZp?Ha(^b=D4^Oom~Q3pRXoaHFCk-`1^L_vz|t9z4iOZhCJtZ)JD)dM_`p zp^n3c53l((-g!~RzH!6OoofpV3ngV_)Uj{-$Hp!>cNZo5&3tp22V>5RAQN{N!+Uc6RWiN5kvN zxr0Y6swv@S#k0Sd&wP1PnJ8m#bYpmUcyMa)Wr6z;W8mLKZ$4#zo)afdxIE3ga)o_i z;paP_AD<&Sijw4A2EM#aqGw?Vy>Nkcjkr0zx_Y%i{>)&E$^hzwXv4K@*J5woy7c(5 z$R=Uof#Qj>v*UMD6@N|i#@IF7=58Y8zeS1@u?36QS&LkuzZrrkErM9*nm*E7u5$Fn$#WgKjzU60v~8Id)vvE@nVNbj zP~Q5^WGt(E>HOWh0uI>biyqohMKxYc~1NG@4uiSSjncca8Jsg zX3wERheqd1v>n?rHNCv#n3O|ZA#C;P+1$rO+(?} zwD{cqjbc>uDprVw(%0AbnVsx+T-u>AAxtM(>iP2WdUd=MRngF}|FeVTL7elDUYFjo zr_T}+=Y1T8f^-f1#gNki>${K$-hw}L{2>ihWA zOmy_`+^7V#Cv|VMwVmAq&)wa{-rRvfZtFDu8Z%q_jYhspU}jtHeDHdx2<`OBAOdP-NC9-bL)teR-cvNAcsEg--~o$N01OzV7X zmY>;_7D^uyzu+??

pBY*M)B+?(()M(Vy)bwFB@%+^H?xk}-b7pGc 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�z1~R}Ebr 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 literal 0 HcmV?d00001 diff --git a/image.png b/image.png index d1bd4ef0cdba55e9c25bea49b9c7ee7ee5746664..4dff7a1ee89ced00264712bbbbb42e1cad5fc321 100644 GIT binary patch literal 25001 zcmeFZcQ}`S|3CbuNKuiLk%WefD54ZfqJ$!uS=oD!>=q(4>{XemjLdAAg%rw&%xp5U zNBth>=W~6&zx#XKzv~{qy(L7h*;FkgCj`6s`ODE^UWKQ0+-;ml$ekr(i**gOoPx zI~f>~9O!8tM@MT0g$>&_vhE$e{itO?&c|2l^MC)<{l8fO`XrV!_gVsW^V{@SZQdj1 zy3={8`@EbS&5av3o;8{18XIqNb8~z9_U*It0lQ2(vJULovnRyr7~P|@dZZ@}Utg)d zahbWXwlbb^;o`-n0yzf$>fu9M3O2-!fS7d+oE)t=eo^sW9*ta7o8&AJ09JNKo$`J zo8B{0GBV~Lv$L{pr=%R(!^)~>ZXU3- zdwSbM9G7{6#8N=L`-pCD`7OWT;PB9VlO}R9GBT6q#LaSY4o?qy{aF{OsHn&^`pCS0 z|NaYuZ{EBaY0F>>#8514!}bj%ySxiWWn7q6PPWoO=pIzC?BOt(cV=cC{>=e&U7KuX4Tcv~d@=@#T-o1OG{SBu~AN3l`x2wr=w`7wZ*Xfjb2I^J% zd`J(v?>E9nnfYjCH07zyPy>_cx2~=|EFxA?NwT4KTEl*HoU}W4?&m4;SQTzf*NPq& zz3=DGO_@p8Y$BwVYZm(2Vr6c0dV2c3{r3dvK*^S5c|*hT*0h0Z0(6R^G`gHSckS{i za-NcHNl#B7>CDg29#eVsHA2Em{L7fv<+QhNPpnN>Zg)+6>i6P>E{Wy&Q?K9Z!eTDd zx;uGP+)Ea&!KT=K zS!t@1o#U7?e#w4$*05voO(^%Z+a)C>-T5sq6geZJqGVe>eE6X8?y{6Y17o@LK@JW{ zVXX}968Davf`XG{t!X?wxLWN}ivYj(v`4)I8?d7cTb7r1CHOP&7!_J_aOl^NgpYlC zDiJQ<+1~!6Gp{b>FlV$8io$vTnT0{~rcCiEPlXJJ(dMktA3uJ$ckZHl^jwd`!gT4< zr4EPd*RPjaj$?Ocjn1i7NlDc_ApVW>$&@mV))eDUaUYT`EiHdpYD!7@_z*wQxz}Cj z$kUTIKhnh6A+#aFZ$t;TcJ;X=MaNuq!0tznAIC3FQnB0MT&PE;q@;A`pOZ3pfg7vo z?9>!iu)lGGqoT5MzBKmz`wQy3a{>YaRF>%Jm;~{>-{j>m% zt?y5+Mtj2B~nu7w{B>^5XgLdOHfcyR@TKQ2lf8^UN1=hwYL0=QP_e}>FU*_ ztT-{Zc*FXzg7hcYEI59LH8nNemj}bMo^w5U^5m%9j|;D_7aWtRl-|OgY1t_}H`*d2 zoTZX$_BB)Y9eGJ!^xs?TO-&$+e(P)XE2+v#>Sku#lIPC#4G;Uqo^r11W{uHSQrfYN zP5i+TtwP=Ys{0q@z#AKSaA{Ps8*9jyg(hvL{k$ zDhV>ddqENsdsmc|Lz?9UE?8Mvoz#e{J?Z>crA1HP`@j2D|6KqAEqeL2 z*Pq`u_V!OaQO^PnU5@)vSlZsMhJANNW%%)dOLOfvDysk)e8}WNKJDVyrZG1+H(go& zH5_qNUpjp}`ndTn?2W`xja)OmuD7-~&GZ$^|M~Tpm>Aj}J2-f-+1VDRdY%pxqSxNl zDssBmVq|2bR_cCIPEKyNOW|DY-~U3H&_)IBvuKVwcxJ@Rf>@Dgr;=NbQ z^?hBkT;%P$ckj})HGMrG>iqLM0LYI^ECJ+ujgM`l(TykHwPOeQp+kpESKi&(6d_`* z?NgsJwPW)0^9`;G6OkE~yjxsiQZw~Q^b7)6G+vFI3o3axe;LJyI?9@N;Om{7oYdah z=#}Qb;p(+bt_UKNOY{!o(~Q6TRQ#{1)`!yHoRfZ}3B@}>F7g;fb4|Q=ZR8d~N`Xg` zMhy{Us;a7{qN1W2PSs(hm%jA$uvvb~IsEyr1yWW^y-O=OD*d@knVTU#K0d_C=d7K* z{W+)0!xeThsMG<$;wu--@-@D^KK1aCOufp_nR@3AM5!cBpSY@5Njj($5gExO{%6ge=-uYp^J8D> zcJ53(^U8nkUSnjzmCnwKz7$t7u;^6AyRBaIJsSuMJkFfFY(QSyhz@Bg26IPPn3T*V$V}a?5+40k- zPYakf@9&ruG-@bcUtOdwjHC?4*Yn`($$`DdH*A<$nKw`6<>I0O2zi{0hwwl;kojWE z=FOWKMXdIqr%~sm`8@d7<0mg&8RNNL?4lTzu2UxNL&Lyw0UQc{vK`t!-x z+9ieM-%Lla2L*^dnCa(7#jBYo7j;Ct_yp=dd9KE)myC#rh+MR=yvjm{@l$rx=AO>K z{>5Lr_L+!vw=T}~1qFq$x`PTaRL;(eG;O26rBTPt56WZb>k~hfm91;bV?OrJp~wLg zmy(v2ZE+lLt^WM{oS>FWl9Jv`e|2V7*5f)3PR=(reHHHJDbELN51vC0;NAzEU5QUj zG`)KDDzAE$)NnmnGmmB-?@&V|Cy!>CrhW z=lS#JnQz`aN@f#x_d9$wc_blxeBT{f+bAHs}ApqyAsAdxDZPDDZ0+mjhba z%#A2^mALH&Q}erj|CV&Zt=L%BiOI>n{{Gv$_%xoOYTDS?Tq*o;PXz$hc5TVl^jl30 zrA*Ks{GwL+SU_Ol`DkHFT6%iUQ1H)f^oJB0>@@?p<31@f{^#<(v-9_VX2Bm?MgJ4; zef){9A>u#CpXbsv``X$XEgKtusN+OC-7A%}x@#T-HG!4sT19{Na@uy5Z!59Mh?vOm&lYK%bqcTi(GP7@VLr*u!OsAFAzUW#h_oj%}m7to#QxzVesuYn}g@+{Qz zS}*s^cO_n=x9G^C;0~3YvivBgC*D}&D*i<825I*(isf4j^z?U}CchE?TqzQFg#vuL zHBHmFC=TrA25?M!o@Mmwu8InBFiL6Akh#{OhMhyY7wmh>$!J)FcJpL+ZIAM;N($mxkS*0|%#`kl+AWfPio=SG^cw)6Z$<=Irq%h>F|@!UH)IyjRS?5I_1b$5>rc!*Sw-nu;)x&iRV`%ziu`KQfC%&y~?bF(>V% zql867Y615ZQePP-pGR}H$Tr>FPUZ82SFa%{}M z)MIrl$qH};@bp~T@5L|v0RffUCDxvWuLSu2FOXIG@P8mH>2vRJVGOvi^|fE0vPOaE z64c(@aD7##lq74?nV0r@0=*3X_XTh-<#jEsq|uQPla5f^m2_h-FRvWamgF;?CR8rs zPo9HpMuvp!T>HH`m6g>PdurU{)cVT&6M4X)fx-H4*PbAD9>w^L*Z~|xO~!Z_C%k?a ztF&dmdc|YZ7?Ua`NPRr+lfirN@}b$m`mCu8?rSeMq60y@P)v{pV+>6OgUuD^+C06m z5GJM_5*6kD?Abo`wrqg8EW`RM@lu-)M5(=)!3q)b105Y*)+o66V7*hr$B&BnR$A&E zkho?IHGQmRe|*Sd@v-_|cwpRhFQ_xKu*D0hmMvocT)=n52-1&nO&xBP*Ab(6qkMvb zg6_YUhegZs33$<(ATY=O&#z+5vrJi7qTM@HR*D>#Z-u_Wcj_%o_h}41^;}7PJ^the zR)<|5t24)@wofmZ^=Lb#MH`t$;+4j!#|fD78aH@3dHT+*;@1|hy0r= z?OX<^!>GGhpU+knLMNoqFkt+TkJNG)&Db|L3Ko!Ms;SxO-WkU3Hr-1GnEc#6j+Pvy zQ_8}^f-JvIfY>?2x{UrYD{~xIfyC03Ad_Y4scT9vxsQwM!oo^1p5}+2Z#@VM=%+Tf z>yz;@gZ~>PMSrC9&u_Pw(>Il(7G`H9&zvEJ9nso?Wg{@4G{u_shSomdV=M zy5nu${rmT+wr_7+bpj|d)N(p<R+^D!(obnJp@qEJmZ5XW@a);MS#85x_nu~iZ1Omn ze#Z_0tF9A?$;rD+G^qvu^$15w7Q3IwPjzH(3TBgN)m-P-DgENADFBKwng3-j%!2x2P`XB?7{##H=P zYU-AHd2!Us)jJ7*2ruyc=Evc8 zv|N&vt>~-tZA!YdTQ24V9d=doX)r_lIwkPxa^ZF#4t933Teogyy-F=FKck$gbfD95 zZtN?yr>AFg4vxk_x%X{-ySHw}HW%V%zk8*SZjL`x_TGyZFUY?SK}RD1b@9z#(&llg zsfU@5o83iOs(km33>))u-063qGq#X|(`IbRo}IlzsaE7@vVL;gzo6LL~fnoa?1H9FV6s%x*gC2?evzn4;9D!*-IdR z6Ar=&w*_A426rPO7*Bis-lL+Tl9`=-r=&#erD{eHntcK`W9aOYlfq9RZTpT<`FyP z9rk|PBaAe?@xlL}IywK7uE>raWX!?yKHYe;a^Ska(#-W7ux3K#J7V%*DEZYXL2^~* z4xKwEC3O?ZGY7G)_sOpk`t%*jt)KI)bz;QaR7Q<<&@oX^3iP4Bzjc}65Vr27VPj*P zo9ba>4wN1>qN8Il{Y#fsd~@Txa+(H%Bvn_D^LCU<8ClsaBwZL2a4E`hgmzjTpi^wB z=F#PxZ<1l_14LcIA)jv3@#=#lZPK3kT*&KZR{`L?V&*+4(<~bzNFv7F-trAxTf*bxC`ltw@UQJEynQSOG z_@f{+g@c+-K%&hbbx<~1)Sp7K&uL)uT4RrP#+IM^`JDxSeS_w?^oG_Mc8=zY51SYzJd0tc`ay?_trs%;azSGV!pkm6sz(tKT%k!4 zhQAlf{(Kl3U5Pwq=%2F&w}mg-d7x&ix(95$(4lLoO6R#zw-}%;?*cp?7Vhfms`_5! zoHW>DY2TS=X}C&p#^Gm|Iu&~r#BnM7ji9BM1`ELVy}-agWh-OjaNizEI;K3drkKxKjt%14z$zd`{#VcWmas=IhIiE8WC^Z8caKf}&( zad9b!&*9oNiigN3=9;72gJP8AwK(2(d1Vp$!!#Z&ISJ72D6lBFl0J3;pxJ4tX97kI zj2$bc+xDL3S}%e)2BlvLPmGL&lOHm4>eQ(O&3r3j#{l@!GBMq+s*-wJRJ6gRlkd;i zSDw`LaDE+*iC&_r5jNAw^&&F&Hs5~iL;s^yYYw$RLA z)^PB&m^ob(GDc&8tHHWC2$C z1Nak{(X*O5#Hp#NV+UcuLi*k??R4gGM(N5HHuq_=nAq69@$mqBr)io#P7WBSvF8~- zzpU~p@4%3vqEjg5+dwhU0~2sk0l|I3!&QUEHQwByfQt7hDryVK#@6;Mj^?9~kh}Ha z{NvY+frgqFbDtBZo}VJOAw1$Vh~qCLBMzFHV~_ZCac1 z`ct`E$Nd&8PNu%Tz6eC8i^^E4=E`oz1>2Fhu2vif{`bAm955D z6V6qVEQ6^inpUMKbgUy)6)T))DCBLm#6Lg^Ib(U07MfIx7}Bm_qZ{U7j6uHQz+X#O8GNY8X*OL4Hh4>W=Ey zl%ql7G5g-Rb0?=OSw8wm>|Bvt~^RWF%Sw40RaJ-Rcv-)ux%Q6osy6W6+!N$&Y#!AQ)@of z-Q7*<7WV;56&gLy0IRnauzuNJnxl?2iT_<{?~goc4XWkX8dC{~8MJWlzxdlR+l49L0Yx4bXH>KmD^N6A=+%;Iin1uS+z{?xa9XoRXWOa&~kK{Ylkk zBBUg8l7#Zj3H8_BVb6WP=1l6StOG(qJAr__!56Us@1cJ8VV9f*Dr6<>V^4}gYj_>rwVJUm1fB!UmHS?uxU)=6Go zOMSk@&+q#^*s>vFmiP4OJuqG?(H62x8qsQOpq!YlBm|4s*`ERgfy*=f-MMG5AiYZi z&Qr|;rYFO$kTVXk418mRUVKsi7CqAjN&!Pn3k%-cckU2i^A8%EQbBgMAZq2qgh$UO zCMGhmdO{ZMSD4)sV4y~va<&S(T`X`vIJg!N`3lU{w42OQs z?lB=6-MU8&+}ii!$9|rkGOsd3b8<8D^LOLu z?D`ljvK#Q>$+J0!)Zw%{qH9bGKX|%2s3vmPRlH=%6#XK<_ zKxisvZ)^von*eC^3=I#cq-i8&e*}Y}Cshs92G8e}fx7P^RiWO+jjo)$mTPvcDOsK+ z_7{YuzTP|r?|IBB0up4wo4m zZZn$mJ?h;RO-*zt0yVcOsIQc`IyOWc-SB7mlUL3dAYnD|NpD}@EjmtV1D7YC@!MC@ zub*u1>>M}rA}jCi-aA+qT8Y0srX`VrAQ}4ab9=&}BrEoq)HlMK--GrVfAiN6KI@*Z z?7Wc^4G!7n=D;kOZTJ(^Tj2{kkEbw#^^H>2C6f|!9a`F%44t3A)o>!{;NW{Hz%$0yTOm=1sRaz;stgH-D z{!YNIM|F^EI3Zm~fxTC!Y33)|X{nZzs?hrlJ2!9NzME8qxQXE)ljGTNK1~(SHHpe~ zcBL(75!SC?zb2h=VpvSaqLSXX#x|R(9)b$Kk))=f(T}#@o^5z3rL$PvU0uGrezHvdlfQ2#smO;%Rjw9An6H+^Yn zMWVyeQBifjqv^0;JHCpOh^<3Pl=<@b@#9SBg-EvS$;->jvTT5X2a)@cSYsHrC`*R} znyjw1b@2Q5?|IuOy5mkk_^3i>j!YZ8zs3K4^VVnaoRc$&4+<9uK^Get<|$`=;qTw8 z)_~!uuY^vVUh?S_cEilfANZsXw17$bR?~@~Wzh2M-=3vRYrA?Bc=Ui0D=6@(>G}HV4cMD3WSe zg;MKiE{e!DZ!_ggs)^*9NWbO`vDOK!Y%{4eTN1+EblBuai2`i zl?Xx-h-IZu3<5F2VswBN?Imvct!qHMoN&qr!hPn<8J~HiANt^~Y$T=eTqaG=&Q@Th zXCRE|f$b;>h$9k9%Bk7oIo*4<^;E=Wetv!wEy;2JQ~axLzlP)ybA1L!>!z8eEAIQw zUos?8B`=jr0l|qBF8;PYE9k`wuC#UaEQ8H*^72h6FC=R>N$gG^Ttz?XSC-*!UNsU< zpTk7E;&!*Wu%x5|P%^TMWy-PM5I9|MKVf3@Qp@*y$ew5;{0NhkK=3Vt4Gj&MU}EmT zkR#Z1xcE(wh=`l&DzI-aa^`0iv3ejME&QQId9Q#jslUJfbNqSg5FXWSh(%PPHeZ2| zN)*Q7yp@H?0H6_l91W_?o8Lh;`ux^bpP(`zIZHqxLwF(a0?@StE5BG{?2|^}ea8?YPbu zaSvu7-P(poK|;eaEdZ_{I+97(+oQ;h+=Gg9W2(D^=!w{khl)<}WDrpC;X_)2AP~+U zSe9an0_&HT*Qmj4@cbm9-XNMmK?ukATJQUtCCD$H_3v_%r{qbfeHg?h0R#btV*Dx& zdWJu?7&SBt#bh}qJxfbII7eKtJYL!h_yQ~VA+`J$C^RxUh~q5vRNTX0gY*cq-?@Y) zB5+L=DtjPM+Hqyh6l9wRUHdR033-!kfcSc7BZ)X%rr+m+s|~7KTCRdc$nvl9+@%E| z*nu`&zp!9$hBFg??Uf3FyW*j%;op?i@)vyJRaZjk@Pn_bJv@ub zN{@szJ)D+`?r!ZIbT%R-WM1%K@44pVS&`{_67UZAe73Q21L@z*&d!E5e;)^D2jO6W z3NavXTG7xT2b~3>wB9}29c2@(x!JQuGT7@V(Lmw<>~Q|sb@baSe_&_*DnGg^Vd8k@IzNShRO-Z6d1t1_G@;wTNzo zSdlB{33wmYBuX^60im6t+-hrUFQKIye!4Dt>eN8RJ!(YwZidZ&j1=62umPS(y-g$_ zreu;*AKKIBdhudp)!%*pE>=H$2Bn;6yTi9c?aVu}4Bx_nuM6V~K-4gVPjeRvElz4u zYu0u)aVbLRd3lY8irsE*_5FP$x-Y7hq0%#+a^gkT*?>j`^@H`0Ld@s!1v?HTroiNJ zU^8x5?yEZj0%wW<`$%gV3vyL(`Tc;NusL+6d*4OCjn0Vyzrqvt$0UK_>dSFl==)ah zwE|)iV6-L0_{1Nam-Z~fOUaIFb1j!UnCnkU6vH$JI7itdK^`Jx3L;7D7ZlWbGofv1 zW?*LMBMWhAxI?*B%YtKwysSo!$t|3NURY|Cz}iHcCbrufl7pk;y@Uk)^r!s4v6M}@ z=Bi@({#+Ym#W$Sy(F5z~Cp_OQ2#CbtgjK?U!jm|gV=N-*78^?|Nrb0Kw56q`@i(gd z`=O3$)Dtj5)6sB$LR-sb_Qdc!LjGCUQsJDGoa~QMxdlfJ2Q2cH@Q-SM$&I8Lkb}Cq zBFFKANMBZg;!31iz@sGhUV`yvP;a!j_=pAa7X$o@ejqcY4r~Y_WOX+oApvKhc~$tA z=9McC1;9xPnGE*3P{^r|p@8DiaPq+LJcm_+N^hWlwC%Mzz2n%Iclg$L+EYTvXo*sVaB|njryn?i zICe+f7A(5Tyx4j?SJPT;!p<~$vUND3yB537%Q6SAYN4{-DJZy^tiy-d9s=5+nm}*e zkL;l?##GQP2e7v^>QfREb$_od!@FPysO}vdy^qRb5;$6d()2=^d$f9Ad1p}`qAh`N z9pkYIT-RRi1av#5Q)Pk z?fisgbUW655+u<#GBUE2dP+=8jBfYtl=&OCA8g#TDFLJqvtaLMJ&K`w5Sk~_yOj8udS!BT?o(gsBSq4D_nt~=7vq%8m8-5Tvp?H z@T3zURfrC6hZ2aR25eS=Pd#c_w-Y;4b2#hdx`%-bhKxuiC1s2*t3&LtTj9I#w}_(T z5HV_a6naSa6BP^cMc=>xXVLg67ytkyu=dG_+&rAA%J1J7+G5$eoA;Z1S5qd&C(2SqM~8Y2oY%@iuwPD+AEZU2w{qVWi|||{J$s^Jdt?*>nFOU@ zd>x~y4YGn=k2Cn*W<4kGQ^e78DxR=F2sR3;DVA!1o{ww4Ih$zF0cB?ksUJoAVO{Ck z?4`7$C2r7)5Hzns>o*v8p8R$V496c3?Sdhb$ELN9B0W^3tT(myXZ=;nLwKN(_+noG zN#_nFiDl6vuQIuU@sp#jb0!TjC+X3=KiCw&g?I<08S%W(P<$c-KJCl0S;cGOH;6L8 zU$#b0I^jCU)rcH5IQP(tIMg^oE?YuvH5f!*AHoV6)x3|Vo>rIqhi=JCb4q^m)EYMCT#tqSyj-l3u7 z;}Vk_UScZbD8k&3ta#F+JziUH91fpU_Q zAkzDyS{t<|Q5SnWorYHa8C+XALz{Kmwr$OB4%uVUo4QMRM6&aeS&Qa+4yP2{{B;mX zru&drp5a7eBuCB1%iUmj(RSoB`x>mm&~?a(2Py|!x|d@XJO}6Yin~*(smSQ0t~xeTzj<(s!-gkNr+Kf&MY)W60<#cM#Nwka2l@WliZ&X_PT9B z6!IstkcyCdD$WXT;x@KsqaoZ1vb9yRa4l^0s+ZSZeSV`aL*(=jglX2O0jj~)Ch`Xk zt&ci~B|zow!x7NO5}k0GV1!a1OcVaqL}=toDm_GCZ&;vmQ9_%61KUeIiW;Z9?TMrs z=@`vd)GcDd2g=l2*LiMtcXt8XeyP`5MJnbU6Kmp_+lhBH6hWN*wMMS&@T_T{>*TlN zhaa@;KXiywRFt>~CM$kHQ<2A^7|ki~9DXjia;~bY>va7)<+*pLPi1Sf)Tkvy`hE=# zUweW5A>s)^AG=h>A0N}pAYj;;QTCh2z!5~2h$Z^eCw;#)1}kmAl4wMjs@h%?%oYsJ zX!a4E^%z9)-k(2%uqI~fFTNI>N;(CB?egWz#PXpv`@+}qsYi-`0Cbn2A_)8wyhi!O zm9rTMhDoeN1Ub72^{5)M>2&pOopJ;>v8)x4*D?{~+jH9Giup2b9+LD{_PY~@5~eA< zQLCOqIa~rT%^hMr?LrF^^i22>t*oxgTItsdZtplCdqGDKsQ&!$m6+7j)VFqnTX2P8 zuO@%^VCE8<^?kwthQ3?{EBw(Q>m-aR($zeI5CK9+qaV)<1WOpLe0v8r1TtXuTd!ycKE6^^J__}Tc~ac(6bA= z;}AL_a1Gf8N|TQ)=nx3O+{RD(08oh8RB&G#j0g}m;9ee6%+rE*3ScD8VdOIzig%mq z&QUEQ^QvMZWYtAf97a(GE+U0boO);^Zk#*W*!!i16)0xD?3&{Hn2K zGNF?bH}v!8PrtyxYQTCuBcrf!9uE$2A1QTaA(Mwf4hiW`0YWa;?}a5nqJ{g`nA12H z%s$$jXQ>%m$(5X#==b^al_u^HhB4(`{JT|bI2CCiDF3o1|qEyrqEaMud@N)<-?h_-wWymSe3u+>ngv##?`9!*3G z^2ZFKA0g%vUILnU0Ni&oJ~kE>9_a^+>@QW)xL>EGorm#Lh1g1NSpCS+#4QZmCVbJt zUxo>Nibto^y#P?P7+^1CdU0{LWU&XY#ph>d2@|uTxmgKO5q~V7;54z{}{qqh#zSn3%LJQUdtU}7&E?EQAWn}V2&%0o!0ylR=x zu6VSwa6=5mpGgRQR1$*e!2I&+KJKn1uLGlj_wG?Z&q!*EzVSedXo@Jz*S9*q@7bi- zSA%E~w+&M1H+Bnw@N$5O5M%b*WGuIE2F(LwV`87;=_N%gNGTf-X`~;YQ=t=+lYq_A=JR53E4wbN`uRPeE88G^16`>3L@^ZX5A)G?{rtFw zL81Si=r>G-2+}w3?`=~G2Bc>!ulR3ARkD@yZUf*|*Q$7Q>zu)+Ln_+7e8F7xF31;O zUA45JyWY^(SA-x1M@)Nxd>J{pJtu6Qo#~X93VF&{uDlO1*-VdBCs?8=iev~3H5Xvm zYSji57QaY>x$Og0Zzf%=pG&;v4OL3A6Q13O1M$%i@I?!ai|v?FClM_p_t42ko5G zA3$u#cp2uv4EUZhG?6o%=cE$(;lC-pxlx_yRa;fX)xM)(PQ(^(VA$b#TQRJ=r0#mQ zQJ|2k3Uo6x&QLSVR-YZPFAqtA?x6>QMe>GsL8Pr-Tus@A9f^5=*6MEu?!M0qi1K@p zIe?Cu3h^Ai^P^-?-#0K2p$u+1ZuZ4HGE)6kzA4NMIC`~cmDKK?Qc^4BaBNe*n(aAh zw~>e&BLRYE1{yq$tf>^t^l$F*!5Ja;?7y8sy&4CLDFJ4e z%lb-g{3KpA;Vqj~;oReqqQ*kJ9{{n49|duc!1@CCOFy3rz@^_nKm0q*&xmhYLY9Ol z6qV;6#U^i@7{@Pk_$$jvY)V*VxQSZa9mDq7F8{y1YzJ}X(3W*RmDh}D4jA+cxNRc( z*Q+elWf3^V*d&1+AfjA6rR2_5GR_9bkk*?Ru0 z!QU(6{A6dq{SUXSz_fayQ&x&$8rs@mwzeoD*G&{`P^v>acI>eG(wZY|0lq6UJ{o`+ z{>ax?;jel5S6AO{VnYHu*xgc)?yxWTK`M^@4HUh%cz*#gn}}S)==F5$7h;QmVTG7_ z^mr_?VuH>OosSuOt1apeK13Iy+gs6eiRP<8R3*_3;Syn0$UlhMUFvGNu85h;Wn)G+wZ%`@|<;vqHRioMsM( z%DQx!2m%s@1EkwP+=|AqlfqMRKGqE$lNtEWYby?J4MvzbNT&H=h5|S0*oXvQHF{p( z9P{v@H-ZEZ1oe7KJ-F1f_G1l=tH z0^~!<67p?I&5E2QHikLWUT>~mbCTuJwTpOYli3HL24q`5NdUx?LAAXiL z$|2(^zSO&cIL&C)VTFy?xEYS$5Th@-NSN4J>;ULonBR&@zaT7bwYXIVJ;YkwxcyQy8fwo*RB?>v2b zZ~56HkG(}I^qF^X899;hQ0!+_j4J24K)<*CO+bRn^JLz%E4({Ww+$p6m5Jrt#-MO> z;K~Jg4wFdT_*;U54Dxi_CVSXwmL17McAnhiBJs&SE~RAgn|Ybr;_1@YxosLO-f)%3 zJ|hIq4cij-#I>TgeRa;apStvK#yIFj1%++cKgC1yIL$;P_S&^;(yJI`>NY>9<843O z$n>-9U0|2>9l#Nh)zkNAC!=$`&%ZK_i2L$T&a)oQHAa~0>gv+f+n}4g$;lDQ*^5?v z(`lmpELsZa{XuSSe|WQ2CG)M)!$t-MnebmRFWvxan1wat)hm7MVZ7tQ28|X-xEfmP zEuLSF8NO+0mI==9MeNG9nt=m*#7X)s$ZM3xe^pjh-2m-5_+T(zozXimPzl!ed3;_q zZ5-nPm2GXip#zg3aT8IX4y0|JyKf#M+_s*cr!YRHho#S-N6meQ^bc%>G^etyFJHZi{`(4cWSSgjU|=W@4Sf^!t6e|X7G%8J zWAVFDJ%a7C7?vf}xP)~OhzBepK~VC&p_1;Pr>_LOI?Ts+oO^g^s7B(?@@3SD_wWX> zVQ=@ftLk{1*Vf*PW#5Y!6+0J~9~!IhnE3A!*dHf6*IW{Q&af2doL9u3m##fcp^aaE zypdN!-q!Xg-iU$>fUu?!62UHRZfIS5ax^Rx1}G>f2rEtH)x`@JO!D@k%pbfQNAvl` z;AUcWIx8!Si;wSsuyE@`Mixq;uV241g-Y1=SLIqybNg&(YeWHI$$e}6!?V7=z5tRu z(mf(OqiHKne>kPv#J%&p9!?J?;IHRG_htn;HN?OWEW@Kt6KXi0#5g0!*nvZbd_j!x z!WZ+LWILp%aAF41i+)zLv^<%ewd=k)%nCXTrO#wm1JhUn)z#I!T7@A7%NNupvtoI)@f!sCxUa{v)_wY9 zZFjg1D!^gy_^)P~%AWwr6Nwr7f~nHgod8MIpnjWaXq3BM2DYBhXcOTE1)d@VAl2gH z;+$e(4Y4~TAmTKSZy|rm4EEPl0NdI^)*|TSF9RsUK!maxQ^z2|^ zc{R~pqDdBljmg~TXltto;it9VSP=6ggV1!XLRYWtJYTT-vnUi1k-Vi9?B;4o#q^^o z=lpg>h&pm3r_l%Cq^9ZI7!(TVNR&SGQy}iL=Y_}@`)Q;N0ZJKw0i^AGPFoRkfqa+9 z1QN@@fOp~e2E#D9>Z^au(a{m10aQ~Ykc*!eBBjy+s}Hl^a2<1$?n+YGH=m5=j=y&D z#0dfWA-TObf6!g^ZQdU!eGY}-{Q2|B*RE+TUhfIRyABXF*_Eage)1DpURGAc_wTW2 zv;a(z7{y6Fwdj$ZUa41Kq54b0 z!QFp@UE{)z%#nwWpFC+Abts;$pl;g}$*19~kivQ3z&%)y%`GkRtU6Tsn-22G_ zwsB(9B7t+&m)(;Nx1^vDlv+t!VR4as7pt_QBH?-`Z#%aJcgZh4o&&#iw*x0p^uf!Q z+>oK8POB&>-Ih%Z(qqVR4ElA-u1;)n5 zGfvLlL>opCWb{O2tForX$9J!*A0}Gf26C)>A&R9B4^3oUlqhBRg;lL#14F}^A5Si8 zFCI@zOS4{isV|vheC+Z$2W}|Iu>I;xbX;6cApD1 zSx>izSm695o=(y`$NOG6z7*qIjE>=B^RC*iqX)2sP+A~jWFlIY@Jk%{e6RcTS*wD< zU8lvw3UFu+b8(s2vf_;T`)`4)_kl0JtJ%N;hZtr75n(MsNuNO zeTNUWbw4P`2!PI_r!@Am`0`zhbqZqa3%YG*yeN(vRr#xo(r*^#*?pHT zAo_C}+{}IPyE9RqM0(tx;6ZHi{`O4+BLGW7(bgDk;#*!`hWiwUdL_Oxl5lW5H!sf! z=m4BX@%nYRb8cKmjtpT`jzSj;Lc=N=0z+F#MWrS!zq<~-r~_1(N9A=dEQ>>Ye1WhC zGocc&c&te}$Tm~(iH4%7GL>jsw~ODL-EUnozY9m&r%Fvr3+j~~N(>tuFlouqk$_V09spKBLxUNc4C!&Y9XpW6 zJr^*xB!<+=gS<^!nX3RoZt+Z+rM-Slq>mIMJFUxN!5)pqm0x|8?nHb+Ag4Qew)f8V zEEq$OfSb&6W5nFTpp4)v%6c66CH;7a`Vgw)#hO}J7zGIhsl_vR2gvgVY#%Zhf$@st z>3y-|(6K;oI7CFk=jI&n1S&y=5Lz^V0fTY7H|HIRcS=;-I*+%0H0gZz?iQlIO#O}y z4pq&~OH-rR5X}81{v{sY(?eo>9Fe7+XEZjN!s+k^y8G<`1r8zB>r+RXhDa^ZLFU}lz;m*0Bx=FQWKUG}Gu zr-FN(d@X}h%6OmF=lH9{OMM8#2KjFv51hc7#>OCslucz`UX_<&?oUiSK<5WM0v2L! zBwh$&T|7gHOh3+T&Wj*QzU94j)~X@ghY#!Zmfs>FQ2$_M#g*`D5{})wcTd{O;(D-7 zZ5SMkrMGzBniz~qREum#vn+)^w6UT4b(>Pr4`#sgvf&Pcx{=N-{``JFAYcG9Iz}js zsPPZh*4%L}L2Af*p)4K}77h#LQMJQh30}$7V4hJzS&k^Crm`o>0~%~A6r5-A@#L`zgyPF|^hTAV&N)8?dAj&Jq!2(fq2*3Qr^vZ*0xf4< z)YKySCnjEpgopFMW>6#y;=xGcI7QT121J;k9n0Uu84LwY?6y%bGD<#X@SYad-w|2d zd?>oIAqbn#0AH#;BEg95Ywd*mJP0%q*w4+yb%ittG=CL|jh&k|ZK{U<7AfYIXNQQ* zxdJ>xZoE&#A2P-b)dVCoS8%-`Xbh z|M-yz5_}kJQHjV-6Zp^n)vH&;ryvBw6D+n6VFzGs^t5P=o>S`A54ZC8N@zg6K-$UM z60Uiy&$l6P^cb-3v%uC=G1PXxu^YSN1s@+VY0|^lX8Jh8ket*ujtJ&4M@GpAJ{*Bc z`RORbll=M9YE0m+fabBS7abUZP@!fC7p2>|{TLo@vnu)uxCWdj^w+;O zB|19>0n${=#{{bQb2RwC0no^)vJc$Jl==rN=;iY0F^k3qVVat8Xe%{4^AkXvD;To4 z2uu5&+QG!Oar}w>`0=j|$cyzx4g{ zYp4+f)}^LCm(mg`8l!;!q1(0V;0IN|U620_j%wz%Isn*HS0}rLni_Qqhv*>!sCcD- z9BUNq+sHOMjfDtG-{@v3h+!e=6we?!!GkcDc6{yPu3Y`_Seb z{l^=Rh@QGw4m7jduJ)i-dwlkjjl2y?c6P^b)4R1@&JN8v?Z6+AH3up(pba0{N&HjJ z7C%w`$eR74^pQUM8~mjc&Ze|noSjUBa{QsOQ97js&YT=@n@A{tg!-eT{S@z&!s6{8 z?#dKk!OTOh2Hyu&yzlEa@RmyE$Yr-=;N4}J%CbG@|>I1A_9S{ z;3&zl`UubiZQ)&|k)ky0R?Nh81D)cYnkHso^fHFZ8qVP@h`TYYg#bnH*w~oxgFJmv zU`AjPSU$p;0j=zOp%M@^|_g`g_Fbo5yg(t+UPZlE?4&eEb-QI3p`w;u+1@5lYvT zH5NJY9@x<-3FrAQ^wonC7XXBV-GVobh9eRt96%s2OQ*D+a~W;=hK4A2)z|8^F0Wy< z{0AmTOS`Lxco)E9ey7#H^DB40^@-}(&zE<6*k4`>BQr~3ryr7=^|ZW z4CMHwwKeZW5c<0SSOfBSL9$5*J0^525!DRSB>-|j0N%z=J;I`*m`OE3to4Z(pD@P? zVuAs6!JB9Ed{Vf!BwiFXHYSUh4$!JF_Y~FzZVA#%HMn62dVPa~hHn+_fSe#LUW0BI z9axr}?1S!tLdAqA1WuT9LSLLQj6}SJ z)!Eq?01T0i+n8s2R9;?g^fZ!|H5R*?eUG?1BMF8h3HPD^AdB!00YWUk7luNSIEt}z zs4_I={}wjw`bq>Q;-GNgnF9`Tii?+iXh&qEj=&E{i~y_^&$nu>jqCj3AVvd$#j@}+ z)CA{tG{uQ;x%Cet;NsOnCX7V-h@jF34jlFR?VgpLy>%Fl$83Jt`qo?xc`K_UK<9*h zN_4#Hgs)~ycqbQL&R~%}Q#RLpiGWQ6#Kddo9wQ!zEBN+fU0qZ2sfPUe14;U~!*OnSQz}1fXOmnF4ApBW`@+*e!y|I> ze>G~YCo}0-eK^+y-A4N&7_wT92_1?$G3<`br=+8ESz9}TmRCy9f5ll-6Vx@=|mjSRKBM*J`-IXC6*k_rUn9GZJRpW(?@(>Cj z=8Z3l&F@5dP<1k090_i;H1sDXh=AB2C&56`%ZS2;j*eVPCG6u7yfFxoAwaeT=XI~$ z@d=MM@_q{iW`tX3xKvP71iAbcQe=RzLNw(opS*roTIPSp8*IgBhFx7;h&k|upWms= zfjHj-f?&S@Nyh>a2YIU3Q4zA6AIKPD=b@V7Q z(zN}5w05pRQI}B|UyKBd2n8W#$Al3w25=B05D*z%7FR_O0|gueCb~Ho=$fqD)`=0Zh=XuWg zH#Ig!2ml@#*^1SoZf4^5X3$aM{>S&Dl!;MMr!35T7y!zAANZYIj|5lJ2h-g`RRaq# z+XlbI+B!N4yGB%F=eyQz*sxPsb-X}SngCnj?iFBZSFWm|4Tfg;DxlVvn)zMW{ z9Jq5N@@9#c`bO`;L3rPZD@MMBogd&0Zglcacf)`Z6|!wx^!b3DV`F1^J>_rATRlB# zq;6g8Ai-9fvQ=k|Ql72$x*UP-(a{(;UT^wju=rEv99kg9JCE*DDlJ`HDz9qjlya_1 zO8qY|TEBODCi@ua88p1>)Er^FE$7c6Bam9f~649E@A{zUwlaglTdt+59 zr?>?A>I5NDrE)~@EGjIl$-3FSeyu|_99-+nj*6Z`gBc=>`;_?8W?c*5V|DYE$TK8; zaEW3f4~32?h-~c>PzjANR2o5IARm@2yn8_QXpAh-UETez>e37Pc6N4V=;J64-vD7# zrs=05ftdxDaY10YkD;yXL2V}j3!}N@UqEfv8T0V20^?3z!s8zEWy_8LDtiRw5C6 zNsW+V)WhM>Q0{-!ypVD~NDZwnGFIPA4;^b3 z4bKedJ3|*oo#gCXyR=!kDlTqMcT~k`S`taS*8DZTn}~S(^AWw)P*|?90=)Y~h5=A} z)%Z_RiJ%7n3<4&jC{QV`pkNVErsdEyR9pYZ$cFfM_kBGvI@G3+luWlhW74&p@*Y3_ zH7s74a_MX^X@x-Y?6<|U!l6K{+sz5!n95-`GaK_=V&-^l)}Kg{K6_N2WJNZ6@g);M zoI>U585rzZVOqHo%CG^}g!LCs+oe@IaVqbSKV>rQS5{3LBE$*v$c-P|Oo|+{9)Nl9 z+{JW$cA@_%0flo$?sk55pzRkFS{X;T)w7K8yu!0onz-Aq#Q)dHWxFjldi9DA0vAHd zzo<70R#2TW1p5)B4%v0FzT>!3_jdfm%UCQ{qv4c=R2=b0c$#aQQ&whsuPOi9*E5q#g^ERC`C;|+ zn`Dn01zUoG(k@?)lgh1S-Edvk&CSIY;GGK2-`|WR956Xx0RGh8D@^c)o^m{{QeUV zi}p5Hd^8#j!OCY*y8Zm`LwzBAc#wk0J;%9KlsyGAGj>lzwT zLE2kVmt66&vI`6U2u6{;jV)9^f783e(K0E-BQ%)e;llhB!0IgoPhl`1l_OSwHe+KA zJmRXjxj^sV_Xt>5T6qv{fnviSp)s(uM59TDo`&0fXSgN#J)>;Cf(BNYJ7)XJ0s*f#ChYZ)~8f9tQGKMu*Z5hU^wc7u@tG7+p zBH3O`!LSF5WIZ-N&l^1#(5k8%K8GLse?D3>t2Lk%yr{$1FM^dy6keNT->nJz_%C;w BADjRH literal 11462 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 diff --git a/index.html b/index.html index aae516b..a937359 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,24 @@

diff --git a/script.js b/script.js index 6946791..b915d52 100644 --- a/script.js +++ b/script.js @@ -17,18 +17,70 @@ function generateForm() { const form = document.createElement("form"); - const player1NameLabel = generateElement({element:"label",_for:"p1name",textContent:"Player 1 name"}); - const player1Name = generateElement({element:"input",type:"text",name:"p1name",placeholder:"p1name",id:"p1name"}); - const markerX = generateElement({element:"input",type:"radio",name:"marker",value:"X",id:"mx"}); - const markerXLabel = generateElement({element:"label",_for:"mx",textContent:"X"}); - const markerO = generateElement({element:"input",type:"radio",name:"marker",value:"O",id:"mo",checked:true,required:true}); - const markerOLabel = generateElement({element:"label",_for:"mo",textContent:"O"}); - const player2NameLabel = generateElement({element:"label",_for:"p2name",textContent:"Player 2 name"}); - const player2Name = generateElement({element:"input",type:"text",name:"p2name",placeholder:"p2name",id:"p2name"}); - const submit = generateElement({element:"button",type:"submit",textContent:"Save"}); - form.append(player1NameLabel, player1Name, player2NameLabel, player2Name,markerO,markerOLabel,markerX,markerXLabel,submit); - return {form, player1Name, player2Name, markerX, markerXLabel, markerO, markerOLabel, submit}; + const title = generateElement( + {element: "h1", id: "title", textContent: "Tic Tac Toe"}); + + const player1NameLabel = generateElement( + {element: "label", _for: "p1name", textContent: "Player 1 name"}); + const player1Name = generateElement( + {element: "input", type: "text", name: "p1name", id: "p1name", required: true}); + + const player2NameLabel = generateElement( + {element: "label", _for: "p2name", textContent: "Player 2 name"}); + const player2Name = generateElement( + {element: "input", type: "text", name: "p2name", id: "p2name", required: true}); + + + const markerInfo = generateElement( + {element: "label", textContent: "Marker for player 1:"}); + + const markerO = generateElement( + {element: "input", type: "radio", name: "marker", value: "O", id: "mo", checked: true, required: true}); + const markerOLabel = generateElement( + {element: "label", _for: "mo", textContent: "O"}); + + const markerX = generateElement( + {element: "input", type: "radio", name: "marker", value: "X", id: "mx"}); + const markerXLabel = generateElement( + {element: "label", _for: "mx", textContent: "X"}); + + const markerInfoAddition = generateElement( + {element: "label", innerText: "\n(other one will go to player 2)"}); + + + const firstInfo = generateElement( + {element: "label", textContent: "Who goes first?"}); + + const firstPlayer1 = generateElement( + {element: "input", type: "radio", name: "first", value: "1", id: "fp1", checked: true, required: true}); + const firstPlayer1Label = generateElement( + {element: "label", _for: "fp1", textContent: "1"}); + + const firstPlayer2 = generateElement( + {element: "input", type: "radio", name: "first", value: "2", id: "fp2"}); + const firstPlayer2Label = generateElement( + {element: "label", _for: "fp2", textContent: "2"}); + + const submit = generateElement( + {element: "button", type: "submit", textContent: "Save"}); + + form.append( + title, + player1NameLabel, player1Name, + player2NameLabel, player2Name, + markerInfo, + markerO, markerOLabel, + markerX, markerXLabel, + markerInfoAddition, + document.createElement("br"), + firstInfo, + firstPlayer1, firstPlayer1Label, + firstPlayer2, firstPlayer2Label, + submit, + ); + + return form; } function addDismissivePopup(popup) { @@ -89,18 +141,19 @@ name: vals[1], marker: vals[2] == "O" ? "X" : "O", }, - }) + }, vals[3]) } (function popupStartInput() { const {popup, popupContent} = generatePopup(false); - const {form, player1Name, player2Name,markerX,markerO,submit} = generateForm(); + const form = generateForm(); popupContent.append(form); form.addEventListener("submit", function(event) {getFormOutput(event, popup)}); })() - const game = function(playersInput) { + const game = function(playersInput, first) { const mainGameDiv = document.querySelector("#main-game"); + const infoDiv = document.querySelector("#info"); let gameboard = new Array(9); gameboard.fill(null); @@ -141,6 +194,24 @@ // ----------------- + function updateInfo() { + const player1Info = document.querySelector("#p1info"); + player1Info.textContent = + `1) ${players.player1.name} (${players.player1.marker}) - ${players.player1.points} points`; + + const player2Info = document.querySelector("#p2info"); + player2Info.textContent = + `2) ${players.player2.name} (${players.player2.marker}) - ${players.player2.points} points`; + + const playerTurnInfo = document.querySelector("#pturn"); + playerTurnInfo.textContent = + `${activePlayer.number}) ${activePlayer.player.name} (${activePlayer.player.marker})`; + + console.log(activePlayer.number); + } + + // ----------------- + function popupWin() { const {popup, popupContent, dismissBtn} = generatePopup(true); @@ -203,10 +274,16 @@ this.player == players.player1 ? this.player = players.player2 : this.player = players.player1; + this.player == players.player1 + ? this.number = 1 + : this.number = 2; }, set(player) { if (player instanceof Player) { this.player = player; + this.player == players.player1 + ? this.number = 1 + : this.number = 2; } else { throw new Error("No such player exists"); } @@ -216,7 +293,6 @@ // ----------------- function changeField(field) { - if (gameboard[field] === null) { gameboard[field] = activePlayer.player.marker; pubsub.publish("fieldChange"); @@ -229,14 +305,43 @@ // ----------------- - pubsub.subscribe("fieldChange", displayController); - pubsub.subscribe("fieldChange", checkWin); - pubsub.subscribe("continueGame", () => {activePlayer.change()}); - pubsub.subscribe("draw", popupDraw); - pubsub.subscribe("winTrue", popupWin); - pubsub.subscribe("draw", () => {gameboard.fill(null);}) - pubsub.subscribe("winTrue", () => {gameboard.fill(null);}) - displayController(); - activePlayer.change() + function setupButtons() { + const resetPointsBtn = document.querySelector("#reset-points"); + const resetEverythingBtn = document.querySelector("#reset-everything"); + + resetPointsBtn.addEventListener("click", () => { + gameboard.fill(null); + players.player1.points = 0; + players.player2.points = 0; + updateInfo(); + displayController(); + }) + + resetEverythingBtn.addEventListener("click", () => { + if(confirm("For sure?")) { + window.location.reload(); + } + }) + } + + // ----------------- + + (function initializeLaunch() { + pubsub.subscribe("fieldChange", displayController); + pubsub.subscribe("fieldChange", checkWin); + pubsub.subscribe("continueGame", () => {activePlayer.change(); updateInfo()});; + // pubsub.subscribe("continueGame", ); + // pubsub.subscribe("fieldChange", updateInfo); + pubsub.subscribe("draw", popupDraw); + pubsub.subscribe("winTrue", popupWin); + pubsub.subscribe("draw", () => {gameboard.fill(null);}) + pubsub.subscribe("winTrue", () => {gameboard.fill(null);}) + activePlayer.set( + first == "1" ? players.player1 : players.player2 + ) + displayController(); + updateInfo(); + setupButtons(); + })(); } })() \ No newline at end of file diff --git a/style.css b/style.css index 9fdc44e..705bf5a 100644 --- a/style.css +++ b/style.css @@ -10,6 +10,7 @@ html, body { display: flex; justify-content: center; align-items: center; + flex-direction: column; min-height: 100dvh; } @@ -73,9 +74,12 @@ html, body { cursor: pointer; } +h1#title { + font-size: 2rem; + margin: 0 0 10px 0; +} - -form input[type="text"], form button[type="submit"] { +form input[type="text"], form button[type="submit"], button { padding: 6px; font-size: 1rem; display: block; @@ -85,6 +89,24 @@ form input[type="text"], form button[type="submit"] { margin: auto; } -form button[type="submit"] { +button { cursor: pointer; +} + +label:has(+ input[type="text"]) { + font-size: 0.95rem; + display: block; + margin: 2px 0 0 0; + text-transform: uppercase; + font-weight: bold; +} + +li li { + margin-left: 15px; + font-size: 1.2rem; +} + +li > strong { + font-weight: bold; + font-size: 1.5rem; } \ No newline at end of file