From 656240acdd1ee0afd559c525575a84951f59d140 Mon Sep 17 00:00:00 2001 From: guoqiang <1915763994@qq.com> Date: Tue, 2 Nov 2021 20:31:45 +0800 Subject: [PATCH] toy:AmazingBrick --- README.md | 3 + pic/AmazingBrick.gif | Bin 0 -> 113161 bytes toy/AmazingBrick/game/block.py | 82 ++++++++++++++++ toy/AmazingBrick/game/game.py | 134 +++++++++++++++++++++++++++ toy/AmazingBrick/game/game_config.py | 44 +++++++++ toy/AmazingBrick/user_play.py | 31 +++++++ 6 files changed, 294 insertions(+) create mode 100644 pic/AmazingBrick.gif create mode 100644 toy/AmazingBrick/game/block.py create mode 100644 toy/AmazingBrick/game/game.py create mode 100644 toy/AmazingBrick/game/game_config.py create mode 100644 toy/AmazingBrick/user_play.py diff --git a/README.md b/README.md index 264d62c..a69e3b8 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,7 @@ * [lifeGame](toy/lifeGame/):[生命游戏](https://baike.baidu.com/item/%E5%BA%B7%E5%A8%81%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F/22668799?fromtitle=%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F&fromid=2926434&fr=aladdin),依赖SDL2 + + * AmazingBrick + AmazingBrick diff --git a/pic/AmazingBrick.gif b/pic/AmazingBrick.gif new file mode 100644 index 0000000000000000000000000000000000000000..6ba51e0b2e6f6f48335d0423e83692963f34b0c3 GIT binary patch literal 113161 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

UT5b?*0%=-lnJ1#Q+!$r6dCSbc{B4~b( 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

rMm8cV9zL@%G!TA^kXM_q&x&e`2 z@`6+Cz^UtL(&*He^T?}p0II6Sli)EQOV7ii*0{ozf|`%xKf-cnaD*$Zc0QgsnMHk( zTq0v;KH<$g%YA~@#<0T+iRWVXX`Hxyvxs{ksr@s{qZ2I6WfZBXo5WkDr0ug4HiNLN9{)BztwJ}10|DiM&4jd9y7V_Z`~wkoG8eNrf?9FCEA2pp@ zkA3a*_C-@`xR4F_YVNnxgj#r&MMFt)p4kQH?-hjwzRvY$2r!LqhWVSjkTLpM8r^yt zWcOw6dblVX=INv7V$kSFO(j8WN_IC0s2MA%PN%M2h8; zN5)>NU5SVj?!gRwS4LF9{~N_m-Krl;@naKGc`-V^B_o=>e;KqJ01C(~d{w?>DfYKuY$ti=f@Gyfvu0cre?b`qJ#G!Dor;3m_#s*%V~FhGc=1 zY|B;N>W1q(Fspn{udK0{)q9s!zhYKj9J{Wwg;{-9*9?*o7dzfw5LE4a4>Df6^bYC( zT0rt$V=QLXSjACGu;4bT#tvpD{_I+#u7~UO6I^s*% zvs4nRbymlao$(ijGbSfY2Xi*rFZSmh)P37qbT%QoyNqMvCp2iBCjfVZnzAC8#dsBp21QvWJ8@kywjyKhv|GbD-Q6q#|~b7-6lB2y?`<7H1xI zyKFwvO`}3scyd3Nw1{j?u*=DP)XX(@JVe$GWPHhsIptk@1s1Ew{0xmD zOHsO#;H1c!XH+IwIdeG;9jRvIU4DGtn=za)lwQm`9h9Mk+P+ay zeek;$PAV;C_R zHQg7fXgJ%g0;Td6?V!|@#JE0L4VhMb=hW2n`QjG_<+neKrKWv)$EGLF($;O1nqFMV zs_%Iqr5}V6RlQ@c4QIIocu_!!TC;{Rb$*ez3|HgE{7;s&#?;$MeNrpoF0w|5!CtR z@#IcV>c{rBPp6lptxgZ`TpL3mB%rgJ{cr88!3H}Hax~n|6ygqJd-Q=oH$fU~B}tDJ zfvw~fB_^C<{`8wl^3>pej`E9f_P^J=jVLfUV?84cJN^16#>$4i8SC``52||8S7|hdb*} zK*6YemHh~EB%-Mv2K&?dYuhx_`{|mI!F&yjZZY`2*71k=m})jN_?WAc!M!c7-(vK( zmG_5xIbLZV@&_EnXXlfHZZY}$+W0g11(-F*_=XsfG5bd7+(P)kH2s-s;^_V`g;XVvBDtJ>pbXhZ~5A{S`&0Y_0* zHitQF48_NaJ;Cy{kZ)Yk_>_jjB*~U|n3%S1 zcZ|D;q}8m9uJDktve8`gSX!piNchO^2u1DDFyY`FT6gg1k zX2JKWi}Wjnn=bHP}jWYd8^^JF(<+#|MH%jTgb75 zrzp9K1UpHSde6ckT5kR_Ct0yxk9s&QKYf|=gF=nSE@N6j@-mmp`84ix=V^uam$}}N zkW7T^qZRX*bhEotod88k((~y{xvD79dh$xqs?JFI@+#3gqNS(}^*1F$jw&%)@=8;B z&s>GgDKeX)r72SMuO`$hvKsJ~OKb(v{Rv?H-|MUxO7WG_aG`ugSKdq-myyy40X!xb z2@@KRmeNQ*F(zjfK^h-SX%v?QlhdOWYG`I@G+RECSU_>eGD6tlY_8Xe;mQpyM z7_+mNAWbx;G=|H9*(q{`8j)FwVB5@Rc0^}V$0JISOn58~g(lP}XlX2+7>j+qAa&~g z`8Yji|%ac;iZ>`XZ(=cV#}|>sAu;NNa|hT;oIlJN6*gqYt){2kM_IETBd` zST)bJ5?AUkBy)O_KfTH#33FdSH%zf=T|>4sxTL1Uud_aXnAO}|yMRi~8GmGeY%Q5d zO>8wr)QfV{UYSnx+qB%JJ#Fu1%RAG@(>_8d%HQsG>fCk2FL$pn z=i4K(_ZPU+^M>AWQd*U38!Q?S+a|+rT`kz-C>+-` z1uQJBthcwHj-sw^?jE?~sGmRBetJ89-G0L0F$l{b-1ajLiB7?Br9x0SxgS3TXB8BJ z?PppZro1AcwEA;#-tE4&GOC)`ebp+NfwFR%QJk{5g{>V?I<)XFHFKJ5;kc! zH|W+0x+L*PPAYxaYi4!d;tX49*A)_BKShw<`VCj=S8AjFJy+_dwx2uU!_Sm+=*XGF zBPi4mVX)&+<}f5l3nDaOFF8wS^2RM>NZNuwOGws4Gcx$&02ym=LC3Awppq~CtU={f z&9Q;iX3RLKd>rg(hksm9>z8J>pw23?_`u%cTkL^@x&HA1qp8j80h94$3DDW-TO82E zVE+XFRi9=K|4kRNM8Dm(w>bR>?je7mjq-OJz`}=P{baYcpRibc4W76ys65YY+Un=C zVEdV^CM&pz-F~KlrYUhE2=y6kKj&(#s6f+HxO$hoTIt3Mz8d*^fGfrQq!KjEfH6bR zH19SyX~N=+?(ijm)DP9+-2)V`f2d$uKs*P4Ib}FtCFLg;DkYDN+KjpI2Bgj&< z)XQ^$WVw%BMt-@U;kL{20Ht=-@}U14&@|=BpM-unY>lyeNp>KLlGavH0R z(&f!w3??+q#YIYOvMXaFr7m)R;=o2qh17zkc|-RdRoy+Hjlw*^YNKW+-eIG!Kb9{I zz!J=uhY~>ab@u6l;5f=tYqq{rU=B!{u#e`O5d089$RYcfN}BhCckT&7K3ys_wxQVP zbbtAC-lzT21Mf*IC>N^~^Y-rTwwV4LN|^A(g@p7FDdpP|!W$=Z^!@ZWeO?kAc#?im zKiiFz=@9|(>zmmx+Y(6yR0s~*p1k;S?K7#U1i@k7lg@glYdE-M368*wiS#ZWJ|e|R za4hY-lkT0Qhl;!eCra!N=)P4va_cAoS)-(*P9PV@gVO}32JQCiWV;`Ewzl`oqNKx% zwxlC(#`c~i*th?J(dQE%j?z+{h#@>j!F}9brSGWR>{Z(0Bn5A)FimoAsiW$on~FhB zwDf2970F4DxP;@=G10kWBs&#UW&z1R`(Up9L%5t5u%I9l%t9ZQYWCvN51QVylEf&>OY2PR%O&IzXlOex!h_%ww5MDI~?^G$+VIIszf{6yrRT1^w`m$u zCDZ7XbZpVLspk15KkiY|qmgOrAwPk-z^A0|h`vM3_gb?0n9?gt-n*2li&q=x6^%^M zcPR{CU+rvAG&bN>KkdDEWiUn2L>sM6p7Q$2q_^VRhrIVrHY{FV6pA-nEbrV{S^Nkg zNqkQr+l6;(=@X&6o|EQaQVW-{A&J@4{4h0Zca36ten=Ll%{f>%@xAy0ir~|B;%n)L zJ&j+|3r}||#rEVSr5Bl-ayc#1_mXwS74rw5axqv-Ju_?kLU`k4iv?>R>TpKs8-p_* zQm^~y4C2bUTxQKE^!GD3@L3_B&A0&&4BO@!)zQw2?^h%7UVq zjtdV<7wh2p&4jAw**w8z@IfJiBoH)49lE=+Q1l4Y&PJH`;E}kepA7T(TqWUqRA^tjL(8HXeTXiipskw%c z265Wbvzd*)8}lT)ckK+9#0Qgr=RYzD)YO(%HhgKQ!r7xs~}ub-~(YC2$$qk%eO5jmkvxn5MFfeD36wkVba4` zXG(FK8A*MgQcp%=?>jL}bduosi~)h_*cgKUl1ln7ET+rX^MJp#^V7Rgv(w-n^lZVI zv-j993OpS693*0!duK&sq#=%>*zC@#(L_-W&EB)>*$-y&DnqVr-hTIBVZ8mIP3Il6 z`ztx)2a2n2Z@$~u*u(f$C5;USCgKMs3le?&?%SmDP1miD$6G(JdG?~T`xb@S&Fgm5 zE|)dz9|YO;++dDxQgvk4+4IopR;6UGDu2gKRTn||qKChTF!`4!fj^ln{xZhaYmF*R zD`JauniP(ar*i96TpD z9CkIHWjIt^Lohz}+KfqDk}`KzY|0J&Rb<9()CFYDy%|$P-b3!}n4%~8Yw$8{)J1ru z?#x?QjRAK~bi-@?^{D1FR8Ca8OoHI%EPQcB=plPfg#1#j>oq0dIz4)D6_vGVwzi~9 zdvHCz6^sLrJEa$wUJHM~pL)NihG2F7(@Xe*ht94JQS1hlb$=!eWkUev9=6gv%lnCM z=a00@3QFd`q>MBsmyq0d1MX}!$8OF1D2ym<+N~uIyZw8>MVX&@sz<^0Qib(pHHQ2E z{As)N&;z8tgsvH!)An$Ma1x=bf8!ps*P~CBS=a;P8i5xH$0uVJv%t88h(*GVHZxt( z$G8VrL`Kv4Gf8V;Jbd#bDSi|6jNK?X&L@4@n_Cekp~8GHMOr)srI0|Y!b-p=Big{N zkcO|qzKNC*nMYmwNEEe||Ml%8@ZE69U%HrXt5N`Z+!Ss5e$8cYHmOn#<#h+r!yLwHXaTtsdU(oKsY`b$~N zD~pl9NM;5^aT!9-GJhlhJwhM9GWYK$ffVk5f`Gmm%#GY<@d@u$Tkq|bX-XnaO|)xh zd2pn>DTXaI$<46kA&pFPgj_1hZ%@l(p7L9|<0;9ZDPvE>Wz;HNz+!rywOy%Pt)Vz7 zCDFQC^WlNk<{7?k$j3)PU-J6DzO)@$|4ZX>esy2kReV-|7cT4Jx4s0-e-C6&%PoPv zlnVNi_KVU7Y7}P1pfCA=zVtB2PU9wX{1WI(MxZadFDb7RK2j0G zaTn-g{x#qZ`sUh)6WNM=RDk3f3q7{)I>yd@XK!gV%GT|swL{@bEZA5lt z?FB?mc#q@wSA9<4ZTAq;v6#Fd>WY~B0PfhB0)H{5m_lEr=P{c_-Wswo#h&`CF(vL6 zL@}j!IDO8)iO0Fy{2rG}Ib3P|HJ38t>W%GO%Bu{AAZ~}6l)vC&&sMm1e`*%(TjXm7 zxs<7`yMmmJ-U;SlvmV5AT-)x5h@F#vgS{{v8!kwrHE)$z0vD#i#^-IX%`C~f+|Uu| zn30e#>*Kl$*18%c5pU=MlkvfY>D9QZAs;VwrIExEomYaf_j)p~q6Xu$>fOrQG2e-f7fp~t2#DyIWzLlkD~CpU=a0wp;V=G#ilh!=vMe!RB1m~FdvV^S-? z#B6RjBvY8aM|VYdcpNDx(lei6^09L{*~EM;+~h3es$uRfkNu{5SsSKF;liDlEj~;b z+;3U&MHYyDHZvHlPF(Tf4|_9ZnX6ZJVTd}P)W*t+UY6>z0zCgXyA?L;LF7I#Du1!G z;jai2(1RCH=v&$f6ZHrTP#02b?FL5W9!@u4RHnDIlXud%916G#Ef)6IE5aEQ;YI8N zmJaGfy^^2&Bo6({T*~i@O=DD3ukqC?yN;>Q3h(^xq`08FZpzoX$ zx*=beQfD}izAN(XhC(l2{hMPc>Q{4aD9xtSE2N;JaQYmdz0UXURbQx^Bqf+etTg+5d1yKCJYC)8T^w|dItj~KKwViXrp zPRU@cd+I!Pt*blB`t<4r{u+-3^i3W%ts6+eGSos!Ts!geC!@R#wF{|oXAbDRzRlY@ zvyj#_&8BC2`(iWcV!9d+yT0#jihl0JjH8bZy!iH5gdbm`|(5-r%r7 zv+W41`7~Un0C?9I9yDXU>vAW~fn(K!RTBAZ|J4AWw=vGN{J28GoV^niO}cv4tz{Y&AJ5mPQ0CFWu3;?%0QA z)y5(#GkTnmRcSNNk<}@9a>&ogq-@9CtBZ6W2ritbw_Y_drnjHWOs9A5U0D)*$HLCf z>8@MydBB^1XPNb-ZsGD!WN&T7px0}am66yGCE^h~+bYFTbYq7dU*hb#`*`-Ed?{Z> zLHqJp?umP==km+np<+P-`7`ETrGyhm7=XtibVMK;UKva<)KOf+1sCpKhS<&Ma z3VeWX3+Rvl8zc$nkbgm5Dn_mp>yd|XPOykT_BAmJqA)JV{0PLHAG2^c##L*lSAsU* zZ7<7}T#S3X#Umtb8MAae#siW62*GR5ED!XAo(_NTN|a%)e{Ek<iP(OHfR3 zR6aw@oB*?#112O4j}eZ)!en8B2@Mis6xyNpd5niqQuR_faYpsZ<&+u)!=ox^*Ht8i z_-f_7y_6aHCAWzrIBqrsasX8IH~({0eQlc6@-2E&C%3cA zH<_JJ2JyaTc9tBA-Ky#*G+A+REN7Lga6}S)UkiW~;2o%pRz|9~pWqv9bSuMvs-8OD z`V|KE-_n|ViI%ou1IsdL3Nt??JL+Hw4SPDUER$r8KdI!%j)lQ}U&RTuCN=BUk(=Vu z>}3j`^33>;y$I!`qC~H&ODXuM?JoolxPKML@;`Pc`EC|-JYhuS=#>`s$Vp-Hgos&w zHI9hIXj}l@H>QD#cT6$)?%YH%1+HRa@Iq&$3ixIbA<&w9gU%c~0C8RGVur9LqnOJX z3A(uvoL9LGV)*K4>|zA2>GQyalxGZJq6Z>oV3%)m^F~YEL%oWUdpLuRRD8lcAEBzP z&lhnk!GO1cb$9Z7*xhQBLF8joxo0g(Avs1(Nluk~ZSke;jII1xK};Roqj5~FMwVxi z>&%YGrG2(GB{%FUXzopC8ltUC7jwO#lhHejFC@_K3j*lQkMv~=42JmXtnf^Kx+pjd zOPdg6pDA3Mzmm|XW10)ZHmeh1oJD|0a<<2GD#q{m8ur=@97@h%ug!K6NrX%j4L|y7 zci3{|Za(XB)!kTz+1qTajNQI&wmMbf%5`m~QFn9gLOaOpG|H*o++3YK3mHY_{3w79 zRP}#_&J^xuSLBdTAv(w>F5Zx+aE?}mgdnBhI9SVF0-2p(tGdeZjYBDg;(Rp<*H~4K z?&B*GRaI2DA^T4|;1vGkfGd+`p666Zz*k}26Zw5$kU^0n$dW!^TPYpc9A^-itOwET9LKu2F|RJ{~WB&sQh=GSq_}G zJBgdsd*!x^Y%eAVS7h%s_OzF$;YMdz1It!0@*>?`k>KK;m_KL9i6wh zEk6uK{?DCRe-`wS##r3Hx}QB=(UL?H|AEyBImri?kE{R7(YctB#_4tC&^2fN8Ow(* zD`TZJ!onL*uepi+BPpN1G8lPh;C-w%Sqs^Vpt{;yw16c}p2%YXS>d8T)A>f9o~bSaMbB2U%w0y+D!{|QmHftlK>(I9%SuLXzY|s}Unn6jz;5&;et979 z&ncfkDnDV87F49(^azCotG}#qS)IsUobaB&Y7;a+9Rz%0=VKs5uVORm?W}PQJC@s` zyAFc&fHtA+^)_*H=^I2H&?ZckV6ji2$YP0`=BU>E=FNaj17%1n?1ZR+}T)=^7(Irk++DOJB#dJ8=c7;ck+p^9-~l@do8O>QG+hwnXi#G zkB#^y@P4@95TeZenFTGB_6@x>w9Mn!z8zsk5C|D4hKB!0G5lX7)Ee-U#tF5Owc0T$ zERFu^-`G@rn418seXAJWP0*bj!4|`N8E-cCQ^cM_bQjqDOv(h9IJY2HI0oK-K5-7H z=G|j7H_KmHIM`GD$H?QIYw+%^$YZJ`>uy1E9Y1+nis0QEzu|{L%0wzQW%OT8oWDHs z_^%d2W|37zvQe*O>06^nz+4#plW%B*pW3@zzB$&bnw|wG)S?2z;3s-W8_I(|t!Zy} zoPXC9?g_tsX?=FTVR@8}@3_)TywCLh2)67tK^j8ec@6GKuXW8C4zFF>+E(gF!PerAt!!-TQzu z#`ugg&&<8|^)J|<{=T)=XBh~$u|0Bf`C|s&V&3;D6JJ5BN?#T54DJWCbKo4T{qPvJ zOULC&`5(paNW{_s9cRJ!kKu1A@iBk2NB9zX{3jjfAEm?tkKx)AD>1}Lf5#*eqTSVR z_Xv{*J@q7%w2kf}Rg=6Yu8fl=?k4bVLH@$KVC@J0}r|12G6 zEwUdw4sc~8J0WncA$cHZtEjn$D&W>6l3L)RCK0<+q9zlBv7@HkOc6m%#VwvkjY`)k zMoqiihV4-mUv)<}cIYc#h{;_$n@UTv$&+MIezCa8Bq!>S;}H~5_S$Ov zm;EQ;%7}hG1KR6v9}!=B08Gkpe18%$!5HE_ownY_iJu?`$V!%aTH)tAp`YzPf5I7t zd0|)3oVYT8;8M6N1CW&rN0ridC}oKd(A7>A&$c z+E>EU63jIQ&LbzPGi2kmFX35bA&hg~;EZ=L$h6Q8pnWBltl(`8V|gm5I?FLY0@$3N zA5YW;P-#e9V*}8>uQ_}q%B-G__2nA4+_eG1(?d%f@FfqkKd;SppXbUfw*i6{rU3HU zQPKF`Z*0zg$qxN9(-vBS{bRKoMmq{`)M00ILJYiwbyResUMPg=2iNL^Yn7quDnZ(I z%En|={_3^M@a$C0~{qqAv*DZT|O~Pp!Nw=(gsam zHrBgXE;*6ZNk2s}y-8m>qnuqXE$1x1K|1%SyMbi!aNh(yc-{ZQMH*;_UW6T+wtg+wSdbd9Lj$?SpdI?VMcQ}g5s<#o57(cA&jVb4j!XmU z&y6-Zzj_`#;%?QtW2tRcDxyc2SE?e7Y*uLOUAL&vT36jF*Ifv=C^wiI-YPR0zHZs` z1?^iv+K4$)Q27e^#+^!saP&%I?i!gpMF>o7O;jEp!=ESabB>98crStH_A%n&a{BZJ z3WQB(+nx(`CiHoE`dna)t=s%y4z1XvbpTi9BBNVW@zSSBTepRPO7--W5CnX;)o!e4 zw@*F<_~~mjbBFXB3ms$hn-TPq^uS@Cn|`}fwVnRxbA{*%{Z4u~x6M@6^Gy0(*HpUO zyUQBwwx6$SX>iwctl;1NbQnH4NK7(bx+9TaQJC5AUqvNRXARx z-4E=HzxjM8289s|IFI-eg6EMVKj1vlfd`&P1}_5Vk*w?Bc?9YQoJV|dEqC5txQSIm zh}(JXE@v#(gftMI)pX3_o1=HRfe+ z>~?(eZpkLb+g1`>T>a$J+eu7->~{S=)|zkjZ4#oZ$+-LsYkqOhNJz-$aD-*n{Odmv zld=v9i9-OCl-~vkxuCMJwEtRQXdXJH;v8pM)>=?dHVL&Ph3HPhr{Kbtgui6k5@%+$ zGB;Hp4^+G}#VqkWX#K&AnIijezJx`->4OzHMb2(!NweN{wQVLvuIBu9qZ9guL!XG% zWixf;AVr?3e5vQm8xPK#EAkC9OIygBJ-8~bDA1iRZDziqhR>`h)Xd!V8bnDQU-yHH zHxlT*lErjIy2FMx67QU-&VEUM9{5-E=kf;J_4$g=Hks94ol$&P!K`F*8K&y;Q9-jH zU&)A>Mb)QPK|7OK*+3qq@+Lt+XT52#&1x(6CDmLZ9~Etvb93H%o}~i01)4sK=KK-+ zC75<9&5%wrY@li>-^_q!Org1;2ho`G+dlSpqtyMc?)V@k%I|*z6BYB$0R@{aiL-vd7cB_@p&_j3)M^p28fAjiI4>5 z?;#VwU98otz6Ta6sKL}&>-Ejqu}TMxKAO_PXO%TRR2s&tV4><|_rWYp`xOTL0a&Oc z@v{Jz3iScm7kM<^wJ#89fe;Uo6Qfi^lgM$(qeAXO`26ie3^EU?(LyxA`CE(QMw{N0 z*X?rGDQ`}zBv2lWIsv9UlDy`_17&C*Ng6){NOj3-0V$6Z9f1mzMdQK$f>8>TN4uYc z#Paa!C$~ko>ocTeSc#=(TtPBOt85WTrGt$%iDnefR~cmH?W3hpS7D-yX4e(l8|FZ% zn-_DxO?f1vH8v0_81qLoE{ydQrKLQIOU1KK^g!PrT7)M1DwA>ZU;Dj>w)rUK!)~5^LK$_ z8_|vD?;Oz8K3BM`hd(d(7#{vy>QjCFMM*%a>Q2#{OtgC!xb6I3BqJEw_K`)q;O-K{ z#aXixCci1QB24$#FDA@>#kohAZ)(j!RHR$_lBi5|zl7+WB@_dHFRWmn2UKzw!}b?SE3g-dA!r?>m*kYyGu zuJ#Np@Dyfu`$<_w?1iH#HdOs&{)S(CCT)|5!{>mowA$N5z#acO7?zg%37}D|hjv zUG2WUqQu(WGNIRNvJvl9$Uy8wozwRC`CX{hNr zL0N_!R9eEKNUb@+g&XgMAdRAmn#pe}`8sGEgvAW@b3z(6#&18_Y0zO`5B+s+2ewMW zumWd3bGug6!N}>A7U3^oUH-K45 z>#~KC%NYgDm-$K$n70&s66CeDn3WafE#%+u%j<~dD@&WRWW}6I*Ao;~@o2oH3N2I6 zPtPCH&kt6~j8rg8U>-I(jre=UJp%COi+}frvh=@!lY*BeuBLbJvUHO&Lg=+aR51(_`6wn#58Q5CK-RXSr|=RFZ3{5C)R5I+3#wXiu78a|gb)fajpo9R?r zoG3gRMNI*oN>^g3paO;ums>N>PJ`=}n|Hx%1AI$50L8nvR5dl;KF)P;h;a7K*ek>< zdJoM{;{mRn##;?QG)nLkkZqtKQFVoa@ zqR^30@p>{Hst0Bp=o{Bghd-^On2GSb$q%O&l7$;D!%@7uvZ3~1_%LM44V<6cgJQkG z`AP1g2#`ugi}nOS@utiqMmbYbMhANXC|)gl5XCzguMdO|@5&|T^yx38!lvCRGm5ux zDKpE@dQfClUAaz?T}SFcp3}r~ojkWqV2>ibOJR>XzfXrFT^^tplI4v#hf~5PgTqM+ zr|Wh;{xkCvgVeeghGZjYi36l*F0EyajkbbXqJ<&TLA#ZH+;hE!eZ|o98J7#MX-7YX zcpj4g{yFh35sqrJ?ncgY`J8tpZ+i78AUl}%RT#FK)2Y8I6CKd(=dl=s$$4!t=!5=U zsXo+gT1fi?(NT+bd&{xx#nx>q+oPMY7L zU#(X_|1Kazn1yEk3u|HR(+Foz;jN!~?{q)L5nZE@XVGlZ&^T@a?aU)yyF8<3?9_bc zZ+)t+I@5W9*ZMSOtwjwlN%lq24=UIfKh^N_b?VEC@m;5_4xt?l%pIjw~oS|}jb;^$$qp^49Xv5tLr(c2eA3uC)M z@R}8mp9coX_=P8REIfXGkK;%#A1Mh>+>tm6;Q63UhJ?i?wI&r9*Mt1=9%`eM2-dSe z!vw0kFN!#tAi?oHYB(ltqVg8B9;J)70`B$KJQSgGt&14Ll}<(-O*eA6eaVUOC9C+D zys2e>%>x#L0`Wofb@OrU2X|yyCAx!5&1OzNVCN{1Xw6@Tti-Ev60=Iy_nJQ2=2PQB zFOYn{9 zf&$PBpD<_;b%!ymle6SM34l<>N3QhcursfN`%VX&fN8e@Zm;nBL3f^wtFPaR59Ca|{U z>h3Nl`8QLPux}T2cx9M<1-&R}9$mKDE_r`0^Lf4K*jm_j>Fj6>;fsQ?(fq5HE9noc zAG414_r5XT7JpzXUNGLddDZM_NzIO#^?mc@5D2ojn*Gg!_qEK|o}H&v+i*O?I#D4X zVsf=j)w#R*(eu+xCipN_*BKVg!l2JaWEQIK{V>hE{6a&zE2^FqELs`8cMMozD&A0- zR?=qS6K(|+Umq6j*vo8sf?LY|mN4xIK;9|kof8NZ`$(y})1=gv6I{^pk@n?I^Fz$s zkb1FchVY#hJ&D|~{+4N$lAYG4-nkJoVl(W+J8jR~a-+6eX1Mlt+U+p&VvxmWd9Lqv zxJu;3UTvKf;Mnc-_0EeY6Q2`N-R%l#%S&W!eG+B(+&J1=s586<4(>Q!X$f2&A52Q&h-@I~tXiALakjNQ*L#$VH~ zekPXDExrN2v&bd2$Dw-w^ed!fS$nZKTpN*~=$=&h+@TUm`P6<(wK&_G9<7WP0R0LIg{uZtbiuSDlP;qkO{{Xip7QSr)j5Mq>BvQBO zX}JN7K%5KE2xvLoJ^V~y`4z@kjAag(Pk(3xZfOQMQA{gy{N4zx)toc}5p#UsHUdow z-!uXuA;*n?-G6Qb!VkY?9Xj9fy7c51OEmfz;n z9^>(XW+-fK(wHX~G zgV-F6OuXbiSRLhN;2QqOnqxb(^v0U2`%~)C-GjMI>!Xg%fZU4qgQ}$-wzRxzeApuw8k}4Mc_aw*!A=8A}qz=g)jwTXI9` z5-SV8r+l`iVxZC$r}|o2t4|&eZ-i@&IkSWWWk1%HQ^u8q3HayV);8Hty1~jK=-HdC zX&I=5hYu5U-n{+j6_XMHGD`zJE)eD|b~2x?`T2UrlaPJKW|1n1L@ zc5pt$tW65alKTkGr;2UR;KG`AO4CMB?ADw&l}zol4#F)jFmgj0wCipMG>RdN=7e@& zG%&;ow?2`<4(lr=Wz0<$*M{VV*X$>HaS69U!oKB7rio>v@u$5Q!j|4Fg>oSUwcG5j z%jWGu@9p4pyvDs0W5J%pv)$9~#Lgst#wLlcyQjlVC6D%US&~4Jf2Ws~nH1_llF(6C zr(alJJn3Z$5!w09pd7h4TAO5kt+3SRe`%2_&#r2qt)zerlXoyTf2eU;NePKX!7gZ1 zLw8eAWiMaBHs4&sq*qaGomtVkcT?RmUr{~tn0{qWrCoU%oxbX@IqQ(eu;NlPUEOkX z_O88QIf(~d(^zxPR+V8HlPFzVTXXIjqERUyNASI4jQ+_X4|@*uU{!a2k46$)-C{jkt$2F%2gL9BdjnxwU+J1-x)-I60#RrP`5CU zKHAb&1|0I$O4iAVp> zA$tM7@=rc0vOWMp_Tc+b^~uxIA=+Tbp0AtRbeJJ*Zu*UWIWUNt_01^+TYz_dow`Oa z6Q=1+G<*=XA9Mr;(X%3Yz@2|+I?i7~pCaP9I*`$+BGUxyN3A}BnJ`0&iHV6R`r1hu z^OQ+(RcN)RIkeme}hI@l; zHd664%WMR`wpD-9b)wzAbo@2;zHDNKm%aI9kdmGvhf?;Hc!T}D?lRV#y{1}O#?q!n z^pzJ)t-KJ<#!k_k{f1sy44c&?HOaf%kzyKNMtOdLq6(M$YXRYs9y z;Ry)J(k3HOMiYeb_~ox^(S1ZpWy9mealx$5w{Sd&R&N(qY*#^=HO zOjA;OP&4*Qt+TxJBSlW7E2ywqJM&HrjS{E*4!)Q~6Hd2(BkN2bev)JkyHi}B4%zYL?K@W5j z5_zJ770mOQADHkfs94q2M&3K->x+2fJ#F7f3=eQx?`4~4FYm}XWGK= z9qrr@VG`_!`|M76;Fd>GnjjS^B9Cl7*ONMxLRs6i8QvHBpjvZJL@sSmPunHxK`M2+ zB%pNlDq6xRSk5fsT$&$sdNVgxk-a;A`pczFz2%Ez_Ah{l7JlUT_Ah1?twR{1k5`%t z1EKuw$CV`2BTBZMw&4KR>J1u@n zPBNp+D1g$Hi|i4QE;i8W1YX*>kZflsASA&+B_U7z)3j$dRGklg+KrCC10R%w{AG?; znsX#UDi(7e-#pZ81k%O8N}^Ef2v!o*=@4UZr72J)3{EmT!C_Wgb7WB#hZM6h+Gjz> ztjZHTaHaVHKFKKhN&t>ovrlew34DK$_WYMYM907fxFke|t=@=y%yv(>aMFUuxCr5s z3oY492D)&`vP_(D=}MbuW+~>Vs!93oq=yucE_V7U@haw5j#)r4MrW;EgUze<>8ScD zN5r%0>x?7WHRdWe80v@()EMf?UPdr9*z+GF34cuz@~4%g7XhUTtplOvz_4#xf1EINLw6HcqiV;>Cs=o zY;i(xcvPXCM29=p?7UI+sMKth7SH`#Z`Ds_|AfRu2+xu{9;S6%trikM_R99uqwc`z zZV)(1%l3Mj)_#3TNN~F)+xvN*r0ZIPAlq`bk6qprK9aD|-KuzBSHAX}KqaxgnFCBR z9R%n_wcnCB#W3H!0w`2W5CBL_efxRvB{(hP5PwKTU2{k8*oc zjxin1bgM;k**~OCY?{t5xkU#Po3zbSC&Z4TRUhUV+Sf82kfbasW3?Xsmw*qO$Y(p5 zJ0O?k)Q}Gpc#85njF{zA&$lY@Wixjg$oHsRO;->|&hNDQJzcEs^MwawG>Rg%`CTUY zfvR+)3S#-p-G;rFR9VXuB+~P{^)~}mxS7SiU0~e>o_(_a1JC{u0utH{p{&0qun^T{ z(**f*(=BiA>fK@zsnIP(r&o zq!=!+&~<{q2M9$iT5y0EXat}AgQuIz04M=SxBvteAFBa_!_oEuFhD#sL%`IFVJ^A# zg+B*yeohPyK&a#dFhBqctnW#*UHN^Wz(Q7pp$`yP+?h_A@@DU9m^$IlVVTSLofsT; z9c7LeSTZ|8AA^9D?)c+ppBVzY^V-1_eE~X&$)us08FSO&(lAtDfWV~CjeIWAI~irY z1;1qd9x9pgoe~hZWa$6{M8q#X`x#~RR3znxBIlk~abX!|d))9aBx<64DU{oG1<@$a zK}^)>LZ3|dQvMHaFID4^$(-vMCGV^D(o4s>hSSSNCSRtP_pDt{ub4mkJtzUhxBt2l z(DWVfV2@TIe7F%&#n$h+M1s0ajnQ!yorb0p>AF!v+bOC8>aJOKFO=?Skyh%SDV21T z-Ub^0nR+Rn`_feF=&ak_StvxA5)C0A}=cq@jnrv7`pUrrpjWrD2Wgc(dwP6|_ zM>A%8Z?tg0GBG*iWijP$;`MyOkGu7Akvg~ci;pfE85!MSuQHy`iZ5{P%&@el{bix> zQ5URDrXp>#K~p1bs|s?Ix?O5tk$UvG*graTr|a8G7Tu}Rw1b98jkLq6wWHLdQpEQe zr<14`RdI6XgP!;)tGuoF5$*cM-9-KM9p&4TiFfCVM^gBvu?F z2L}jhy<%X15W;3(`{eUtjhFx#l?+q@K4AcqfT*OP5>OceC;=&Mfl5Hp91`OG1~638 z>PJiMe*h&szdxSt_=HNcuPG#tXF4sAf=Z{ZDKyJ|IyHWdQXg^sYtE0fUuWSZJt|0F zQ$!xmOj-{Gl|@}sWS0F*>W4W>tD#%R*tL^=ju7x16aCB2@h}i44aOn@IMC_;(tNAl zavx4O5O-HgrUirrY)VZ`$hnD4p?9hWM?!O<1(7T^XuW6irh$D9kfza;m)s4{`2EUn z_D}jYhEv=C^Q{@JCrCIr@tdi3k)IF_XvI&!;3mP(;J%H5<#g~lZVTm&=DL~p%X&BP zo&a>=lrlX)7q0hS{Mya0pJQQM@h@QTvkDC-&++}oeDE$j)&VaA^qZ9r02#ks*WMpL z$Nzbs^PRBZR|p6F)b&sT+d~}kXoqFxq$roej0S>1vDK0Pc-=>}Q-oK+fG zqg~iOUBkuH7P2~`^DU72K%yJ#O*_T=38N~hU$AR`+J*n9 zcWX6_eZFP`9k)PKhrTz%%GmzFw-FFY8TDp7v?wyXe~>LQTJcx?W-HX@HRGfYK*B+( zUOfl~Z)ZIZm~VN>Yyk5u-N@#U8db0nOl* zr*>z>Vi2_)E6)JWF|j@YxX(cs&a%Hy75!Bg{>$cDqT3M>j@QVDsv2EQcw)l?QNE8w zl)#9L$h$^HTh-`cf*2QGqxWSieUi2(0lZ=)|MDyLUAXH%fDrJ8B!S_sqQT@^RWF5e zbudHk3=WQX+ zoE8|($t#9GR?K=Vk1}2&22{IoqBBd@U{jfW9o!{Yz8{9mqf`NViBqQfU&{n~BqT2n zykerS9e-~sV_k5;tu%a>a5)%EDhJ(XVm5s6rjpo=WqB58DiP;2!Ejd+cV4(^SBxhJ zNGeacGx0ZGu|I1naS6?X@$8=@IvF<25k%SI@+C$4Hzg;B#!~+AE0(!7kdm2(Sdx+z zi?x@W9YGYHoKyPO>?I555$v;wXb?WjV9}Isc(XU=?xU^KWuCHRf0}XTdMsTAs(}@K z`Z?m9)wGLb47ZQcE>l6CrQ*=#WGCHZTzi&C$jZQwa7%XmX#xc|WG#+{cP%IGc6cd6 z)8|+SV>6p2!+Jb3RVgF%z61LPl>bP~teptIRlivzQw7o^$!L^ShNAi)v-^^&xOv){ zS2R==nzCxZOY#p~McLR>6mZ!S;v`jycD|u)DodVZ6T=jetBGhJdwd zhr%Rijs-N8iB)!(o-qi7BYcB1!u>!S|9BZn>sFah=wOY+zo zYrrlc&-c6oK;KeH5Cob^tS1bBz2uXNxb>v8+}{Xy-DqFH%@-8dd?x)$PL2SZS%~lQ znv_dR+_7r+&MG26Hs#JjM*7uP%ykV@MP?W-=Wc38f(u2h^izH%0Q2I{)P+FQYCk7l0GW zKY*JW;O@KD;`Le3)Brq>7W4feoUpZITX&?~0Uck$nt64yApm>0#EV z$hc}SF~YE`C^6FbXXac_MB%sLJ}?}L@PG{ECvm?vbEhVOi^w>H4Uxv!vT59!OxLqi zEhH|uswmkGlm;ldcI+=v@@zyrQ1Y!*!ckyG`l%=d`c@?!WCQOi_@N@#QR=J#kSp6qhaR8DL)p_VV%Q&h= zTER^!ymFO#F&h_~(y0C%x+tWkoF^hJqX6~~u3E+MqMqbzDV@0KFy_Wm#=g%XTI}cfKCZQXU{&KjB8QTsLR#pP`0E|_|{>C_fu_Bvp z=XRVz{~J(&EMYTZS+x2*p4<8KVsxBuftee49#_Gc8`Bbi3b3c#djYu->Uf8g$i2~3 z`-FLN(!Hqy&lCPX@;tq(f`?NzGy>sNt!?ccon8Oj^Q6%7TUPQ84Up)_CX_PboRiQH z^gkL&;r>(@ZVnc{NcX$A{cPkhJ2h23vKVd-7IhZ;82WDkmiV58Gm02aXLP5y6RS<4_fS#;D{@0$w6;%8T11Z@E|Gv z$wWExe(9uZlz!O)I#2xbX&DxLiWqXJe9BnX47}g5Go*RdazPe78+mflJX-;jfN$rJ z`=D=c3Ofxf#CVN5dz8H--EYtq-LSCO+k>h&Bc++LB(}IjJ7XFmN)C5Wa`S6D(hzDoekJo#=0t;W#x)4;~D=>JpC)$f`DA46BN zu}}j500lfx9(BiwjvxKF9CxPIZ~^pp%+Hu7OBeL^mR3%=!U0emHpSrcRC6^Ni?5Ds z{NmD&l)bOIH?}_zw^uNTomZ~#-EIe-r~Pek2E{meo;rB7uw@V(@+vb<>a13-IbJrQFs5sYtq$xAD+BUBl543nA3*~z7Ui~OHK|98rC6* z=*P^?;0r`w4h+{1Md8d&#@}C)U&G1mE7naNC$I1DJASdsEVOtSjGri!K&uR>ko_k} zBub&$0j^(W!9OM_-8pA*X@~p+I17IGa$xu)g{(c29RYVGN@Yl3;hpI>_XCS2LmiXc zh{Bx;DTpGR8+HgIT?QHnqg-c038URUKOu~9M`0&?>v0W@FxHcNh#=1EP6|Q1w~!S< zf{&62L87l7I|0-$n4B=l$=zx;B<2%7byxo3!0`7_0}BG0T_Kl$f*N4EH=VWCOke+t zr~yH*g<80S)9t3?W}g}{>3?)^ri(Shn;o3{^}uVws=NJH6|$I9wLm`X?!q^-;7cnS z*~=)u=U7=H@Sh?CS1c8JTH0xk>qN3JM*vN=oy}@0U3sAmkL=*Vfj*1saEpgqrrI7RR2R zclQU{hemqejdzq!)=f-~&CZO^EiQ~Kt*#7ydOtKgy4^j!Ta)qn_m46|5IIGJa0~dT z_~VaqfPa)d_)#8TKFSyPD1YFioC0G)WA7&>_{1i9r9`E_NeIq%OmPiQjm|9zDsay) ziE)1CS&;)x%5-VWc$$0SB3g$BR9pXL*k>6Pu52Tk%Ubj)^jD~*FyrI%Fa*M`?; z<%FdiWz~0Wd1KaNdv0gK zZ9i$J+r=j)_Vrn$<0ffWLgtFTZ@hlV85`$sAFfteloHKemfpdm`@btXzz{mLsk5$i= z4YvjNjUA^==bb}`Bb1%%*R&sU*qy~58-_|fDs?_RbN@rVaV(qomG*@2B(zw{`(qQsKmc!!eGcQMs@ zu=J?rFT@wG+HMi=(1ZM<8q|Hi?Y7vN3xxF!7q~6b$YcoL`4iB@ zG8L^ofPVF_OBeXRN`$}+{3um_^G7LgFDUjbE^#QUOsvc+txk%qi-9$UM73nqrDsMY zq}jLjHdQ274cK#!jJk4vm>72YFgJbwz2n@<#QgZmYQo0i#&+b+{!Zut!opoNp{$Wu zdz8zBYIlqYtM6kH7kemW5!TwG(d}|1Nsm=}AJIC;hBQ4Yb)QDb2(LG}RpUjgjO)3R zb5qEzXL*b8yf4X3!C6`i+4*w zcmKfP(05zs_aBqzmseKn7ehV)QF>YHZ$9rI9ER^wA6ys8`b96!S4s3DR$vl6FQv(R zTBs>hGWhN*w3|3)U)CyekG$cxGu-@Sc?Y>%{nlss3l-@PQ>|{kq)SuI(VGfA2ZZVt z=RX9zI5&|k7e-3P=k)3|jUq{J0Wh-2SA?aJI6y)`nK)2Jp^+#^ zK}VS=SjD1|@Qu2&GGT~jFdMPIP9hs=m_FM3$3Qidx9vVayEFy)3CgQi^A{JgqRt)?8%E@tJQ z;ik?`I48MCaTNDoLyd-SHRLf$a7T*u$TaiH_I65nnbWJ79EkR-2bh@;$oh!GdNCu@ zF$VOzt1O0dO3ztx>9j9-j93%^rrgBER#pnzBN~zS_9cN96C*ud&qv(pB(^8KOGe?Q zTwtvtNUA@bVqV8a9scT2cs90V`o$d7*SnZBC6jh|F2kqGYSF7jqQod`oXcvtINV!# zC1wD#)VTCK05z&RZ*RR;e!1Oxsg2ubZ>6h3!e-N(I=XbL&Xl`!djM3hQ6Su4;@Uw7 zJnGnqi;uRwfSSGHw)YVot71Q_L!;r~Ge>L%;r>E2(VLz?B=7*4}<5mw=f58rL}%dxx%d0%nW`u8UlVj@68WBvL4xmu-C=am>caltMVK zQeJSr97xFabb$Lho}&xm2I0BdnJPl>c1Hovi9KVbi)R_C?1ft0qf24&*7H;7Ab1x16HH!IJ=7SCjE2j!#dvIBG!m`;5 z4)w0KH`z#u3ywwXnz3ym3A~B3fjewEkhaiJ2h!>I7i{`6ZDD@ZiBow+cZ`YJ!kv(y z?`tTUArNHiGG6F%&kGKVuC~Z*2k63wB6h3Twy1<^=iL9he|b@zyQx84DGC(X`RNi?RBCVXdW!0VGc0JZ)Yoz20aLD^ z?ZJXK;>)<8FOfyVcpi^ZG`+nRRS2jCo2n=u1-DXX5+x3{383Xhom*1ALp9W8<(!vz zndY(V!a#41g=U7$QZ-=8bplMe$R#w!$ce+Fhp7eSqgS6gyv&@yvQ!65xh4LoBj&dY zie{{6%^IDC=7wO!eXTSWxy{2%knMu8gN&!u26T0xDOWtxs=s+`t9ZL?)hp9_Ms$34 zXuJG#Yv%8vy7a)Ep9`|qTKR%EYxEK)>)GnocSa6bFNR30S(Tn?@qXLQgPm=Bt5aJH1h3C5LkM1=QWnNMKR3Td;CQi%fzbML z6NK9@;?%XL(myZ?M!_aASXA_iUNqiE`1}|h=svCY|NR; z*dxZUU?!N~x;Q zSkq|AFd0+lzC#Q?^X7A=&S9qY`hpmwtf)De`>p-?z=-=a#%9_TFybEBNTLxQY|F6i z2`X9AZ*@w5Tg1J4;+wrn#OY>zYL;c|ed++YsrjJ~KyD&@;{}kLEaNNya`FRnQ6SjX zl81UUy{NUbw&Wpn3EPtP?eRySh5b$9 zcX(n~_I4Lv%CCp6=mJY%vT0&nYlIK@HKmy~CJzpG9j;LA3*JO%le~aPedbhxRwWO~ z(@W@%5=iGhRT7R$a$s}voe8Q*T-LsD@%kd)>Cp9ee2y0guI}R_&^_a!O~|sNs^LSY zyUp_Tj4CD=L%vrt`Dib&G%_|S`SN_l$`=6>YweEkPz~pvibFLwRjfc#;=LNAv zS3~4&d#J~UA|k8UhA5IMUDu64LR+1N=*x(Dj;DtR>`5D9&hY5jT^ho7p00oU!E<&l zv4O;$v@uqoD#@2=p4fZ7A&x**E99O#vHw^@JQL3oPq}%b;EaX@a(fClZCs)-i-ts; zswYlnxP(z6KaaSl6eD7xa+cmqDLAsfrckg;nF`rVjaZ{pst?P6_-&@eVNt2{@8ad> zY^Gy$QL4@C;umz8XIPXisII5<=da~w>K;%%tfw4!XPckpJW8pF{j#@~fko5X#;}@* zYS2*{mUE_rS_dgn*;IHl_n6!?)D>nC8(gCNQKoq)2w)OqF%KGOiK_b9$HNMp1`SP{ zhxHd>1(lo5z4oFbcKfix1{$nU|7Nv6CL4!EZhc#gzlylevcKB${w&AmcNfM;A$(Je zkGA9nIIk{CI2YwkESV{B;I~P*W;0GM1P-v1Wk|Ru=T6S$DY4UeOL)FzoSNwwU}H6w z@D9zLLfKPd)rqH{RERumGjE|S)UT`S(Nd)KSK3+82 zVb_33ggnFgYA=TX{INQf@Z(Ty&;9c<%>Aon_}7kkZESnMP<(W-hI->O2B7a}L!ned z!FXG3he0e7xS2Hxkg7!GtwXZo1SPKDw7nq=krr~iC7W`|Z0&v18)8*lM`6Y|F*{~c zkSwe<#i5hhtvD zRmK7(AvEU{y*p?w$II^(<;AMD_9;Xh8M$oqbO1 z!=+y}MR{M7LEBFN(JlUnSdey5C_sW1@o^xOTo|tJ2Mxl>;R@0#cn~6WIt*ThNv~_BHi1&C;w#`#tRNbf*Qb-Z1iQ`945Yb8co-Fa2&P&r zoK8%o%^u4DNWZDE=m6;#LT*y_d3sp0WOr*}rR?x51|3j_BWQs#j6qw4X7F|+Ps*^9#dl?RN#>g}Y!ui9FT*?+!7@yD&KxMi>F_el(yjoOVPXfc z3`fUo2tGZNCAO94t6ox9Pbrqt=aQI=uQ}aVabMrKZ{oUGDv+eQWiZ zN%Ila`x3H4if+}S@g4W)uVQz1vgsagt&Wp%6EC+by|UTn-Z?m2pTiF*CaDzta9;Qf zQ&%w7EH~}#ESpDG54YP$?oZ>S*x$eNkW9Z04^{uEgH~50qUyVMTbEWHqR8K(enLjS zoN>X12IG-kn+uOrVTW~pc*`ne`urV(L?JT==~*f(3cfw2$*duWrilS1?J_^D~K^zbwmJpC`pY zl_!SAY|7IfD8)p~B#t6)8a&XF$WkC2Nods&j*AF&s!=9{$TUP?^FSSYa0o4U8Y0iz zLmfU05?C=bM4?wf?KeURY>678M=+9pMye9&bcba=YSO$Wz=}rW1=)yeTq73}w4$~3 z+lVJ*rVvq7k%`XQNT|c25Yxq_3+mcP%=V{{uyiMiT-$)QtWrq16jQ&!+Dz)tp^$mg zL>b4hnOq}9DF+=QPL{cx!qZ(wDVZBa?_st1b-sKYwOS_%v=2t)m2T{1(D9zKzu4Bx z*rIho?NdsB`B*QR?YXq}S;~Q`M6XO|alWU5z4Q;^+Thom#n}^4Cw+brHWju8e9ht=4E^H9b zfV?RoM3`(VQYub#h#w}HXJ{x!ugb8`3ny46YA8WQ%zRy=O0b62P>RHpY1ea|V5oGu{QPlvL{Jrpa-51Y50MW|v z@;9(4m|jaJjyyL}T$RaWzH|rj!}9kV;{=(h9$4oTGnA^G_e5ZZnAv*yp%2hm(p8@r z9!-@;?ordK7C-kJd=Oq>l2xX2fVO<5aPfV0K3V{O%bnoKOfTXBt3~;o$1;H>>SGv` zrmAf*%rC}pix4l+)J)$pD1Rap0YRJ6 ziPRr+(+z*T9I6{_yXGbpYPWW3|QwX5Rez22qD4) ze;1lfsxVj=SF5L6&_SX-#_Cbk74XdLAky-wp1`Hlr=IAIVNUI}=(M#aRA>uO=e8Fh z0MUMbxdi|*nX=vi$4%lAbbx5j%?IfeS{O0y63Z<$>y~=6Z`LDc%4y!Kq-YJ)IgV2E z{)hPc<^$Rq)@Flx9yS(3hT$}3!%s_WD?9zy`E0uh{I&YP_=D zUF59*q9O5*Z1*>ixBlPsJ_kM|CmIFcHC?c;A&$xJ&V~lCU&p^Q_30|j9AuL*h@$EC0WwJtbB&e)%iet~N0TtCkcI}=-Xm#klCbg)&#*?blh)4@9O;~2FX zS#aKmDc^Y4X0@{)gha${Q7O0)5u=%gWS#cE;1}YfO=;?$OF$YF&vr{+q%lmoO6Pp! z9GMYUV>l-U^iDkhVq$SIljVU1_Tb#I;AxDMw1)(t>Hf`e}TOE|AuIP^h==NCZeY-jTvH9 z3;r7^B;}-ynL>!v^hGbotLn0YA2Th+UK%E^<7&$GvtNuSQKe{7Z^{X+T1;dbrf9Pe z&JsX0^5YXF>FV0dOA=4lKYA^FGoM8;vsT*Bgh};!FHE2yLE2b1PZejAMWDh-`l$w! z+SSVi{PmBeA&Plwmzi1l+xexrfsf9V|VbXUcdtul{{ zOp1};I)SQ~ zUUkJA*O_r7@0{tKCwPZXJ9(%l-})8SaC6*tw@jS8Jd;*Sn}Or0bt4z2`}1R#@=r~W zw5fnkh4nHebiUbJQ-ls_4Fa$*-*>PvQjQ&2a>o(mII$`USsX`&at7qww8t2bqUKBc z3?YQ%)3+J3T66>m!n(yOnR9XMjBOc@CaHDzJB!*jN*JRipfh)KGuv$i@MDm~%kN|3 zT03(wZDXbDE!{5e?0d-+pFlPzT(aUAEb%abv8+_wRK+&r&{o1C>(S0co zs_XVdsZQA2>|%1+ zQx7~{xS}|z804Bl9w@i94E9X7#qio-iidRrH{sv?l%Ul9zt8Vm1+}aosQG_3=ti*o z^kZTfi6WsOg(x2B;2y)qTf|DX%0eNUcpn~z!Xn%f3AJMfbwW+tac16_LX>rbEmcBi z0$=hB&IG*50H`L8SM-yVpqInQ-+EvUCB^t;;827G1S=d)>fkPP> z$EBPS0A&fK3`nINoPV2D2j4>f2_MVw2`)cXIy1NUm!O*=#M+ZE)7P6a?2-@2bJ4ILDp{$@k1=@nNf0q}CBdMZZXQoC zF*@!U*cM3E0&T%sJt@@lb`xd6joZz%^`7)C4E;CgTUlm2>Dt&=_7{OI^tVAbS9J%0 zwqR5COMZYCvy_VE5~w~qND+eP_vsn5njiZqO~lWEIauemhAcp-y~{)^sAc5}8L_`= z{Cvz7*g{Y0k+lI@)>Ls&%Zisj1?2a=Pzf;s+5%f~%-z{|ONrgN;BfEVd7sp_-38|o z%)P}|%@TV{7Q@~zm+6g8-^=zxAlT13e}-^>rSb}0!>0;LZj|*>c1e_tA`uOgO_+)a z%2uxaE0palD<71j&ra^qC_DCHnJBwY6?#zjEQ(i9_pO_bP!A+hqEQdU=T}gUc5?B_ z5KzcZEt@=dUK`)O@SOaNgwN{<#`n7f*Qm~5b%t&8dNQ7^zR%tSy08XTDr1rDkklT$eqKL8njv*vOM2)V}GP0;QW$xc{?{LF+)ZC3P zBqhOZbmy-k^2@tJLW|buaUYS`x2B;Q9(3c_Jm8yGN1Wd&WI`=-!;Pt)uvc2h5<>>> zbzVLGW~bn*MQMT;Obs_L%Lux(NE1EFYq-wbCEz0#_XD5t-`+z1$Y=C~aysw|;P>VV zZhw&GvdojbxydMaR3m-Qgh}f9e7MN)S zZo+bAHg57HPnf!Jg5(6qyre}Q<#k=n@8PF2k`_~D>b~47$ImJ*Eg_xPjlJ2!$4w(G zCCt=w@$zPzka!9({`MrYZzfB5rN}`=dQ((3QnlE{oF#e5NTgd9eSFM z_(DNPN*_$q0~~+z!14F2V}?a*YJCGR{u(pg1jgUIRbc#Orzdq5U*rVF-%18pwv7$7 z_B!QYV_$wwuosmM<8WUqge5)dz)+bNogpJ^3*HteHV^d`Z{-gSJQy}38y;f8jEA+R z59_54k6CyXl%LD!wWAuDsQL!7OO=GS&{E8l9g$1KfmZm6K9O7a;{D zy$7_<z2(;yzB{|{ zh40@1x-`G}cibDQYc6o0%h?vox%btsuP!Ns72ckx6}lqI;vfgEzlS%vO$`eQ~mTbvKC0p`FarM zk?&L0Y%hm!YzK~2L}SpElkBV!x5u4NwmqodTIQ(osd&b9;JLM;(UMs~baaS)fc%gT z5%aUu>$5D5za{4UInd>o-5Ye(vYq&;8ub_xt<(6|eW}{dzthkA?IR^GuKQ zal>Z|H=b*r{7~~l-~F%D1Pod}#K-TOX_IhP?iq8u+eGBP0$qf5tC{iUM}~ke-tCOB zcp@Y#iEj_2v{JZ(vj$%-!#>3?!sk~!1Sf$pN3b6U?yi3Gen9QE@NqzuvkK`g%m<9M z=+orDnA0EQ4UDzT7LUyXbWl&MW64EF?Qe#PJac-?`|&pffsvEFQxOCX3AV^hqnO zwtbHrnUdtq)nnOGLT`KseqH@qx97v5ZO<=Dt;FHd9PLa|pnEF-`NH0NoCfH-Yg&6& zaRSyM>n~!xx_8&H2*c(xuSx}WI3~P&<z^az2>7Ce#4NtNK_p{ z>znkINUVM*iA?iqh#_09Xb%T0P2;AeAxAp0hs~dAS0i865Rxp4VM$L@FJ&;~jz(gb zQB>+R=ZpW2yX!xlc(WS)m&R7|KH*B`H+uTRzNy^~Xbwcst=8?tcUSe+x2d9TY$?Zjic|>auBmXdrIGX$pHZ5-3Vp|#!TnY3=1Qf-G>lY}m@&`| zKpLG|6ID~_FwplBh0@caRMqYn7&;@NC&k26^`Z@+HlncOF#i(MvEN^W6RsiC4|{-# zhrv(0gd{NW-gkZk6Azx`9!7q?`xBUW97(k?I=qjoOGZ1x4%en6SGFDjAHIyd&fvq> zUI={n0`WoK0G`vL4!_lZ>tP^hRe*WhV-}o%Wmfqs}hs_gSky@5*-W_a^}`XXxeIx!yPP z3m=g0mX=c&LFhMmW%J#q?VXJ+!k8_!T4t#$2dhq6?wL$6becJk!-Z#UXhhtgK>Jjg z%&c6!te$qg`#OX&-7=GF&tz(RNkgO%Wr%0)fB9^9oH8o)naz7c0x8M7nD2mZ5}x6JOeSK z%Oi(IPh8ng*Ki_YhU?ae$YH6wC!(Hcd}5A1#-a*hMs#SqSVsGUEOtykP!qi9Tl8xD z@Af++1@@{JS&2`no1{o%IvlQgZyzkSP@?EDPE{?B1~DTSzMf(;5Hm8qVVH3CT)M4Q z{2dc>&mP!KYd2srHBHtifjQ*?6AvDM{O^ss8^!=z`RBUSe+vM)!ZjY-T2XnwXDG3< zx$BjCWlP7hR^@{>Lf*=UkEjk;K6=11U(wnujH_sCQmU+Izh^lAVb5e*SK#_;Y^jQA zoX)q3^|ASKB_}q^x00uAY`H?9iO#P=1Yy2XE>V%?S1waDwo;~$O}EycYT4cvjRQ@P344xapxWj7QDOTp+P`&OmTazx{E(J@(R97jU}kAbdgp=;yf4WTQ~-t5TjqVLHFhoNQ^ zd|Qxn%J3b;g4(h?Vo6Ilyg9?mcemxUA3XfwwnN7*#j%IRhimQjU+CD!neotsx7MDV z=EeFalLAv&!Lu^1XSex%6pLwQB6qzzNVo&KYsxDHaSyEF`&*XSR|Gn3ylDPf{pVo>y{ISr=ke5|H6U?7dX}g!(Alw43C(;ChY~o1L;tuuAYII?}9jR-!xw>Jkk4m zq2Is#-?uTu59&+{Ggn3#>!a3;yw;$WGGZpW!~RAAp*Q1Rp+X8AoUlg$R15Ny z0)vW(@VMfG_4em?(^zg77Ea}Qj{DE{K-Q!i67oWNh|NZ2?sEzma6vQ?jibm^OS>0_!>n9zClI+gXt?|%Fk<_-Q_1SDR5|i)868~yH#iEWqVE$Ip?h5G-hQl zPMy@tyVTO=oWJnp&|B#U3ZSTq zAE3^`zz;nitF59Op%bd2?l-U7tvue9B~(fOV63i!sh&=_f|c@n{+2h==x(*ZES*TT z$a8Z?g7@|_4i%zss`GGmGdevu%R%q3XUBLdK89=<9AZja;)noQV??i<5 z$~vnLk;cYU$i~73CvJjVV@i3)0}MtrMAD1YBc6`00Axgp41c<($QqrI(y- zVOxtMUQO#QIK2nkU$Pk!H*XC*-`Sj1NF}JHBAgiBC$Leu{}rD(g*J071>})!SxrQ1 z8Y4;UohEWBvI~s7$EKBBDw|S2nkq=X95eoEPJPLxqpQx^MkgH;BaXAP^9Eqg&1eAj zd}W0Pdp1S`u&2EhZ&5qP`hGmv(*zIpG>%R%#=UyXQrN*?7#(kYnAPziq*K^>f1;E2 zv~%~}PI2M=$(|Qj8K!U1p7^a9;1Am{uJwZF(zSPC`Pwjuff&XpeF$303***6VGK}) z(3-MWFY1==MF6V^g$8;bcs`)OdJ%3?bD zuoa_`Rj9ZON=Mh<&*=FRsHBKkpWUy_G~nm+kM=;NgCnF;Li-KPb+=c(76g~&V_oa zfr1%&B||Mwi;bua4;ut{K&?-rM$WFm48nDwwnxQA>%O;Pu%n$|FkVZpbmY`}hB04< z-|DRtI5;YC+j||6wZiM7mMuA$wvG%F;d3*Qkr;-rqq@BL&O6h~W)7^Q+ph6>2D~2* z{J36!1HtDV+e8Kwbq$3Be7-jm56Ba5Mrcwoe=rR>l$fCrL!QE1>dIy0m28~7y8&H4lT^jf|IEKT=T z*z7Xk-KvpIKxq>;|9O4oJ!djrM3A+10Mt0eIc%>S+zbF8m{03%Bags0fKn|@0xu#6 zu!~_(t+$J1=Gd@{W5aM-$5RxRf*R-l*#{3W=0~_5x=vepCo>=GJ8_qVFlp4<0JJtB4 zNX<(6NvT3^Cf-|;i{`!2KI9h4wA;e8}T%8usH$b>;vFX&IjU6G>rKt~WsKaww5@tU|CrF~7^SN^ z`m{AmtgQ&kL01&DDI_)GTu%bcy`zbo6oPSfnT5wnA0=|K9Obn*JS}p`u3aF)Ajw6A z#6ho`59u=Aec z!kRI{GtggH`TgR%td@mSTE3j4i{#Q4qC(u7BDgJlvj_J>`Q3BsVDiDUqxXA((x!Lh zJRytVtB^3!Ggp=d<@jyC5RBJ;j0 zRH8W~axN0oUb_V%)wfHp^w`W4KZb`K{9C z_myho-AiF;XucTAS#QP+8XykKg^4+v>~@$Ld!b?3{wOD#J7%WN;>MZjVouJ{X680% zBC~@0(9K+KbDHLyusB-63zD#yNk3w#np-`&*Nx#L^?Zhb%K%e zShn}V7&H#v!;?HF*d*Lnjze$}@nKYgg@>|mNOt8a>u)E!KbKg=PQ3Y3Zq+}oaeB`z zUlJzF#ywP6!-(kL}oqsJpyaIF>qW>L@{BmZFHBzPdK*pfF{6O-TH80RRZ~lIN^BS)F8%^QqUVk(5SN+Y5ul>#Rul-F3zQ6hJi6MS@M|`wB+Jh+V&;JUk zgkTGQB9S+)LWaLFe0iW1)@=#+{n516=`q+JFY=9n`(t0|-u`Hc-ya)3 z>OYF1<{?Q6tefugrB}|=&a8Zmxg~M{U2zXF+smzx$hfd7JomU%r^tH2Ozizgx>Z}= zf~okzc(lj#)Pjk`;`4w|A|?tG$)#!6WLBH743U-D3+c-FVKC{n_cpl>&*h&=Z!D^! zBAFT^C^<&vb_@;oN_J* zO9C;(u|Vg%5W)uM{L61PoNq^Eh`1EQwcIi+Oe*>0RCMi~pG$G7uBK~IhIRRD=${os z{KfrI*dV$(_-_RE;xjNw0mRQ{&F3HHao zLvcZ)6q%0X$Wu)e5ut%C1?TFQL{r^6nSwo6eENYW7NY1=7xzWf*~&vllP zcB74f(i-r!N)FZ z%g8lOj})GMK7^g~d=QrDjc=@R(#-6px|T(yVRFNTLjEF?PWxj5iG8As)I~wEHjF-; zlkSBScHO<6zwiOcQ%HOWq6{1=)BRA3$Q=#hlr3ZJ4^k@4TX&?8Uy08NUA`{4^M%u! zkXwK12=eyZ3&)j)g9f7eN(v}K$yHbzv*Ha!#YmeWLA>P#gWkxZsvd~?B-c=CC!(0+ z4yUHkrG8*G&F2qwRdC=ox;%s|A!_E*B`<%R%OPql5989092+X2qAgLCbJNH5Ji%Sz zGRoqnffmu-Ei**v0mZpn9=v>5+6PtPv&n5b4ix7lWtC2R)aH-rN>Ff=mS?DY#w+d- z?m<+w@g*AT)BYpP!eupKFe+Oj_u@xX#_BP0l^Lt$qvaquV+xWp^&mNO2_$F8L2^b5 zBxlwu^R_F^m3hX{X=tQ3$bHV1j}4EZP?;X(f1)^o6`{GAvRVNP+3sO_H13eJ$~AH7{3XBzJ^2 z9uQFA`(F$uN;Y|XfHy^&Z?QSCirr%XsYtHXu5x|Xxe>wuV_lOS2TSW z35uq;5PZ=zUaz!2T9$T)0V8l%u26mEWYtY%S<@Y&Tuq$={^j4_3x8M9)a+SpKRCo@ zh+aU>egAKEe|pE}ThbQgF#VPHQ0`B(Cz6^__?kQ7eu?Kiw$Ow3!YCpeU5#JcQyU_g z^rr3s=Ko_N1z@5L9-9aLz^l^oAZhFM3@?%@e+{Uy%&tHr#T>o`%q4+`_(!ds|BOfq zy?;1SkYfLIlIT~FRNP}d>2*BwpTvyzD*nBYs{RJzu$#7LLWdkZGy|CbpQqD|oq&l} z(XIy%wSIQ}hJA)>NxC)u5UXC&0}iq8-h%hSQ>kJ-V4`)t>G%PNqzqmi0!drOVdsLl zH&V`pNiFw)i8kxAOYsG?%YW?)#Hs{{(9NADhtc5HWX$f6$%aBX~&tHlekjuqOCOD?%v*(Md*a zeZR$dJmhqb0>cFQF}-1P`-m3heU|YJ`p{j}Gfpb`htql%@}K(s^6Aj;1$=inu*c~Y zSXZ14cWXB!(so(5$c%SSbT;V{e>5Q?w%sDhkauDiv?CKWB}!jAvwikR#AKxL{zGvs zhuuB~mp0tqFZb!uv{3D3x$zgLcV>lYr75Fz{Z22doKQaU>S~N$1v6P}#=}!j2cn*| z6>w&~sr>Z0)La7G+}9%zqL|y*SLth;M>s8fneQmP(i2=<{#9uCWkO zDw{~tA2jw@4R1pCx&ch+BC4^#gzodC{|X(FeZSmYrPEXc(bB6Nhkyw^y6}3uIh5mQ z^IK(+^1*0dWYK|bi24EUq0|_aoPTR=KZV^VfQBZDq3reUm_k{_VX-iOJCpgdrp9Dw z*cJaZ8=Dyu(-kq};Bzz-IDZJ?g`7Y$T6PX-& zMOaU|3Gl$GZJ!6_(xG`9>vVg|$z#!TWA$UZW5Ur|0a+78{wwlL?$8<=$B@LGQw+S` zu-3SMlZ;snK2;q`r?gV`f1Z1dt>ku?($*B2?a!Bu{Bxk=`~LzzD04CSMcdZl@1W!7 zBYt=l`!v?%p5I>8q=u=|>a>dxEA zZv#+Yl?y)rU4M`k@B&?Y@OA>`^d?h2_eT&J)0 zdkxfY!Q1a9MWbo`-Hxh(*d+*^7lUROW4@9>ckyLyVNQ~o$T2NMGIIQE8y|8);c+iwQfk@*F=Y-8uApiHtPcP20Bo4WH&8eJaAEEv z@IEp_aDk~^IW=H$dp9{Lv8I{%HK(Wizzd$1meX_8J7N6`$K@aJt&xR2==;3e{D5Vt zX>8Z?sX{sVwWIr@#`e*tKD@&x=tM&Eyo=Nnc_1w^LJ7f4Tw0XY@Yt0(Auf)OrR1MQzggqLwiQp!cWPb5Xe?H7Sb zv4}yVOXAjW-MIj$8KWLrEp1K6F?`jOSwdVri56}jTWre0iB^vn6Slt^Wy;1Rt`Q4^ z+uh75;*jXUn-u>QY2oN`Ha7OTjD2u00Lz&018`*t48S=?J1_ueg*b$79%4Kvypnk) z=cs6D8Kbk|N>(rPQSo|LWd@&>?7>wI$*#<^u4yYd?E@UrBV4RL@ReMyoI|p+C-pK1 zuID|yKP$Xa)_jM_%A!Mn1G+3B1_=Wk7svNh*^>XMn zVN{uo+1(#ill0#Y-eR7j_Xc2v<;bhfjA7Wh068;j4fM#hwPAUa*j;F+*#lSM`Zst~i0ccj|gOg|Y}+yJ+)Z*u)$A?Q8ejq&f~J73BY&N%il4?ec$%26$-lMo z0gvWWSd_sd`C}!(sk@7z2;KKS`0Dobf-Mg?lae@mg$6JPrq~eeXuRpb_ z;U$ycYgf~6*u??LGYLSsUnP?}-G<+h{2C^^DVkp^B2wUM7eA?7b>i_%AhSCe*7!*! zAEEIk)1@SyHQ5b4SCZ}20t6oxop{x|xGVVDUFTxE9!BCeodhP;e<>Q2MAvnmwNJiD z9XZ6Iyx_;Wzf*(C=obA~#|Eoz=UG8vyt95*_X}6KyyNL*4 z;oWc`IQt`-%wgOcMLElZXC?et)ffW)3l~)<52s zX^C76Tb#nM?p|8?Tu$CRu1?XFL;nSQJ^6*)v?3TLs$H(RC z7Afg>*H=fpc7dL4@4~9!+TKsdj392{CFI6l?oncf(**L8&|$B1L@?K}N%E3z{=S~= z$Jg$+Qlyqt+{putz&{k2xTj~6&C`egdN$HJHdSpF%243^-NZY8?L+a=pvG7b4YI#{ zqPT;<%i#ga(I>?{fBat7WjNxw7L|H9cW=Zj*R67~D`ZBMx2X8f`M literal 0 HcmV?d00001 diff --git a/toy/AmazingBrick/game/block.py b/toy/AmazingBrick/game/block.py new file mode 100644 index 0000000..1d87eb2 --- /dev/null +++ b/toy/AmazingBrick/game/block.py @@ -0,0 +1,82 @@ +import pygame + +import game.game_config as config + + +class Block: + def __init__(self, x, y, color): + self.x = x + self.y = y + self.color = color + + def draw(self, screen): + pygame.draw.rect(screen, self.color, (self.x, self.y, + config.BLOCK_LEN, config.BLOCK_LEN)) + + def get_points(self): + return [(self.x, self.y), (self.x + config.BLOCK_LEN, self.y), + (self.x + config.BLOCK_LEN, self.y + config.BLOCK_LEN), + (self.x, self.y + config.BLOCK_LEN)] + + def move_y_pos(self, y): + self.y -= y + + +class Pipe(Block): + def __init__(self, x, y, w, color): + super().__init__(x, y, color) + self.w = w + self.scored = False + + def draw(self, screen): + pygame.draw.rect(screen, self.color, (self.x, self.y, + self.w, config.PIPE_HEIGHT)) + + def get_points(self): + return [(self.x, self.y), (self.x + self.w, self.y), (self.x + self.w, self.y + config.PIPE_HEIGHT), + (self.x, self.y + config.PIPE_HEIGHT)] + + +class Player(Block): + def __init__(self, x, y, color): + super().__init__(x, y, color) + self.vx = 0 + self.vy = 0 + self.g = config.GRAVITY + self.ax = config.ACC_X + self.ay = config.ACC_Y + + def get_points(self): + points = [(self.x + config.PLAYER_LEN, self.y), (self.x, self.y + config.PLAYER_LEN), + (self.x - config.PLAYER_LEN, self.y), (self.x, self.y - config.PLAYER_LEN)] + return points + + def draw(self, screen): + points = self.get_points() + pygame.draw.polygon(screen, self.color, points) + + def no_move(self): + self.vy += self.g + self.__move() + + def move_left(self): + self.vx = 0 + self.vy = 0 + self.vx -= self.ax + self.vy -= (self.ay - self.g) + self.__move() + + def move_right(self): + self.vx = 0 + self.vy = 0 + self.vx += self.ax + self.vy -= (self.ay - self.g) + self.__move() + + def __move(self): + self.x += self.vx + self.y += self.vy + if self.x - config.PLAYER_LEN < 0: + self.x = config.PLAYER_LEN + elif self.x + config.PLAYER_LEN > config.WINDOW_WIDTH: + self.x = config.WINDOW_WIDTH - config.PLAYER_LEN diff --git a/toy/AmazingBrick/game/game.py b/toy/AmazingBrick/game/game.py new file mode 100644 index 0000000..c4eeafb --- /dev/null +++ b/toy/AmazingBrick/game/game.py @@ -0,0 +1,134 @@ +import random + +import pygame + +import game.game_config as config +from game.block import Block, Pipe, Player +from pygame_colliders import ConvexCollider + +pygame.init() + +SCREEN = pygame.display.set_mode((config.WINDOW_WIDTH, config.WINDOW_HEIGHT), pygame.NOFRAME) + + +class Game: + def __init__(self): + self.score = 0 + self.colorId = 0 + self.pipes = [] + self.blocks = [] + self.player = Player(config.WINDOW_WIDTH / 2, + config.WINDOW_HEIGHT / 2, config.PLAYER_COLOR) + self.start = False + self.__draw() + + def reset(self): + self.__init__() + + def frame_step(self, action): + if action == config.ACTION.NOTHING: + if self.start: + self.player.no_move() + elif action == config.ACTION.LEFT: + self.start = True + self.player.move_left() + elif action == config.ACTION.RIGHT: + self.start = True + self.player.move_right() + + self.__handle_pipe_blocks() + self.__move_y_pos() + self.__calculate_score() + self.__draw() + return self.__is_collision() + + def __handle_pipe_blocks(self): + n = len(self.pipes) + if n == 0: + gap_y = -config.PIPE_HEIGHT + gap_x = self.__create_pipe(gap_y) + self.__create_block(gap_x, gap_y) + elif n < 6: + gap_y = self.pipes[n - 1].y - config.WINDOW_HEIGHT / 2 + gap_x = self.__create_pipe(gap_y) + self.__create_block(gap_x, gap_y, True) + else: + pipe = self.pipes[0] + if pipe.y >= config.WINDOW_HEIGHT: + self.pipes.pop(0) + self.pipes.pop(0) + + while self.blocks[0].y >= config.WINDOW_HEIGHT: + self.blocks.pop(0) + + def __create_pipe(self, y): + gap_x = random.randint(config.PIPE_GAP_X[0], config.PIPE_GAP_X[1]) + self.pipes.append(Pipe(0, y, gap_x, config.COLORS[self.colorId])) + self.pipes.append( + Pipe(gap_x + config.PIPE_GAP_LEN, y, config.WINDOW_WIDTH - gap_x - config.PIPE_GAP_LEN, + config.COLORS[self.colorId])) + return gap_x + + def __create_block(self, gap_x, gap_y, two=False): + mid_x = gap_x + config.PIPE_GAP_LEN / 2 + mid_y = gap_y + config.PIPE_HEIGHT / 2 + if two: + dx = random.randint(int(config.BLOCK_AREA_WIDTH[0]), int(config.BLOCK_AREA_WIDTH[1])) + dy = random.randint(int(config.BLOCK_AREA_HEIGHT[0]), int(config.BLOCK_AREA_HEIGHT[1])) + self.blocks.append(Block(mid_x + dx, mid_y + dy, config.COLORS[self.colorId])) + dx = random.randint(int(config.BLOCK_AREA_WIDTH[0]), int(config.BLOCK_AREA_WIDTH[1])) + dy = random.randint(int(config.BLOCK_AREA_HEIGHT[0]), int(config.BLOCK_AREA_HEIGHT[1])) + self.blocks.append(Block(mid_x + dx, mid_y - dy, config.COLORS[self.colorId])) + + def __move_y_pos(self): + t = self.player.y - config.WINDOW_HEIGHT / 2 + if t < 0: + self.player.move_y_pos(t) + for pipe in self.pipes: + pipe.move_y_pos(t) + for block in self.blocks: + block.move_y_pos(t) + + def __draw(self): + SCREEN.fill(config.BACKGROUND_COLOR) + for pipe in self.pipes: + pipe.draw(SCREEN) + for block in self.blocks: + block.draw(SCREEN) + self.player.draw(SCREEN) + pygame.display.update() + + def __is_collision(self): + if self.player.y + config.PLAYER_LEN >= config.WINDOW_HEIGHT: + return True + player_points = self.player.get_points() + collider_player = ConvexCollider(player_points) + for pipe in self.pipes: + if pipe.y + config.PIPE_HEIGHT < self.player.y - config.PLAYER_LEN: + break + else: + pipe_points = pipe.get_points() + collider_pipe = ConvexCollider(pipe_points) + if collider_player.collide(collider_pipe): + return True + + for block in self.blocks: + if block.y + config.BLOCK_LEN < self.player.y - config.PLAYER_LEN: + break + else: + block_points = block.get_points() + collider_block = ConvexCollider(block_points) + if collider_player.collide(collider_block): + return True + + return False + + def __calculate_score(self): + for pipe in self.pipes: + if not pipe.scored: + if pipe.y >= config.WINDOW_HEIGHT / 2: + self.score += 0.5 + pipe.scored = True + else: + break + self.colorId = int(self.score) // len(config.COLORS) % len(config.COLORS) diff --git a/toy/AmazingBrick/game/game_config.py b/toy/AmazingBrick/game/game_config.py new file mode 100644 index 0000000..5dd7902 --- /dev/null +++ b/toy/AmazingBrick/game/game_config.py @@ -0,0 +1,44 @@ +from enum import Enum + +# 帧数 +FPS = 60 + +# 窗口大小 +WINDOW_WIDTH = 378 +WINDOW_HEIGHT = 680 + +# 颜色 +BACKGROUND_COLOR = (250, 255, 250) +PLAYER_COLOR = (0, 0, 0) +COLORS = ( + [140, 188, 255], + [149, 93, 182], + [238, 92, 66], + [232, 219, 34], + [139, 232, 146] +) + +# 玩家方块大小 +PLAYER_LEN = 15 + +# 矩形障碍物 +PIPE_HEIGHT = 36 +PIPE_GAP_LEN = 128 +PIPE_GAP_X = (0 + 30, WINDOW_WIDTH - PIPE_GAP_LEN - 30) + +# 正方形障碍物 +BLOCK_LEN = 25 +BLOCK_AREA_WIDTH = (-PIPE_GAP_LEN * 0.4, PIPE_GAP_LEN * 0.4) +BLOCK_AREA_HEIGHT = (PIPE_GAP_LEN * 0.6, PIPE_GAP_LEN * 0.8) + +# 物理参数 +GRAVITY = 0.25 +ACC_X = 1.0 +ACC_Y = 8.5 + + +# 动作 +class ACTION(Enum): + NOTHING = 0 + LEFT = 1 + RIGHT = 2 diff --git a/toy/AmazingBrick/user_play.py b/toy/AmazingBrick/user_play.py new file mode 100644 index 0000000..da0651f --- /dev/null +++ b/toy/AmazingBrick/user_play.py @@ -0,0 +1,31 @@ +from game.game import Game +from game.game_config import FPS +from game.game_config import ACTION +import pygame + +game_state = Game() + +fps_clock = pygame.time.Clock() + +run = True +while run: + action = ACTION.NOTHING + for event in pygame.event.get(): + if event.type == pygame.QUIT: + run = False + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_LEFT: + action = ACTION.LEFT + elif event.key == pygame.K_RIGHT: + action = ACTION.RIGHT + elif event.key == pygame.K_ESCAPE: + run = False + + done = game_state.frame_step(action) + if done: + print(game_state.score) + game_state.reset() + + fps_clock.tick(FPS) + +pygame.quit()