From 2121a01d1e73cf2a66e677b939df21ea6702e572 Mon Sep 17 00:00:00 2001 From: Yumyummyyy <91830137+Yumyummyyy@users.noreply.github.com> Date: Sat, 5 Feb 2022 16:29:18 +0800 Subject: [PATCH] updated readme --- README.md | 17 ++++++++++++++++- __pycache__/badCursesDebugger.cpython-38.pyc | Bin 0 -> 644 bytes __pycache__/boardDrawer.cpython-38.pyc | Bin 0 -> 767 bytes __pycache__/game.cpython-38.pyc | Bin 0 -> 8055 bytes __pycache__/nn.cpython-38.pyc | Bin 0 -> 3949 bytes __pycache__/nnTrainer.cpython-38.pyc | Bin 0 -> 5488 bytes __pycache__/program.cpython-38.pyc | Bin 0 -> 3695 bytes fileOne.pkl | Bin 4291 -> 4291 bytes 8 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 __pycache__/badCursesDebugger.cpython-38.pyc create mode 100644 __pycache__/boardDrawer.cpython-38.pyc create mode 100644 __pycache__/game.cpython-38.pyc create mode 100644 __pycache__/nn.cpython-38.pyc create mode 100644 __pycache__/nnTrainer.cpython-38.pyc create mode 100644 __pycache__/program.cpython-38.pyc diff --git a/README.md b/README.md index 4fefd0b..dcb7a70 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,17 @@ # tic_tac_toe_bot - A tic tac toe bot made using a neural network from scratch + A tic tac toe bot made using a neural network with numpy +# installation + git clone https://github.com/Yumyummyyy/tic_tac_toe_bot.git +# usage + python3 main.py +# uninstallation + rm -rf tic_tac_toe_bot/ +# controls + space -> select program or place piece ingame + q -> exit current scope + enter -> runs selected program + backspace -> deletes character if changing options + typing any letter -> adds the character to the option if it is valid + right or left -> toggles between true or false in options + + use arrow keys to move ingame diff --git a/__pycache__/badCursesDebugger.cpython-38.pyc b/__pycache__/badCursesDebugger.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b8cf36c9bb299789e286c2ca731cef85f970bd16 GIT binary patch literal 644 zcmZuvO-tlJ5UuX%$p%;b0U}G|ZD28{y@~ANfC%bk*~@^0PP!)vJClyx6=eoJ>Dk}l z9``Thy8mK9u)1eiJXlb#KPq{z>LovRcD8`x%ifDB8Ni=#cpID!Un%`Qfrc4WFk_l& z{s=R!M_SN2(&O(iN!G{T~!Q%hMZ zFHNhBE=l2kP%ki|Jf-xz1PIUU4t_BPnvoh`XG&`?u{MF}rXd2UT-7g4OIm1U5en1- z-7gd=UrzXtqRr#wkf^RB)d?E}z2$#{6D0EYEUWF(WF0oD&Zf59&}F67bh*OXw%Nsb zhE18HqO>M2EM|q$Cvm8$Df+51?yy@8Nzu>eCer%gB5;=wzB}a!75rxcgehDd+ym0A z4-ENF?mpq@4xWI)wFtWha^PD0^WZQJL;l?uN8JUtu~sN=$Ac%051`BJzyFoAEqmt?(Ch0v_1-;@3cN`<8BI#r(NxwLqqW;=b&Bgk6;LmuZTujY~i{Il#>$e zV^*jG?hipb7r+B-Q|mxeTQPT~R_ zN>-%8P_eAk)`WG=#fEKb6Ray~X^hXRN)+69*JWOeyT+eym`rQwA&s>Al%XZ0tx$ZX zatv-& zRu<9cPm#)JiDGD_l~PeFH<4^36LvllLIfZI_egLDE=xSN=^+LS1%dUF} M9>ME`XCX@d1A1G*_5c6? literal 0 HcmV?d00001 diff --git a/__pycache__/game.cpython-38.pyc b/__pycache__/game.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4412fc0df7f9ed3b9f48df391427a53586be3781 GIT binary patch literal 8055 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 literal 0 HcmV?d00001 diff --git a/__pycache__/nn.cpython-38.pyc b/__pycache__/nn.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76780d025d13ede767392c9dd81577335e356216 GIT binary patch literal 3949 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�f&06L~c1XZ-J}9MF30$u$8(9+8M#fN@R2^*bIZ(Qp1*dNViR2 zwGUa3f~|&JT_ayQB(%5-zVwb9<`g%GTevHKJLCdhD171*0Y>3B@I2yw%1>9%`NFN& zTa_btq)F9EXX~5@Ar0Vr)%wbbY{03!efUz<8I-9K2{5#84sJhRvpd9lxzYw8tY_nT zw&H27wxMI!S7btqw%V@)ZG_HL<-(}2GU2ZZo8uJS?aNp0!&Rkv2Q!*>Bsgv|xF7HE zh;bJE$Me1CUZlQyTAEeuVN1>*3M}4ix1t%hj{gSXrzMx z?(_kPzALzJ5u81-CVUY*V+h}&h(HNMOSI94!UK{!Rd}Zk%(Ioj>Ij`#cw$p}XnX?5 z_wg~O$cV&IL(#&J#_pUT={3=lD1ilOC>)&S_N;T<>qfOLtyRgXYpePuHzTRu1fg;t z<%PO{QP->8o2crC)DZq&wr`Xqd6AnWp-8XE=^TsU8p+hoHXAjsu2_2+X|#H1R}#e{ z+e6d={+uNvwAvADD)PQfK%A zoa8RB!t%2@`IHOathros9`^#;g3%rii0a@B=Wt5|IE9^@VkNh6E}Wf1$`w)}>oxi9 zG{zm1{f@s+4WY1mp}sml8_85v9tFrMNQKZw)i*~ds;`gA4}>JSr=&ip6QV?7EaW4) z_YLBEmss3E`M7Gy0=Z75Mpo@y=LLMW$Rr|so|(#}-Ra`sr8WUt|X|8|paUi}PYKHF2(EpdlBw z!knNcMfs6~T%ZVTkU-43L@J>m{P9OOKfinDqno#m|A)us`eVxMsM>6h{^Hi{dsT}# zzx?czPw(|z4Al>aVXe-?gn%lr2-J!oQI`l5xGQf^mLo-x)uO+0Ax728wMBlOp`f%$ z#{aB$=l;F^dM#g#X5C+FKB>CwcTTEGd{+MJ0dEzDLm_Iy6kp+3{Q(+>cP!xByv?@& z@-4u98^HH4_Bg-~hll`wk6#4%JD4K}@i01dgR@(osU9d^kb7D;_!tAaK!sXhX)6R9 zPm%R0$0LR^;{#If5lE;eUr@|KzYOMe{IbyQ^4TVma9#H_8MxOCZR$|ha71l-n^S^) zX~-rmt8_9>Cu$cQU0w$c66mGKpr|PN6W*qX46N%T9PruNiQA(DV7+csAqP>po+MQ} zNyep^j%eITk_Xdt)XaoQBFZdD)Q{*eD<6qq&w1f&TQE`?YfFafBmj{jm^x~=--zC| zbl~b&#B&u*b$*bFoA@sx^{yOD_xGhzWNus9+ltp#nYN;{Rff7vv+q!2PdjaF`5axZ dHMl|bw|*N9j%KJlCoXO9@mlzNyUV0mn@BJMRqb`m@&+t zA7<=3rE$?4k+P)7+2TCWBcenOSs>mO79qD5O$ju9eSk5 z#pjzuzvntk;uA`b)LiU0H0N!R_?R(?)_O)_#w~Mj#^unm_E#Rxs=Og|=`5jOK}Y-) zVF9f)XDi5Q?}2^q{p^wHDWskDkrmaS0u+1h++lWk6sALbH+24wbWqVb(Hc;l zh2F15&ns$BQG9BhFk_y9u3GdAEtPU`_U}G>zo-tMehwoqTIZo1pH1xK!V3s$t_)jw zTn}V&4o|)474FgLPz}yvV@=wVQ&fki)F6HVf}N#pMpa@)5FE0Q70(g+3>=fxh-}Mv zu(RCllz1=)rV3R&iT;!DdvyA(gDt)AdH=dAoE}hZrqwA0 zOoKt9E@P;#7}Wpb@f5g4BzdtNq!Qs@u2~$k8BfmnivFz7q4LffDz0)tio9=9U9U3M|Cph)Ud^~rX4N;s*!)LV)F z$`Y9uaH)fj6^Dn&&*&iLA@c5(at3hp?mNDXsYRh1CJir7gd^Yj(GKm0R3hGMeeRWT zssT+J1vaNk(eW~jtvF>Q;rsg=fBqTVh}#xC-~VOG#1PLu1A(@^1V z`lJEnt&J{cw>4t)kI9#0{R(ip8SsX@u@N6jCTIvM`r;;rcAA5IGrSo#>LvWlg_^-l zsaC`oDAAS)oU4Bbw229ZM1CdAyoxp5V^o8B@iNg(;T=d0VHe$_P|zg%iK|{f1#W(9 ztXSUBgcd$qiKgwVwfOI6LklyKwHVLm5W>#Q0Rj)sTj^4Ob=7J(aEJo3vmUvN`}4so zXv?#^vNY%qKRqFBkdFyWTV_!e3*)MszLyttAiIsGJ0aSMD-Azi6ISS`u2f)R)f51| z>MymFt?4+(H?b&O+5%=DC`oP`%7ElcT;8GOL`K7(lgf@(mC$}pZ)Cx$9ACwacKtfT zMnUH)Z+U7fYA_?#^A2}nO?_-|MDz>1VLy0DF`EG#!CkTZ#zm+qKdT<_A{hr|nv}Gw ztDqoFQ6Zenz(U^5u?{~95?$mbf7{c6BF|cD5(FzDv;7udziumDBr07M3LHjI;5(wm z%qT~J)!nrm4h56QErp|p+VM`5cfNuK9e<57+g5}1_$Bxyr{{VDc5PamI^FpK+0QSl zEZ%#7#-5&0S^Jt%!_HH}bha4vt0mr7e6Poc55yJ~H+CV>wMMg4mx{;AycbLN6odTM zk1=OOGLd+EDEfT&5f*&Axb2|76dUfun`-Ri=D~v)L%;rlVvwyF`ex=t$JoI8stM~m zursCFu}NeZD{j68Dq_qQ;L5F8V_@fS@i8Au=?>vSqg-=4d~m}GSg!{6Q1 z#`)5}Ax8g)pt{U3xN2T%_+s@A!Y>5RJoM*4?_|f|^2xVQ+!s5`Djxy&v zPkV&eRXv}kgeVx-j( zP$AmR`z03pHi4np-eQ_Ag(NGgBzL_?BPB>818(v6U2a!y0nG&&bN?S{5cl{l_fdBv z>DrpfYq*}w;N@b-zWIaW9_esO;H>#_9u0$yciucs%p;YoncGtWrQajVFs5B$bnFOX ze#x2MP~T#7uNc0yRft6TzGn8%*3N-WEgsv2pC+m^F_!iy)bFkjjvZ5TCLUsuPHj?> zb7^bIZi;Wm{MD|upt)vvzp6iTHop;fQq!*=;Ixv$*Gxg4+8<@+WhlMj!qk1)98A3H zX2`Ey0Eg#wvn{tu4AxfmV$3Bcca1Q>sCQr`pZ3tA}AFYwL&Snn;qHmE>kR zn_hRGqkvK4Xr$=3DyXaG7KU{u1Cu}ZcU$pR($zKdVXWTQhMWbuY%e+W%zQ{1uoveK ze-6&8mbcm6F{J#>hYXA~6NInc;lk(0jK0;~qY&o&?xHYr0NnXAsxA74LDJgkSqh5_ zMrlXYdUlM$8HEQ1gz{lH-I5?__U9{X7ZMSw87gu_Dyd{Wt~4Q1>c?gy>xxY&O@o-0NW#iUR>_q~NRwfN z;TdM!SI%|kj3ifxlKuJT_vi2V`~BDR`o2C~MXn;lkYA4P{~hyJ{&aroMz?<*{j@|l z9>z+SHD|wpdjPq|FG!FR_h!c(Yw|KKwXP4*4DNzUiw7rZ*C(WOajzbU z{fgz}YaYU{KVg3p^_3>h!p7_VBhz0OF!SL#S#g793_qZh*&;ZPd?`Bb<gva`-I zdU66g9=&pIHJAWgIV943_P0Se__~lhTTzMM-*#{k#yXHqv0XH48^j5X(C`JHR*cz} zwY5iY6rxQI`d3qjQ6_n_kbpX^M9|40D4J`0$({vjZW?!4uanU%__i6_l!>~NE?zsE z3US}PCW;O_7v}2hq<>O4Xml}2+2X|u)CrKblL^TLgP=P;a@;a-`US2i9w^242J?-C zFdnL?5*t++3CuttVSWeA)CG%_k5xcW-akQ&8iGe&*#_Q9%^-Jd#$D5D0D$vo$9s;#t^vCG8ep#v_j~kByWe% zR+@r@94%+lMpuP~Fh0qo84SFsq&$AC8Ptvo3;ns{Ba#+7vcKw$pq_e8=mv5#$OkBC z_>YF;rC)!y($4Bb3pGe=RO`W!J)<=;^crM2pOk13ZHA>&wmjkR0Tj}e@)gt{z*wJH zr&~@mO;G~vfygGRMEA($xYZ0`cSxSzbA-k+fA}Q!a!4p zw8e(1cPJWqJ1H_hA2{}pFpW@zrBBY0VvOq`uzN+Wol}71D>LIZ?i>(T)Aihx%7SvU z*_xh==b&@bKc8Jyic6g;g&+C@uz%v2ZfR8>6?0g|#MJ0=)bR-lV4N++d()Orqch|1 zkG%>>{Cg`fdCTge#s)5G+XrlUWAYfnPq*b|E?45lqH_hRIi(JzHBY5vNuziBJbc}>pqt9RW3wbRu_Mx!hwzCsmRd}EI2bR!mL)T#ntvw zS8*m8?YDU=d(kf0!dcA;4+-mCN;}D?#=kdu`c_lC>r^xtbpMWcA z5{~9UG@N_3`PD4dF&kx#Jw!ciIH;LUie$L(aNMl#h-_~zwiMT9<`FOAUC*(0D<&5| z7UUa|1=^8tDfXHqH4`TGq}@;_xj|6lwR2fIT=2-EoIBR?2(Fjw@taoHW9W>Sz@S|V zmI{0K-<{!Lc$1^YM};DM_k^F8A;m?3GpQle`y*wj8PVJ{!6?UZuio3*Scw9%C!ZcU zl@GC>+;5#4=HY5j0rp=$i}8J@w7ul2!NdB9{u>E8tc=~x^_cn#KHiOqv)vv7q{BaY zyIcz(OlKEiM2d|wDe;wRFY7V-y`oY_69Xsq@SJ>UEIgW2Xi;8UiF}z;RBz?h5;UDE z4E7FX%QTBrNpxVs_)Q+<-nO$OGCVTc2CC?u&?7r%~Z8jeV=6sgTR;ocI zRud%+-on5->e5`HNETZ1@>{q4UI6?2!c4^qa#0~d2@X~BP_6yuq3gpnsBd>s%;ay zGO*N8IJj849+QtnldC`EL#~v&yJ2fJx>93q1Vm<)f@mJ!bn-DKI#;B}nwRAxZ==H8 z)5CQrZz-qr@P0m)%ep6uMsUz_6X|7d3J3eA$H=#}UZRPF4bR-=Ia29!kqNu zR--DfF}`?ATyVS$S6L&^tU@}r&uj+0OHR1v< zM(QoofCn$AHc=0X>A+H)u6p|;8x#uj6P*oNsPklbrzKxKc2iUzj=3d3)Sl=WGZ8MX z?m53`9T|>h^4i4n?T^7`;HizqTs4xjqxAl4bc4L2@X`J&Onj~+_Rejs2iZGFziJjB zbQqd_63k?509_sN8;3KW01bo*zw19Rb}afa2vLdspeQpL@?DvhI?uQ7EXD=pBbV93*>ki)o{m_@#^&7ct5LRi? z{))++AVT_b<+E7F|3Z5yV`X>S{^5LJuewPzi&mg5d0!1jhXY2&q;J`7cObR;`T60- zXGmF};>*@%q3H=eH%|Lq7>}X7v{qna*oDo@afLak5T$NfK9+%j8N+tMew8S3B1!t= zS(=Qf9Z^2CL13?52I_xtWz}ELhckSC8qDutqLb={ab#DJ^v#;56?R6zWsn$K+9P(OGYO$M8*Ebh&si=VI4$zj!AQ{Pd3`~N7l?6GH8oy zCYMqc>#38CM|a`)$Kqs+%8LxX<#!X~cll4hw<)0Mi>nfE=r4J4CD|?hw*2*3X?JbnGQ4pAfLNR;s5pu9;ln zdELo-K`_@RrhYKK81^k_G;tluV5?w^S8y7eCbLnmv9IrdQ#_Cn z((q*MKfzN{DqPy7HM7e)&QG>64-9x$iCW2PE$MLFDioRoVTY#69Czo?=$j9n3_1P% z{<>YAz!Ifbrt9t{lx?by^ug@ z9T2zb1&y(r=cKLr*CuwHsJ#5PaHg^niZ|y{-