From a5c452429334c226decee32d04be112c42b5b3b7 Mon Sep 17 00:00:00 2001 From: electron271 <66094410+electron271@users.noreply.github.com> Date: Mon, 19 Feb 2024 23:46:00 -0600 Subject: [PATCH 1/2] add sfx, more ergonomic keys (in my opinion), fixed (probably) piece swapping --- README.md | 7 +++--- beep.wav | Bin 0 -> 127054 bytes tetris.c | 64 ++++++++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 beep.wav diff --git a/README.md b/README.md index 2211dcf..38fcbe9 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,13 @@ i spent a while looking for a gimmick-free tetris implementation because i'm hoo # controls | | | |---|---| -| **W** | Rotate piece | -| **A**/**D** | Move left/right | -| **S**/**Space** | Move down | +| **R** | Rotate piece | +| **←**/**→** | Move left/right | +| **S**/**↓** | Move down | | **Tab** | Swap with storage | | **P** | Pause | | **Escape** | Quit | +| **M** | Mute SFX | # to do - balanced pseudorandom piece generation diff --git a/beep.wav b/beep.wav new file mode 100644 index 0000000000000000000000000000000000000000..2eda3b8d64946d4871f6a0e33901167973911c86 GIT binary patch literal 127054 zcmZ79dA!c`yYKOJujyX%WL)NXCPh>lh(t)K$Pfw@QKkkIQi`IGlm>Irpoua?Dve09 zic})WwAQlb@w{I5+4p{U?DhQP*EwfD&e>=GE|>S`x~}i~_3PQad-tqB#DFgSueyEQ zxcOW3$GF z{_F0~x<6|M=3+5c;vF1EgX{*`L+~uVK`Wqh2M}-mQi*MW??IG(4xFW`E7Us-y@+Sq2fwR z#e4V<^&{#>48%fwg#bSnVLaC14^)e+7TFh%VF&WiI;wTlD7=IpkruE{>yK zOud+!@iab1IWCO7Fm^1~-~cj$8Nr^IiOo2JCUH&TZoy*gMr3?s{KXiLwK#+-2~`q$ z;}L8{Hku_iOB{wJ*n_B~sH96U0qbxGRg$YD_r@%2K^B^%G)cJyi}5uAse#mvxEpJ5 z0O@JzX+1C<8*u{l)9a@X!Q_T<=;RZdqqebK3lPDP)NJ{^npn2nV_h?1 z%Q`RXb}YkBNX|~q?uG}k0so;vPJ^6*Sb#54fevRooE?W(a1fPpE9G8;hp`!F&?K)( z-cVTAdk~c$m468)U>y#jN~6$gv!O0i+kZ= zY{nThE@@mc1dH$$D$t>{L+Mzo#;-^%OD*e;2eARiQMbHq`AwLIPf&<96>Ta;;YECh zU_>zDGEBm2_ybh}RRX;*3!88X4I>*y4#d;=3?(=}>inoX@G`zfTy$LY<(Q1u@CT~I zREg<@nfL%FP(QYQ>;TNeCn!McVC&#*cpiHZ6&DqE5$?un{DPGDl=!ZA0B_-MR8Od$ z&KOrF}A=Iny%egP-4g7_wXRDs=jak@)Q)rOeAopg>$EPSn>%7)^Bk(-FfpvWm z?#62Tg5-kag06S~>v0&>3ab_N!7OaTNz^Z@AL`jp7Cl+C6M1M++@g3G7UL_Fqg_e6 zk~{GdzC&zjY-uNq#~N7MDP<{TU2#9 ydVUZwmR%)kcxi&_=6Dz3+DY{h9bjA$4! z0Q0aDxo93}9=HVy@i~goCbCWB2t0?~s6e}@c2Rf2{{1bY`MC&Vu>wCLE+#JKQjEtM z{DP#|q}a}wjCDAOv|w7WEAGb|_yd*VD#dljRJ?`1P$j-fd`~=xcVLZIOQ@F63)Ar) zjv_NLGqE>jVgvp`jiee$eef_g;uvZs*G#?^4`U<#Ma`6&Dc9m*Y{W6tOs$!EEgr^3 z97Bz?8fpD-KVC->zQgMD)#=4)#c4(9Md|;dBCR6r;wl$cX&Tuya^Z=ECwiUkb^2Ls zKehc-(=$!a3^_gIwEr6J(@V}QIkOQ(Xq43`>t@Wu$H+tT?B?0GU?Dz35nAW8&bbxO z;w$)<_xWefKRXIbu@`~dK<zz+!K2lG3@x?Y8!5nm8ra2dv9 z4SqplVPfGGn21;LE0T+ni#lTx?AgB|xj4DF3npVN4j`o@rKAfcV;v44r8K3q3npVN z4#3*(g2`Bm-;i9MT;3Uz@G5>qQbkh5<(Pmq*pGyWgi!CkC*q!nRrm>Ufw;gW7>5=3 z9x;(Ikr!bMUdBE|Mny(l2>bU7*ncrKFyAHFk5&xiieD(NiV2#_y|3pSYMnX5-hjsW3Nr_2`m*F0) z#1Dv0icac)JFyh@@-nnZZj(G5i|{G(U}m`)bFmF4Q75%dYF}9AZ{a`iS7++*wBc#J z@iwwB19da%W*kmEocctiCo1{p<-xNLo=rZPe6mAUhpaQF&YZgI%w1>Npc_8Jt4PX9 z%4&#PFdrWw2aU5EXAi&=_z*Vq`Z@J;Zop&M40Cnuv$fCmg}r(s{y}DLW^OM$gtu`R zmGdg+b;kpE9S4z;pOW7Nlkf`m!@BN-aafM;V8(8b+wnZUMk(49wJ92oh4>Wq?54#{ zi*Lpg_zQSD*=UV<;c z|F@%>M>mfigeR~KCs8}5c1#~k$J_V=X|ZXsT`&Qw@I9h}QNi{YiD&T{XeFU6-aoE? z+~e4Ue_@UHz!bcOUy;DiB^ZMjup1?4nbQr2dhp-;MBPk*&;!@m&7qJ_~ zXc1@;7>K#pjAQU^*&X-c75oV6+kA2x7U5%Lp>A~D=)Rba^*D&cn8cV%Fd9qoB?{0a zwn^+wcoZ9O80o?EU}xNom$3&WXc5;UZXo910~|%=_{yO?J|TWW{0i(tIa(#ON*IhM zU?x9?Dv4DRyI~^i<@-<$bNOJ*#b*2i-=AGE0W0tgtn-#BEmH>KalD6r!C$EinAo|K!Do3s4X@>4CcTV$u4NjbA1Ye809SkqtQ160ng zoZSq!Vji~P1Zw2e$hij2Kh|MCf@g!g6g!0S$Ktb#&+dXh=IZM)6ZYyu@GqlFaTi{| zS13f&{HFQ+F&i84H!=z`3cA1?V!yVoOVP5hW#J&qff@TBR4J-b)D;u468lh&R>iG~ z2V*XLLmoqwk}4(LFcB-T4`pao+NyLA=3*0$qH_yk#~6Imy+7p7n>enJ#KZ7~${ zum#6ZCAv!Vl^Bm@*o`7IiD?pZBOZo5{2&ry6Jk4J6c%A8PN7DyMz9C&#VUM@GFam` zV>aHyA4rN%ioXPRU@<<%Y1B-pna~6GVioqG6wMQxC-%o9cn7~DAt@oLBSvB&w&Ook zORkpO4c7U~_!>N~Liv0^%7B#dcpblE4`!s!NZp&VH-%wgTL0Aksgn?&5udT7d`bEE zQ{zu1WhZ41%^I5331;YpSqrnS$-ah)Z;^dBmf<7hpl(jxoIaR_*I-RYpN&3y0fu8f zw&6Ic=2p$^hKX2?y(mVryk>bf;Ss!pLrBa|%)c17;~9L6)2LNYtDq=OA|{wVk8z~2Tq`R zS@p7RFq2r@yHS8f<&Da($3u7>Kf^%W7DF%>@8d91B2pqc;SMZ@@5)m!n_Pv7Scb1r z0B0wC@gUa0{v8n&5!DIM_-6rF&|s;4>DphVlKxREWyV(h0NH@*sEYp zc^O|J5A}leg1zwo*1#IKk2j5L8g~Px<8}OuKzty+H3s5Q`0hM_U_vnA0u04mypKO& zF7JpDcnVu^6lqCmNu6*97Qs6I7nPGMCtm?)Ezja3oIzAdRLT%^!u!~Or7)-LOWv2f zK7D<9NqkAXIikgx7H3j&QgT{lwaR)W`<3iAn1;_`p3cb0$Z3SZcm!|b0PNH4VNK7& zW*k9!ZhG!z@U3Y6_!y^W7E07S0IE&@{SfbU!?ZwfGLD zu!modX?PXiq6Cd&8^`v=R5%m=21RHXY#8hVXDaq_vx<4VUR=GnUbq*_@fFUZc6{yl zt6^Sw5uf1Tx&dlxS^RWqkAu%~Ixiv;%D&EHd z?8kj6_oeJk-kltm8kgEIrD4iuj7S@i=HIn*PtQGlWe&2h49)V)&?~Z6WcSMHmD3b= z!@0*M9EAhNPPiQlV4wD#n3kKC+X=U00k+{Eq~)dMb;2ktz*ZbZYJO^HZap%8Wd76G z0y9WTK}x|z7=iiNgujqfm{iyS!|^2E#~+9!2o1{`mi5McFmGGiXHmPncKOv958so!a0=Bbs#SEx z7(9dRI0pXejJOyh;7srXIP<0j1}?y0%*I>Tk3eJ~vITB{_5CWGpA@2gRQ;%4m<(s& zpW_UwM^}&Tf-!goAL1xdVp3u{VmRjFJsd!EY;f0e7zyzS@$E1e_VPFJ6Uxvep-IBExF5^$C9>cwu?wv8Mc9hNpv@<> zgZcas_zwL6<*1ZgDOBfOlDi~-f;D&-uco}3@^{kTNw1~7mS(0}m9r{mb=K;ve{%lG zxhngrY-iFvKHuvsaORwiM3s`yk>bKsiyBciqOQak zEQA^SFSzGvivgGcd-ylVhqIKcFcyok4S&Ndem(|bCam#&U?m(|Cs-$V6~^KjY{Oy1 z$Hm9Bg_(Q?Ud3MIqGo)}_$x6Q3$Yo0fd6L_TH{7cgW23VKZB}?RYUW{k%=QivzGS~ z-%I=z6=;&wB&j>5VjjN2VVuCE*p4GeC`%|iA2(wLUWISTT+}G9QQif2 z!dc1tI0!R$3tWf$u?)L#0_hRy5f@u z%qm|a3sr+vgO|b`r}Odk_yI+z8&@~38^*w1?tJ9{%;ind8x!#yw!@uJTtZwz8{B{? zScY9Vj?~1|#P%438CZj_k%h`hm6KZHUi8DySb-lgH+gPyTvA-p%G8yq4PzU|?#bDc z6ORpNH=K1(zWVIyP@lG*U%}h($620xm;QJVtML`wl~>KH8k&9FmUmm;T)Yiyx&&tG z9&it{7+ditSO*uh#toPP=OCZq1kwxB3p?T#Jc8G-4-Qmn7S$~3g47Q1)8A`d|N(; z5AheQ@0Pd@_u>V7gd>QLijQi88*o3|V>&1N2i~HbhZ`{k&QdGMo8TJUiRZBvN00++c?z7TH%xArd^+)T;#J94C0B)i zUmwdlmUV0Ht+_r9UW6Iix^9)*DmMYwVGQPB1Ac+ct3h6aysP0((LDV=%pMi6Pxpj1 zy$G9d5R3r|8si$=gT>g4-(i@vSNFnrEXEf6j>w|Oq9*8td$1V38-It3>n6Ac*7Y;k zgoE(G)(Aae7IB{a0e*vp*r2pQX?NU(r?CP1QG&WJc?xqm6%4>yc zdt~{@@;P`D-y#=g?oJqnN3a&VaRwO?84(>Y2-C3=W|QMc4kQQK;zm4x7x57e!}>OV z_ksJJ#n_Aka7W)DszFqDjK+MtgCAfIuMu4%bdTaJq7geLGhBC^as6kN=Vi|VgFuX@;f*vrZ%)?vw7CERK zQ#qystnsNZt89n+%|L8`zu_CkcEjzMgV(Ve&d5`Psi9upFW4_Q8SXnb;a3!+R$Q&P z%P|V^ zseO`nT?>*HBt4M$K%(!j+Bvmz`sVe`^NqMHcUkUEya3;Y=8krG?Ls|zOx~Ehc`$c; zhqI`XUnRdI2H`<0!%iGVbU}1M6F95B3(h~x)XuBVqDoO!L+i?i)CF|o#*tgx^yoxVy9NxUPL~o44(|8Bp!K27Z5tSm^!(IG+ zcn+KK8=MQ)3e*Z*25+jSV>zsE^GPH>&cC~16ugghhVljeg&CynQ+cQ*b3eug{FYO&Q~FM^reys{Kq@EaIU zg?2%mf}MhcF%8aGKEy$kqIO*EP@Q{g`w(8nb{s-E>crQHzZ^p`9m}u-hft0>33U=W z!+of={uUM>Eio-|OTw0fR*9`b*=0t;jD&lW?@c})c|3Cc+4X0g-+8xmSMFW8-i&`fRAW*iDv21cmnRp_uv#IG7y*Q|7P|;Mph;4Aj=WwoeaqZ&EFcj0V93SBiSRnRmZ=u|) zKa7ZtjnEAv@hH|{7mk263>Sh8Bf7$w;3M#s>JuCWhIT$?ac^gzfi>=2JR4~-X))*FTHKBK zcoVzvA85B+V>OHIfjjURUcoN>jmTgmiKTvMuRkm}EI1uzbL;#7?B~_vs>gMNcP!4$ zy(`~IA=K)e=L4n z(YT_1XZxLPk>4VJckb@o#d(YK7GXA=NqbM7l%JGe3zy>-JcO6=A3(bQ z1^z({i-|_)h7p(r>v|{tfEl}XY3*2fdDL6Oz8fNccAjnpy zNuV1>;9=Omcfk1|PmDljWM*VX+=NM31T)GvaE_7?l@Qe&SHpX&N3aqf!JTFaGNUs? zx3m4D`-f_LQS_qdci`O68!VoAF-_s@a0J}rFNb->8F>+^##W7OkA4`Br|<^cdHVj0 z3C1ujZxE{Up~0b{e!eugG?ZI@4F2e6EWxz6w7AxAKjiHEF?e78G3@E3$c)d7?}!`W zd(>L@n~I;|yR<_>hXn7rZcDf=;STJM-yMHb(oIQE1)d6AoqKhzyYL*`j?Vd=^W7m{ zmVa63mbyRp9y753=IHN{1$QpaJe*IDhO@j^u?yZ<2MPm)b#WQoD^9_4_y9j52b^?q z!Plm!H^yKNUd1jPhPkN@E`>Xp2e1Si@jbHO-D*qtZoC7|`c}ibcCYROu|{c)(u;5t zCc*vsTiApDz}Ua6F|NdLOow@73x0-===AdR(5+PO^4{fR@Hp(-pWsiFp+-fGii=?8 zo&@J5&bob5{)?E1n1}}Gj9V}jW|Q~fT<{E%0!dtZHxJDQ!}V?c-iBY0hm6RK$n($} zqhUsI4!#q=qZrkqs)g5T8>3HqX zEmr@S{xOrV0QT~);M+5j2X9?;f|+G97Ggb|CH{k`U{tU!%q=&=e7+FAL%)LamdLnB zE^q6^b;1Bl!qa#YU&6VI`K5k*{rHv`fkAj0Ti}j#WWvaVy76`6>m}Ap^v_CaQEHKQ zO}QNEt;<`NH!Xi!{&0Bfu>mXKZJytCB@`rtacVOC=&%pd+#Ev_2M)qRWm7LSF!`c-@aGe{|_msBsg z5YGAT#*2H1kBsk_96I}gR>IflYMa)9*4PPCk~%0g<&~B(En}|6ZSbykDK^5L{t3kL(*TztT<1^6J{@|4eir*#>|ZEFwP3a2 z1#r(l8joT*yf6O=SxAgab*Fb&{b z<+h01B1&>ga_z}x=K+W-h$~o`zcN3qAdOey|9=GWqqDE1T(CowPVIHziufaz+fCBJYTyYzC?=%WC@e(%U2b@L%$HR?b zw)Xq52k;Eu#@9Fs4>W4QTPW+=x1+ayYp@dskdO4T^s?6Qeq;pf*-Nnz-{J%ue$~gN z@D6Yy=EFIOnZ(+5*j~A!a>aSL2BR<&FX99EraXz*h*-X=tRK389l-ZF6X8C7EzI7( zqYxQ^j6iEx-?!l*JdgLV7yrUHW^I^J-1CgX<5&fA_x(o8Q_7ONo+>GyW64rS=T!I^M59VSuwqrlC z;q1IIu7Ev#BIe;$?8I-#MM_*sTr;@)ABxfNO=@rVJ5awN@^;bPf4{hXaU&8&BsjA) zAFR$>ooBt8KfGCT9_=?T=I60k3BT#Go{z$R1DxSqi0g0{W@821k^h7&c-PbzSHL&o zWSFO4gW2N{{Hau2skk+I;5Iyj=kPA}z+CNnu_o-*eK8u3Vi`8$dw2uoM#*$v-?)7KGI^P8Q`EfW;tO56*z2VKRJJ9Fw4!(pv z-I+_JV5MLyI77b$_u*-*g|%*0&x7B9Hb7^z$5J?3KZv>To1(OYw1laAtGzRCXWknH zZxjrL-vxXDXC3as{bzTF!NOo+CamYaxD#fM7vU|_H#i3W2X2pUk3P5qGqDsKum{em zD^R_-dhz-2oj4NKw3+&C_>JRXxFq+MuQj@3IHq6`-hdh8clfaNPNW(9PRtp$`Pv-v z3ao2)G+A(A&;XrqBgSDimSGd@*?t2YSsuxzy+(OEn6;geJcK298_odD+tzk^MS5uW z-nF7@#b8Xve7u4k_!;hUf_yVv5ANc9SB}OkynqexTZSVjg|lz_w|B8aaUXmqc|Yh3 z#T%PC_GVUE*Vxhtk9jf8RJO7 zk%IWb_|S~wJZ?>g!g_uTFTr}=i=!}eR4u9+dK+F{bal}%+z)&7I+&$@K^EeR4QQy1=q`oLMsR4l|=?7&Yjqx%-k#ChnBA(#a7%L;75UL1jaJ)Lid zyvgkX^Sbw3v+xki>fQu+oBLMqt>C}Nj?0c)TfVm3J^38IYe_~`Ooulf{+!FZ=3v{aV5;t`(XBP2VsNl{UrYxDoEsXJIMc!RPoL?q^uhmeq%K-4~HT7EB{#42pYJ{*PLPMS%Y;R-k_8H-tX9&h6__@;E1 z6BiK|Q3n^I7tAIPz`5WWY{hpt2J5?0pi*dlaz)^ZK!12&H4A3&x3CMp!5&VzMApIu z=mFoFlko&r-~(9W_VGe+{vXu{m*6_wj%ip3XDi!bFaH1(u_vgb{f;aIA z_Tvm+&q=hc^H@u(vl4 zHs^I(EjSR@{*V2^{lUY0M`sSdKl=XYcy6P26znMAl()#f{RiyN?!mpqv!0zr*F;Bn z=W#3S&+}nDZ^5_t2ku*Z8#cq`aF^(O+V`Qk<4t^mU*H=tx+J=!2HL{xF&GnIO}~r{ z_zKRfdH#m>jP*+Eh2|i=OM92ziu*Ai?qxRP8ytcE&7|^;ud}{OV86Dmr(q$y_xljv z;TRmCWRz!=H-$aBAMS*C4Egn{JT@2Q{Xy`!Za+vE7*#CI0AEcN@PlCpXpn( zH*Up!coNpQecY__2hM^B8&w+@!1=hDd_252d;xFcQ~ZKc2t)_i233u23A4GgMEkjK zP-o_Au?_C{ohcR}IVL%jT{?1G-V5HBPsUul4D-w9u-4BYDmE&%I$FUD<1N={OvSTU zjvcVKd!w5f%nUk{850~6bf0uX@P^PGK&A3Z<<6@674<9fUdfy3mPIX#oZIy%>QU4I zgE1D<;q8)d!X5Y#$6@gFU1&XDhJLsM4`Lyl<9Vy+w_Zn41ZUI@aS{69Hh8-?4=Z4w zcK#8rX@~mmV$2^`!+p$n%*G3FcI}ObZ^o1GCc6q+;0oLTbBO&qT-RIq{ZaeyHwux& zQM|Je=YBn5&z=b9+UAjWunWJy?-K$n4y(XhS8KZ;?tnWS_wUXEH)9WcQ|2N*B0i!v z&c{_4h`V9-UV_)L1J<|s#P=nq%7F&xfL<7eNq8L23GLyZ;Ai}YaySonUU&(v#ci<0 z=i+6U$GxHb6{q00Y?WbNaemkrBXB>=<=(8AS)3#Oig2CV&zr&A;y26Y^ZVdC^kuvY zv&%0yfeQE?ToYUj^GmqaACGxF)YspNc`I~}Ylit3tm$G>V^c%3#tZqqT0P+$W*Y8< z`=e*D4#~mf;N`KG$9mf`JZgB9S@}J_-C9+&s>ttc7ZoiEy$5F%%_>>~--Fxn8U8>v zVv1vmGvS=03vPlL+IOM#{0g>UFaAOv_{5E`25N!ugxBd|O@HhO3IDvcYI=BE=!CR5Bm?>OBFx!XUEQlya2>%+NucMOEtWjYqX znalh5623>xFX38m6w@g5%}~#no-u>r{(mN(!7FeE^EG}&Hr$hX^Wx00Ih@0oYrJ`B zh)>`i$$!7EEWEPNTRZc{YM3$JKo0&ybaAx5o~^hcI>H&pEf|kSVBUBQAHodnyU==$ zD~Suu@YHlepQpF zE!Hpi4?NXFxx8*vU4FaU`AiYJM%@In`2%q8=^NA=E%*E1!dpaViZRhK(bZs2zXZ-) zZo%E~J-QIq`bK;Xv-)vRW}%yNccb39bjJ1YZEB8r49{a7Ho)G#3w}3uB<4uy{-sZB zpIG0o{{EpUe&532M*4tGvVFdWw;i@F%gf#Z)MgZT+;_j50;*W z53dX~#D%yTH)9OU*7LC(-eo(({sBi(fH;=AHP8}f>}xR`6YvNY!(F63`%Cs5%%FvWFZg};QBm0l-Vzcxgb>U-UAH56g-4^*op^{5}Oh`F=k?nvvuc? z_BrPt&Y1nfGXUe@zb=Bkc@6wO--+*FZ$1m(gH_N39nk~M?(V{am=9+i?hvi#Z}Atr zt&ZX^v&v`;d$d{lW{igOyeHuI=x<^>d?(tc&%l~?$JhYokFIcT?M>gkuva_dGlOi# zSNIkG!NH8TQ05T(wRPPGX6$<~0}HSM@8Vl@-I-{COK=UG3*Lok@ZLLI-|pu3;2=)IH)b;5H`GRJ*u(vf z=N62EIb}Xx#(G%e_VM3w3Oq#u$&tyS{buXP){&RNymAZ1;URc4ZZ2Ps?Qq6ooqL;Q zKX>nGZfS{5=mqzmV=xu=bl;+{VGEos`W_9}dN4W|>g!GUZodP}Fy3*E!oBd@ip5xi z4REghJq{xqkui}msi+CxsLgOYuD}E=K@BY8ceJbutO|I0cN;#1HN79+O8W-<5#DqZ z!d;=Y>|3xMy5a_mz+^lM^Ya>PgnO1BaRkmfqD!Mg_1vhmQE7X0gLAx*m<)TgS$YjN zVi$gdvkzx_(PhzPm0+Ltj?bF*tvCV`F$;^Z3h&}$I1Bj;S%@f)VC$I1Z)d0%%Gc(Q zzOb&n8<`IG>o4O?e26_b0DHD`?F4SOGvRF8Td5v!zU^BwT-(o9JR92KY^>NAx_kYB zdCA{!9vFxS@Kt4cXrJS)$rZR3Lop5yB3$3TFSp<;cz@yyB_FK**z!~f_3(Cqc7ZF= z59XBdm;rY_*0_EAL+plg!{aDKkR#QqXbgLKSGdb}zT%wR%<>eh^EY8Xch2G)^j{Q! zu}0_}+AykNXx?H^cdj@LcjH0$9u3#}=BUk~zW!6xPfuM8uHJ(Kuvha5aVUdSE3X#X z&9pCXA9^=B>$?^9>u_DaRQ^)vckOH`-xA6qKl3|xoN4#X9_V>x~o%$qJ!CCt^u-BVs{)2m_?_$1-ImPc8c)a-W(CJ-UX5@q?9Xu zsEgL<1m}DMFbb0}6Hg&r*Y0UP$B#ISGcac-@(Ty-*-c>{xe|WwJ`~;pIwx^AX>G5< zJJ^BUa9(l@xrmI2^jCp}W`gc3ott#Wjc~7X53FzVxAT)%umL;a4)Xwx!yZoCV-lXu zSM+s5`^<|27juzv_5arRJ%M{dS;ai=o736&d-w?E6?^$Hcu(uwGZo%swSaZ*_doV? zZ&${`H=47S#aM~AU{C)NKf{?z7Rq3)SA)AE-=vqLHwMCYsd;@S=EL6Z?r0;tclid^ zyICd=kva*#EfLWX(cTli$$rHQaVeH!Ar@g1 z*27(jbGk#YFBgF`#!xNS=U(YNTnhK#17L6VJ?Mm26yL)Bd;*2Ap3NNf z&<4H*yxFryn>)tiAv^(RAFtp&e1yID4c2rn9QLNbT-_WU&=uFg8z|>|-a*aAA}ohF z#C~mEyQldR&a?fCELaf?|NyPy0JU%}sDau~iT z-NW0vtD*tU!=>m6zeDq0)A}}_%)zr*g}1Q{U*ad&!%u^#7@DP2W?x?qX7Nj4AHM<4 z#ocZC{jqZue}}{}yn#({&-pFPNLl2RMUqrfz0;-Z&Z7yEDh*R}_?_s@5jRI9G3WRK_TrT=Bb%A?;rq|Wj5E6GXpVO14EKc2pKph? zJOlIaJYK^cX1BVCo#}=Ao^yNWsFG17H*qWa zP02SU)^9b`gZ;~GxR-}hHyPE<6iG|d;s5v_Goj*5%@+dL6BLsyVg2r0e6gD;62~X7zuOr zG&}}-wQt7Pun`}@{fznA9AdvNf=h-p)I<|p0CToI`$i0ddBk_*!G)L?BSo|J2*@6t?9S) z*0{gp-kD(?n8(}0`;=>N6TG9n3-{q+%!8RFT<2!GeoT@lg@f^P&(z@*lXBocttY_zP{-af%$KlR< zD?Wo6!_52-+^P8EJ2hO(z6G6cn4Np#Mht`VXlHjb@g$bO3~hhj1ZUIM^Dl7k;%$?= za(lG7BNL6#1{cHIYv&(>5U%N|WOE<53i)(Lp*7!IU zB3$q0cKiD$aPDY!_nrD5a^ala9`8M4xaQliKlSFz9N!PlBS&F0Zh>`u0n97j0GkiY z9rj%3&FkUr#JSvNn3cbRvy9(hzHpCX&v!qVjB4-=*a{tBU+x8S^Ke+plQA80Vb*vV z&ZEuG-Z6a+cZg3!Cu? z_P}0k2Kf)pL;Q)Wh~v^PBeZ|CU$@02=!QNRfLmeDz85p#PSRVcm+&gyftkeG-i!VC z3+58vl-^L;yWQuQO&Y`O?c4I)`X0t^el#Y*3~okw8cVSn?t08AzBRvsHEtjGF69h3 z;SBA5oU2rY?@oL91-KMf!OUWvJ4dviPlmb0+m(fQ0c&7(amT+C?)k&Dew4dg_x;Wn z-4!Lmov829CTI(D%$4w#%X;@_(JV6o_V-8NJjOh;9L{9k#a5VU_QIO~1I{7O!1+ud zDiD>7sxaSNgi3Ii8lJlqF4xEIw?2P#o{PEpq9ao2Uq%C2-uqT_B zug73`e`jWX01v~yyco-{4$h&sVHdu^emIXdKl>*1C$>B`G?%tNH$*E~&sU%aoaGIM zS=u?ZZ^VaTp7xHw1Y4gWV@J8eqyc6-w=x!znRZ$ns;QsO4y6#`mKa@r8 zthh6jvwcH8iuo{Wdrz_s?_wLmwe9x`f51IXHvBHf-kpRhr~|WiTZHSo7dNraPj12O z@QrCkc^LNaXYdltDR03V_a?*?=#IS&c{uRCA#Hqi|8Cw!OYz}_Ae85Nm?aJ@TMZ-WlF0^aAE z-F>GzV;=+Gs?!jzd1o`u+s!rhd1sM3;Jejc|2wRGYu;UxJ>MD4PQII-8#On|T;=@O zeti*l&t{CKWlckMT$kT5W-qpmee-pO{n-7<5QOX4`JDN}p6o8=1+0b{<9+PF7qBmz zGs3lemfxT112d*PCe)j&mRAkU?tBxrg?Zyj^ui4of^a?G#|_8~cn4ySUW!$C9e!8v zA-v_=3;T4qrk(HkUJUSHiif?r1{%U!C}(}(>7<@vlqcU;ydyU zY=Co;aBVv)anAh@%q6}l{Ru_{Lo-3MiQnin$N31?x9`h-7>p4xqlA0-qkLaH4~y|K ztnu~mdwR2qdEB|-&p3o|FE8L1fmI+F2!`ssTA*5}pEu)o7Pf_N(9Y-qZ*1-9W^{M_ z;aZ=`?^T(D1$Z7SunzCQyl!td$M`l4*ZaS`Pt7v+cSfOp@*bIn>Zk{2GUj(PjWvHY z%tP+cM=@X6lYfRYjelUqD1eVD-+|6H%o*+s!?k=- z`9-0uVQ;<;z6pn8G`#zm0{in^c(Z3cuY~VI_vQBJkMR}0!>{-Y$6=rLtr)Ip=OE6m z>%m@a266A$8NM6M*X|#O!@9l)_romWOxv7o&t3-ei0??hzu6Aol4cTX+wT>Q;3Ui? zC9roVq7rJr?Csk!T;E+Hxbcl)U~y4mopYR$VhHN!ibG1vHJZ3(}@@ZD;bx7Sr-#&iw3dd@){vGrTwO z9()^G&(89EAMS@e`X8KvdAby45BKNx>2quPJicA;fXiX8?u{GZH<7ntG{XJbx_%61 z5wqM&a6a-n%p=}#e}pgKTQXeRz9;{Kxx_c6H&piS6qrqF!F#H3efzDY^FjAJePBkh zhdW0xhmXho2-moM+^phEWhLBgIvY2yY{xF_M!3%Z;CJBL&riYJ;=G*5%%mkQ)YHxA zwc(wXweG#Gecic>GjubIbM!$luiM+tt@lR)kA(g+t?cj4V!Q<~&p2Oqk7SSk2xgi+ z_yO*e%r)+nyoJd{3C!~Ldh5OlYN0;dHHF`>ogzDhZe`r9n(@u^-p=^1*1Ubod9$~3 zW(xOy)~` z?tfVgB&F*bCRgUOf!XL;P-R65Kz|g#9{P*JhEGFlXDd--lWI6L>G>-u>L#_IsQx z`cfJni zhv7Q^G~&}xKmV5B#c6Kw4Qf7j?`co>#@2aDxYqq%!dn*SE@t(na98Av(cW&3vEF;b z8<&BwzmI}%RBr*C$2TvjPX2{!P$nn*_`3cskQtmzJ|To{Cp69!@OaJ z&VzG2Z$QHJT$#f&ou4@W?gTT+ z)v$+~!_6r}5w3Cj_`R40-<*%byyE`H9sV+yS)3u-&&}q}%6Gzi?(O0C*birl*1GxS zH03QwnukGPxwxB7c&s{ z>2OV(tDW&V3$a(5L7v1yn6J$t_Up9>*R{8;z9H?|<`J{D-zfY7-;!n$YukOoS(r=8 zVefV(Xf`o>pIhI4YuN_wFU=^I!y7Ae__eqJ;Tre7c_+rfH>YzId-*KPLAcJt{oH;2 zS~yF57n|@QK8Ce!ehK&W1KhHh)!l{u2YdUu_3nL3JnZl8j-17qXBxmBZ_S%&{7%lf zjD6l2q&p?&kj`h!Huie!el)z_oe2BAncjKLV+hy2vv{+;^LVq4zw^TPteMBGvjNt> zb?-e*J>IOoz3s);v2QtN$z}($gtdDU?7`mBjes{A=HkgPPt3rh@U8b0%*WQSz1WOw zu5i}u9K(6@4%m;)%FZ*wb^Lqz@1b3xvpV@zbF(=k7S^(R7HhdCd=oZC3z(su zci5lJ(dX8)S=t_b3(V8L6U`nIV4n`xw0jx%>Ao55)l0Dq=4*4vdf2bSb^S5_xxwz* z?b+s$AK~ui5YDab9Cnn>OMFw>yJKKBNrgMhOqfp^!1-V+_{QvjOJEK+r+AAJ?&D^a zA#m?A3g#7Ohm&z`ojWJ@-q76Q8`OEZJ>BebZmrwbeUCa@G{ZPww6~kr%`wgy&Fn{D zfA{ZvZvedIGP~R3t$FjiZ`E|z=WC!Ye6u>AG24Xe-h5-85BGaB&h@bN!#&@flQT-Q zjrZFyqTP&SIE<8?zhdy&M(3>?3?cZ{)D?h_b8`fR(3{rZXNpuOobVvI=u5}0Cz0T?ar-b zd-Ij(4)ccdj&Oet*R%H^?qJLvlVP5I2xgCPpAOgb^X$`KhP~Ph;=A!}IPWuu*spiO z*~nM$4QbDIZ{yD0`L=VCaNqVlnFn)8xOe-mbZ%nyw!ZD()^~ll-|>xU55EBBaC1ty z#_i+oG@Ys3gn=-V`|fl;Zk;<{v7ejG%`G$FPT!vHJJedYubE%W>ApvuEt+ARFWTG9 z>(;w-#!p~>{~FF4-5r@{?D5vTnZ{k|3E1b)!r6><&pA6)|NraW-IDpndl>t@vzmJF z4QuV&^PNwc?S0F-ce3w0lQ-{J|ITpCJOg0n@$UdLkN@oZ)>|6qndTYaEY95QyJiOK z*n0KG$bVHh3)_F4yE#iXN4U#Aw|>pVzrlB&dBQ$?0`9oY6yX{U=L+Y|$p~i)vvM7T z>p0w#&CI?7-G`f-?aR*XoNwN{x?9O1EHJaO1M`Kor}i*ig0)_x*7FoAK@aW}YT+57h?V7MOc3gxRMH%>Mo1|GD++H>WvhO=*%8UX-x!5}--+4(ePgH`xAJt4@ z)<3s~{qMp3pf`AC3;VINXJ;DLu|2sj%oy&&z4h=dXwGoP;q1;@4)zfiyJs|en5pg4&Oy$t>2R<9wBplHzBY&0ufuh1&h`yy&o+;^yKx2>u5I6w zW^QwdKRoqA@5*@YV7)g9*SGT%=ik0D!#&&_Zceer?c-(@cRtQkI>SuvyVE*1vsmZO z5X~*l5q*Q&)6Fj7S~tH;gzwQQaL*s^?biETnAz>`&Kj4%d1JWd!+1_riFi(Vgt-aS?dj!_(xqa97oPW7GpYTl=u3a;Pvt;wI^JH^` zdB+)?GYfmLa|`R&Y#i>x=407ewKxcO5X8W=; zj+qG8a=14y;CE*~1K)<>{_NbtdNy~2d$ji=0OxLL(K-X8XH zGx@o7Za+7hn_K$g+*-%&j%roJdH@}Dbyt&5r zs&(%^X*qnins4m)=hl9>=WpgeJH?reS;xL_{hN2fy?-CyN1OA*{og+W&MnP8{vBZE zH~;wOzzk&W56?3FbC3gPJN`Xkz5D0MS%Pym>(cDtjM(>^J=cC~-I{&FbsO%xzUSQY znS;Z6 zwl}W!Z1<99;9JtX9jbA03a=fHQa ze-3=>I@>V^`Dej-rZw!J1OHt3cY*)>6P(-ohPNO8zjp5MMy{-iqHql4Lu^R=A_)Ev z1ep*3ghGEBZOzfstM*_7(n!ls@~bL)EPM4j`|f+IdN?X)ovF!K-a1ped8;%0@#|XV z>J9T&cW~b3eG&b^`}=d(-fr&d5jwH6WnDrB^VeR_d)>?7KYe{afR605N_vGXc1EXL z$YY=J(3j`&I)=TV&!H}txvXn&*?ET!?aagH_?FLnUPgOA#`lWp)XQm3JHytk?Hiqm z{OjvlUh`Vd=C#cB-i$dO7vGB=mXM+58E-1hCZ|8%5__}2H)A4l`eO#9F+`g0N z^4xnsdW&;%nXbFohc4IkbZ0KtcRgnL&Uv4^o%7CObQ(FoUNi4~=EWJLynnhc^Yt9> zqso2$d#_3M+s~Q-oyTV#^?Wm+>stey<=i>2&((pf1$P#7A$x%JAv0l3@V(Xc1ZKeR z;kbF@n(n|!`!@M{djeI?Fgv+E4@aWdDRovULP!4V*R?F>ux=rb*O#3`UyuL(_5J92hFs>dJ)y2Km+cLmQ|lbpXBqvE zuS@rk)0~#m*J)X;U+W>u>v=7+^%3t)>f1WW+?FMJw|(XETmN=`qNB+0r{lVc&&oPe z(N}bGp38IJcdWO(xvsyw`R?px`F@?(-E|r{f4!IWdc3n4dH-}@&(Z7WzcU+sNA}y# z>iF_s&$qAD^`CR_=dbsobRcWNodtg0dGJ1!PGlym3ueOgx3A0HEI9A9PVimMI8Sp1 zEMNJ`Q9W0_>bY;e>I%zR`!{`ovpR!wwq>sO`t0ZCt#dd1K^I>3>ciZXzs{HSVqIbx z%wPR@ox=H?eV;6TI;>wjJzmd{%l3p%m-Xo7vpwQ6+8M|{zpmxxw z?e!AbJ-@wYsh{xsX83j7d7(b;%y6FTEb`o*>CJWhMNeP0+mq@s&R#gL%Piw{cb!Jg z&--P)|BsM8tA4|M9Y^M`=jiov-#%9MKW9MC*L$`Gm;?Ps=YP(^)`L3__5nK4or!fL z>w}rFAGSW24Qqv2@OyM2YZ3SO%SZh{A6U2LsY|}<2V7l8n6Gm7`ns%rb9R|KZ}s4L zyX<|syDnj`w>~j{ojZH4P_K~1x-y5C$M%8FH*^e{JdfqFu5n#nKJ(eRp5DP{d&T9n z{&AhwujPZhp4T#4*LDWD+~&4kBD>d3Zhq@1%WyqqIqp0~AJ-7A0R&%r84Cp-Oz@Bzm1k)fKG$9Mxxa*}Yfib^EiMt@dfl zSN&kF%2>WSSCg~X*Y#fK63bitS8w30%+-Uhw>kuOW$)Zwmskd0e|^Sdy+Rhx;q?o9 zLA{yBH<#zK^Srq%pY@LGvok*ZqGQkNWwtXwon&s?Q?8rn-t&7IKF62i9M{KX zInQ;L>$-j}*ZD5jukU({e80{+gITBHySpMrgn**O2(DkhY zn+0ouJ?@{4CSQ-u z`m%X0U!Qf4<@B4=%WGbLa(mr`-#>C(A9pR!pRRxMea^4X%==~ib^nw9di|Y&w>fyu zg7x4z4;;HQ@tli08_)T8&dAn{tsQ1%=R;=4jCj8HbA3JeY`?V(<>Ss1=H_>P>H{+M z%~9F<=IMIEb@gWL_4Vnj+mj*F4O1w_5C`3GydkhUL)&o-ml}_8Q2`?J1%qZHVf-O)`P7HTNmzJY<<{l+;w7W z#b(4l!J4skDit*?IHxX6SPCx~U7y zPkXfad3(Vey`I{?%~QQsS8y$B=c^vP%$>73#M4`QJ{i0m)+yF2^kx2DhjnKT&*Sxt z>$2W)eb%jSR%^Ur&B;2Gbz^JC=EXkQ^_-hKJDVSCi_7e|n;mz1 z43B+{xyrRS57$wjE^fV_kJrhkm!I5x^K*`V=jmKsXSlvTon4RM?VGz#f9(fd9KIee zo3G339(;at`g%RLm)%dtujkkGWjf!l^Vj=N?qC1!4BR=`8ekUgJeY|)7oTRseB2qi zb7EHRyqK9!b7OYy{FtHV9Nk&kJne3-Hd|gZEB?)Mk885g{h5vO@n+3IdbozSD?fsbFyZ_Qu ze*Kx_&x`B#n)CO*%)fX3Kd-F=_r5jZ-Z}DinUUvZR^G17&hx$*db^vaw`*(9+ufXb z-Hf^WI&+av-?{em?UQ#;_ul+_I>^H}7oR@yl!ys^YVFLZ+PC9xzGEYectEp z+nvL2Kj!kM``muJ|7!aCqo@1N=XVZ1J-&1C-QzneKYIL}qwk*I+4`-I@9e!j_UD*8 z)aDgy=F{%ir~CLi_4fGb*W2@_Yj4k=-hF!h^zhU3H!r_??akL8z4poD-}3sK<3ID- z`!xLbuRiDJ|NZ>ajNaG%ojiBd??{2O9&MfU&z literal 0 HcmV?d00001 diff --git a/tetris.c b/tetris.c index 9c1647d..06bad9b 100644 --- a/tetris.c +++ b/tetris.c @@ -86,6 +86,7 @@ static bool pieceActive = false; static bool detection = false; static bool lineToDelete = false; static bool storageInUse = false; +static bool audioMuted = false; // Statistics static int level = 1; @@ -102,6 +103,9 @@ static int fadeLineCounter = 0; // Based on level static int gravitySpeed = 30; +// Sound +static Sound beep; + //------------------------------------------------------------------------------------ // Module Functions Declaration (local) //------------------------------------------------------------------------------------ @@ -120,7 +124,6 @@ static bool ResolveTurnMovement(); static void CheckDetection(bool *detection); static void CheckCompletion(bool *lineToDelete); static int DeleteCompleteLines(); - //------------------------------------------------------------------------------------ // Program main entry point //------------------------------------------------------------------------------------ @@ -129,6 +132,7 @@ int main(void) // Initialization (Note windowTitle is unused on Android) //--------------------------------------------------------- InitWindow(screenWidth, screenHeight, "just plain tetris"); + InitAudioDevice(); InitGame(); @@ -152,6 +156,7 @@ int main(void) UnloadGame(); // Unload loaded data (textures, sounds, models...) CloseWindow(); // Close window and OpenGL context + CloseAudioDevice(); //-------------------------------------------------------------------------------------- return 0; @@ -193,6 +198,9 @@ void InitGame(void) fadeLineCounter = 0; gravitySpeed = 30; + // beep + beep = LoadSound("beep.wav"); + // Initialize grid matrices for (int i = 0; i < GRID_HORIZONTAL_SIZE; i++) { @@ -226,6 +234,21 @@ void UpdateGame(void) { if (IsKeyPressed('P')) pause = !pause; + // Mute audio toggle + if (IsKeyPressed('M')) + { + if (!audioMuted) + { + PauseSound(beep); + audioMuted = true; + } + else + { + ResumeSound(beep); + audioMuted = false; + } + } + if (!pause) { if (!lineToDelete) @@ -249,11 +272,11 @@ void UpdateGame(void) turnMovementCounter++; // We make sure to move if we've pressed the key this frame - if (IsKeyPressed(KEY_A) || IsKeyPressed(KEY_D)) lateralMovementCounter = LATERAL_SPEED; - if (IsKeyPressed(KEY_W)) turnMovementCounter = TURNING_SPEED; + if (IsKeyPressed(KEY_LEFT) || IsKeyPressed(KEY_RIGHT)) lateralMovementCounter = LATERAL_SPEED; + if (IsKeyPressed(KEY_R)) turnMovementCounter = TURNING_SPEED; // Fall down - if ((IsKeyDown(KEY_S) || IsKeyDown(KEY_SPACE)) && (fastFallMovementCounter >= FAST_FALL_AWAIT_COUNTER)) + if ((IsKeyDown(KEY_S) || IsKeyDown(KEY_DOWN)) && (fastFallMovementCounter >= FAST_FALL_AWAIT_COUNTER)) { // We make sure the piece is going to fall this frame gravityMovementCounter += gravitySpeed; @@ -326,14 +349,27 @@ void UpdateGame(void) storage[i][j] = tempPiece[i][j]; } } - piecePositionX = (int)((GRID_HORIZONTAL_SIZE - 4)/2); - piecePositionY = 0; + + int oldPiecePositionX = piecePositionX; + int oldPiecePositionY = piecePositionY; + + piecePositionX = oldPiecePositionX; + piecePositionY = oldPiecePositionY; + + for (int i = oldPiecePositionX; i < oldPiecePositionX + 4; i++){ + for (int j = oldPiecePositionY; j < oldPiecePositionY + 4; j++){ + if (grid[i][j].status == MOVING){ + grid[i][j].status = EMPTY; // Derender the old piece + } + } + } + for (int i = piecePositionX; i < piecePositionX + 4; i++){ - for (int j = 0; j < 4; j++){ - if (piece[i - (int)piecePositionX][j].status == MOVING){ + for (int j = piecePositionY; j < piecePositionY + 4; j++){ + if (piece[i - oldPiecePositionX][j - oldPiecePositionY].status == MOVING){ grid[i][j].status = MOVING; } - grid[i][j].color = piece[i - (int)piecePositionX][j].color; + grid[i][j].color = piece[i - oldPiecePositionX][j - oldPiecePositionY].color; } } } @@ -522,6 +558,7 @@ void DrawGame(void) void UnloadGame(void) { // TODO: Unload all dynamic loaded data (textures, sounds, models...) + UnloadSound(beep); } // Update and Draw (one frame) @@ -696,7 +733,7 @@ static bool ResolveLateralMovement() bool collision = false; // Piece movement - if (IsKeyDown(KEY_A) || IsGamepadButtonPressed(0, GAMEPAD_BUTTON_LEFT_FACE_LEFT)) // Move left + if (IsKeyDown(KEY_LEFT) || IsGamepadButtonPressed(0, GAMEPAD_BUTTON_LEFT_FACE_LEFT)) // Move left { // Check if is possible to move to left for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) @@ -731,7 +768,7 @@ static bool ResolveLateralMovement() piecePositionX--; } } - else if (IsKeyDown(KEY_D) || IsGamepadButtonPressed(0, GAMEPAD_BUTTON_LEFT_FACE_RIGHT)) // Move right + else if (IsKeyDown(KEY_RIGHT) || IsGamepadButtonPressed(0, GAMEPAD_BUTTON_LEFT_FACE_RIGHT)) // Move right { // Check if is possible to move to right for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) @@ -778,8 +815,11 @@ static bool ResolveLateralMovement() static bool ResolveTurnMovement() { // Input for turning the piece - if (IsKeyDown(KEY_W) || IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_LEFT)) + if (IsKeyDown(KEY_R) || IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_LEFT)) { + // play beep.wav + if (!audioMuted) PlaySound(beep); + Cell aux; bool checker = false; -- 2.45.2 From 50eca8c985db7d37a05bae4a45db267e64142de2 Mon Sep 17 00:00:00 2001 From: electron271 <66094410+electron271@users.noreply.github.com> Date: Tue, 20 Feb 2024 10:46:09 -0600 Subject: [PATCH 2/2] possible fix --- tetris.c | 58 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/tetris.c b/tetris.c index 06bad9b..10441e3 100644 --- a/tetris.c +++ b/tetris.c @@ -340,36 +340,52 @@ void UpdateGame(void) pieceActive = false; storageInUse = true; } else { - // Swap current piece with stored piece + // Check if the stored piece can fit in the old piece's position + bool canFit = true; for (int i = 0; i < 4; i++){ for (int j = 0; j < 4; j++){ - if (piece[i][j].status == MOVING) grid[piecePositionX+i][piecePositionY+j].status = EMPTY; - tempPiece[i][j] = piece[i][j]; - piece[i][j] = storage[i][j]; - storage[i][j] = tempPiece[i][j]; + if (piecePositionX + i >= GRID_HORIZONTAL_SIZE || piecePositionY + j >= GRID_VERTICAL_SIZE || grid[piecePositionX + i][piecePositionY + j].status == FULL){ + canFit = false; + break; + } + } + if (!canFit){ + break; } } - int oldPiecePositionX = piecePositionX; - int oldPiecePositionY = piecePositionY; - - piecePositionX = oldPiecePositionX; - piecePositionY = oldPiecePositionY; - - for (int i = oldPiecePositionX; i < oldPiecePositionX + 4; i++){ - for (int j = oldPiecePositionY; j < oldPiecePositionY + 4; j++){ - if (grid[i][j].status == MOVING){ - grid[i][j].status = EMPTY; // Derender the old piece + if (canFit){ + // Swap current piece with stored piece + for (int i = 0; i < 4; i++){ + for (int j = 0; j < 4; j++){ + if (piece[i][j].status == MOVING) grid[piecePositionX+i][piecePositionY+j].status = EMPTY; + tempPiece[i][j] = piece[i][j]; + piece[i][j] = storage[i][j]; + storage[i][j] = tempPiece[i][j]; } } - } - for (int i = piecePositionX; i < piecePositionX + 4; i++){ - for (int j = piecePositionY; j < piecePositionY + 4; j++){ - if (piece[i - oldPiecePositionX][j - oldPiecePositionY].status == MOVING){ - grid[i][j].status = MOVING; + int oldPiecePositionX = piecePositionX; + int oldPiecePositionY = piecePositionY; + + piecePositionX = oldPiecePositionX; + piecePositionY = oldPiecePositionY; + + for (int i = oldPiecePositionX; i < oldPiecePositionX + 4; i++){ + for (int j = oldPiecePositionY; j < oldPiecePositionY + 4; j++){ + if (grid[i][j].status == MOVING){ + grid[i][j].status = EMPTY; // Derender the old piece + } + } + } + + for (int i = piecePositionX; i < piecePositionX + 4; i++){ + for (int j = piecePositionY; j < piecePositionY + 4; j++){ + if (piece[i - oldPiecePositionX][j - oldPiecePositionY].status == MOVING){ + grid[i][j].status = MOVING; + } + grid[i][j].color = piece[i - oldPiecePositionX][j - oldPiecePositionY].color; } - grid[i][j].color = piece[i - oldPiecePositionX][j - oldPiecePositionY].color; } } } -- 2.45.2