From c56b8f8d1913d9f2c541eb2e16b7d2c8a9bd87a9 Mon Sep 17 00:00:00 2001 From: Seth Date: Fri, 11 Oct 2024 23:12:21 +1300 Subject: [PATCH] fixed issue where the game whould break when the ball was hitting a block while it was against the wall --- bin/Debug/cTest | Bin 23952 -> 24136 bytes cTest.depend | 2 +- main.c | 28 ++++++++++++++++++---------- obj/Debug/main.o | Bin 11768 -> 10576 bytes 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/bin/Debug/cTest b/bin/Debug/cTest index 323b8a3d900c02fbb4c265cca2ea4bea368330d5..73346c85b012266d6cb25f9258474dc41efe92b6 100755 GIT binary patch delta 4205 zcmb7G4Nz3q6@K@ZHclWCp5Jf09fzqTBDh_s~Ug(%zZ( z&OPUR-?`_WbMM=2JkGj4V2z{2`bAA+FPd5`f;w8bow-dpOw)4sZ02EyL$%DtOof_F zDCGOZYl&sSJuS@_k6fLY|NiOKH$Q4Sxa5dG)GWE<*y_-S@iUk&xV6vLTGUt9UKM+c z!d*!uwb0zJ%Eu^P>8Zs^@C&8(>H%O@DGi2^qhVEoMYnR>!-2Q&MIu5tutyU=(Zo+l zv=O=I&fQ2v2?qAUqBN)?*xB_?Q+7_Bi`)evm9=tTEm{>ef&*_+ox7C z9H2t7aDWQQ+74`ILQid9B%=1Cr$()wUcAjfsKwi*7Oz@YuWV`v(3~nokngM%C2wmL z>~-yxxjMDHt0A!Y9zTo_0dLqKN}Yikuqgd26(GH!k+M~5G<97Rce~C7K3m0iH>h~T zAAGUJI>E2O{3mElwyn|Dsumtu+FJL}`L(s4Lz(#5q!i!1vHE^lXP~Y>#dKu8$V^AS zQ)@*1x71nkWB(*9+dgRnKK&NKq4ZBY)WGb;Xn)q8HzC9Q*_ske|*I2Po zs!GO+Pel{UK)f>hk>z}K4_IPVB3S=1M&+3dmS5c%YDD|P8To*=xl{hLhU@v)ErL+7 z03qS9?V=ua1{(23rot5}eM5BEHkCtuA4nwc*FFH3-dh}Ii$29y&4wx6t8YH8S0z+x zyAGmhp+g1Hts@Xgoo;LG*4ef{w6l{sl}#A}4CJ zGf%`C+G=E1bIVF~&5eu7%@%kU-G!I7<-gAA+HG}oG-09Nl>tTHX&ofs?o_Amk&nLi z9md6=82Gih`HddD^6@8tJkeVlEQ0}UFYi*y&(XJy|J`YyoHpuy!KJ~@nYNq$b`9)S z(aDhyk-saE$JO?g(&$JT*uz7|ebB&r)Zd!!dcEX&&(y=jV5JuJuEm}D(w6b9;=gKC z{C_l_3U$OTG5pw-nNNQ?V((CjzIQ8c0(rJj6|;U1+J{r z93W6OL6{XAPa+df9-eyM1n;G5kq9pQ{V^1?N<1C>tjjr`G&(4DM8!{&Aj}vNzg?Ue z7gJ%4B~}Wa-{Bbse?{nP*KsTVc>HA69I{V{h^(30b3LMD=10Y3emy59{Q|yo+G5FS zDuN(`Oyf|fHg~z4xz9i*W?X~sb$li^gLVU9b=|Suy})lB#DATM(?LX|*Tg zYhg89z&taqi|mGxn2%KF%B1SLzIOM)~T3L7oW0^6ERYmGI&N0Huw zJzJ0D!+e|;Nw6pYjhA);W0F>SX(cc>03o^KZxM4W<~cg^H<;(@IXp*UCYlK&qMYI+ z37i?Qu}M-VjJ8tDV=l1`2si>YGrdKj6I)<4g_)JiNry@4VsSIbPbCwQKZhxHuB`?0 zC1jvoLdrj~0}g zE>+71bjW!fB5o08C1~Eyt5F13qUQLe?q95hSgd1us%5v1*zq93^T}F-s}$i&-H*9C zHY0)$S*);YpzGB_%;6->m!o5Trma$;uksZjmvzW)RD#Ao39?04r$cU4%Xf6dLLGrM zzON_JhsEWMPK}90%GDVFZ|L-zt%5Kl0wNVOb^_dH^=%STQ&3ZuA47-5q!&y5Gyubz zivUlf7P0(P>XF#AUP$Mpr|=t7vREolEg1S_nz{=4FoxryJMY8>*i1UYFl-2w6mXW2 zEJ#D9SPCppTV^|Oe&a|T!8Cocg`1|jiblgW)Ph`OfiUL0XpD#tlx2WrdMeqh4kit; zSoB!T!C#$v{)w#A*$z8Pi1nttk;)J%O^#ZfSm`0pwC&8%oK9)uyqptQv1q`B>E_+j z-(*fc*E?l=hLl_=TdU;QIr1>vXf{WVtCEd#t{BZ4*OP%s2_WgmrZl?cV>=Yhe91Qml_Pul&xRSoyuP?Qlpw@E(%mz>cAk@6~y@E;A)4Exj t7Ua3hJ?tyKcKLL6hPN!AE~d=o|6V@LwD&m;u!-lEdPMU={z~bn{{oTQ#F+p9 delta 3867 zcmb7Gdr(x@9X{vYy|6D_me+zPE(s{0h$vwZHUgtGmuP*Uu{c7Cf)NwjBt{dpc2~Mt zBgF^w)QqOaG5(R1HZw8Zgr?C1GzqL3Yc?jSHnomTrxj{Dnoef4X)OJI=U$LHNhi58 z+~4c_zVkbed)Vl4-g%67<|(nIT?H3y)ea_~YT@QZHY+zGtElBZel*g?UEEe;WA+4q0s<=#c65 ze#7efJN6MvZ+=&AKdA@#S)HHM+oL+~(|J@saY@m6Oy`4oVJ9@Ic9wl9?WJ~JpcBwK$V11~lUfT;Y){P!ehX;XC?5#dkBphA@7505>0k~RYZ&{S_Jr!tBjX5M z=mmfcK8?yixWQx&J%-PtcN-OcC<{#^1s@6>5~tHbQC@G3>EfOAl+s9n>;dcfWZ$L? zjGZ!e>>3CSeFDkb=(NtIYeuPlE~%$%W7@v{FHnE_<DI4oN&&BQEbo5sLUMXoDVim=_&9yjyEV6g8=NX3v}AygNp|ho4#+^b1p&Hc zS7-x1u#TBYyyQ?l2ol-R9r*1Hd4SR|9h^o7w%GyKZ{OsCtH8Z}ey8?1nnw6f7!!0E zu0L6VF2W_y?+g%4(A5(I{B82y?Bgfl|5|4Ibgen6H=h-~?$qEbxV&(7uy0t2CSXFN z%pZ(le&1y7|5{&FzihMu9BOG6ta0;k=-+85;rxz=XLt3y3pWX_czwJ#=(xR|kC8AY z^1k$RG*jOH8QiH9@1!TYA%S}IpK zggtik$O}DmjblSLft57MvXcifCy9LlrZI`n$V2NfYW)=5j`>Rq& zdx>I%FBsvo($F0Ck!No9PMPh)r)utXS$Oj31XOuwmIFdM3nf&mF&Nknzw~HlO5oAX z)D+%M9!7%5*I_aAKct~1{zBf!I-VO%zXy-ju_>B6rj0BR4xmCxT@tHxnBk9%aEmml z8)0~Cr}m(cZ85UnHM94@4(-BMgk6ao%xtlUSbXbGyg7yRZ(YM5yEZ)B3bP%S{zG=c zE{5Im>G1H+VTWL&Vug1KFB5HE5APHQ;17xuUQg~RU>^a7RgX*Dq0CK)Qyy~0TNz77 zif*P1aPuM)vyVA3YMwY>SjI~t?&-q{FA?rypR(U3URKh?wHa}lM{JCNi6<>l8lyS5 z{zzMKgO;<(Lj7`UEAHCFPY_IG@TTGKfZHHIjr%62SSFyTg*YXT9sy!({nJoC0^rU-nVETLJRi=EqyHy-e!NO3)0|LKt;hHL)3UyhWqsSlf_QKY*W` z5T(4D3xBfoxq2S{l%VrfO3jAeMB;y2Ayg>Mv@@_rkRqP;TIZ` z%z76<)77UXv#E-PL^JDvP-i4^%vmjfUu-g8fFGP`c2kRBmYpyP)>WCMVgl93@e(x# zIoERdahEuqhXR1?KPKsvBgoqNxs%eV&ruNN3HMT+){dq95vlkEu5S2El%*F-pwQ(; ztJapFRNO|j50Uk-^fRFFQjHXCNqFJO!|9=iAH0sXoDTz0<|Gld>wLhOjIca`Dr(oI zfK!KVg`9}mbug0BR$dK2=I2~oDN$|R%w8qQAK`DCN; z3$wn+kXT}3jt8{MCgQ1E3Uz6QLLVvoGQ}v+uM2uM7z!)hj|35^U2g|iTvMtnu^EP8 z`wUF8IZ70eXH3XmYzRH)2(pE(H6f=1TEs*wH4&KUIeB>BHeSg^30M<>ItiQmht(D1&8?{mPy0)vsye?nJ$)Bt>ojy zud2$ePBq2~`YO+vujL%lCLPj>{Mzh8TFD{pp6S{|r65`JY}7JC zTG~dm zPl=1nSWv~eCGzOEeH^v!g&nDGhLh)&-7>7Oe9j8@LQnRev42S{arE+|vqaBT_5k4xq8+^9+=Ni%D uVyMB#?-ALJmHZB|sGJ4vi=K`fK`?N diff --git a/cTest.depend b/cTest.depend index 08b6867..c221826 100644 --- a/cTest.depend +++ b/cTest.depend @@ -7,7 +7,7 @@ -1728637902 source:/home/fluffy/codeBlocks/blockBreaker/main.c +1728641201 source:/home/fluffy/codeBlocks/blockBreaker/main.c diff --git a/main.c b/main.c index d1b994c..b166515 100644 --- a/main.c +++ b/main.c @@ -4,15 +4,12 @@ #include #include #include - -//#include -//#include #define SCREEN_WIDTH 11 #define SCREEN_HEIGHT 20 #define PADDLE_SIZE 1 #define SLEEP_TIME_MS 100 * 1000 #define PADDLE_HEIGHT SCREEN_HEIGHT-4 -#define Y_BLOCK_LAYERS 4 +#define Y_BLOCK_LAYERS 10 #define X_BLOCK_LAYERS SCREEN_WIDTH uint8_t screen[SCREEN_WIDTH][SCREEN_HEIGHT]; @@ -33,12 +30,14 @@ void clearScreen() { printf("\e[1;1H\e[2J");//clear the screen of the prev frame } -struct ballStruct { + + +typedef struct ballStruct { uint8_t xPOS; uint8_t yPOS; int8_t xVEL; int8_t yVEL; -} ball= {.xPOS=0,.yPOS=0,.xVEL=0,.yVEL=0}; +} Ball_t; struct Paddle { uint8_t location; @@ -51,8 +50,14 @@ typedef struct block { bool visable; } Block_t; +bool ballOnXEdge(Ball_t ball){ + if(ball.xPOS==0) return true; + if (ball.xPOS==SCREEN_WIDTH-1) return true; + return false; +} + int main() { - //struct ballStruct ball; + Ball_t ball = {.xPOS=0,.yPOS=0,.xVEL=0,.yVEL=0}; time_t UNIXTIME = time(NULL); srand(UNIXTIME); //seed random number with time at run time Block_t blockArr[X_BLOCK_LAYERS][Y_BLOCK_LAYERS]; @@ -72,7 +77,6 @@ int main() { ball.xVEL=1; ball.yVEL=1; while(true) { - // std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME_MS)); usleep(SLEEP_TIME_MS); clearScreen(); blockFlushHit = false; @@ -140,8 +144,12 @@ int main() { } if (screen[ball.xPOS+ball.xVEL][ball.yPOS+ball.yVEL]==PIXEL_BLOCK&&blockFlushHit==false) { blockArr[ball.xPOS+ball.xVEL][ball.yPOS+ball.yVEL].visable=false; - ball.xVEL = ball.xVEL *-1; - ball.yVEL=ball.yVEL *-1; + if(ballOnXEdge(ball)==false) { + ball.xVEL = ball.xVEL *-1; + } + if (ball.yPOS!=0) { + ball.yVEL=ball.yVEL *-1; + } } //detect when ball hits paddle diff --git a/obj/Debug/main.o b/obj/Debug/main.o index d948e2aa8ab4971ee91d4d70c3beca12cfff276b..d4c7c407930bd157e844bda2177a4613f2a1574d 100644 GIT binary patch literal 10576 zcmb`M30xFM*1&rhkVC?7MS>;@DlVXopu`}c;NakRA>c(&L|_IOi4kKYqQ(dUQR5L*j;~%%6*MKRpSxSXA6@nS_1>$hS6BD2 zK|I$(gU4e?;xW^hUWrhK**>bb?8X+|7&B%Fvq+-4D@kcJtP-~aZ4p(8JJ`a6baA^R zxH?_jAqlRPsA?r;jT#c3I?FWGkz{It8X}bplOpcmr6hLfC0$Apx1&J*Hl1zs>BXKk+@@XsY1IL`r2X&qKh68wO9*(R#&pI^#Ib5O42p0tdXunC2qGb ztyJ#n>h5MLl{xBcw>sMcSqZenHYZUja}klGvze-jg_X)E(5g~KLxxiG4fLo|#u4!> z64TjQRaH8RRh8;olAE3bR+8Y05>>f`S0~|>OH|b;GMW;bY6-6t;=^l_j9-Cz?3U*E zhE@TrmE9X!Ek{6#~X62ILa%2`75)#6im6bi` zBLiethRl&2JXDuKN@J&{QVBD|t5m|w@JbG(^3*fayCiz1BLQi!(~-qa$9gQb#H1^s z46z55*Tx>=At+)tm&Vy+OSFiUYSY)OV~rHHDHJehQ8!7M!rCDj%uxVkD1d?@cHs+( zN?+XB znu3z`y%iax;saEX&g#L*q6Ge$F0nJIFz>G`&9_ktZ|u#5H-NWY|B*MoVn}~|Ynk=t z9n(;l_U9^v4HJquL<_CKZy;#+@Wn@33L8?S0yAJD$bv;srQD95XiQAY022xI$Of`L z6N%Rj+CYPG5uMBeRD`Yk*R?b@M_lZ*jjL*lvj>T*$q@J z39kEhcMF<+7Y)UV*E-7me;o_xrotT|!%&|-ydM9(+vOtKIP4fM)bY^1dEM6OucPXH zSB;#j9hLH`C2!JEZYb%Faw3}Ppn;lDHwKtAhRzHW-m9+-uRvLVRtYkMdokr9Z*!?& zGi(M#;F9e#dztzJwS@*&^Y1T3^+kntEO;d=7n+M3cyU1uHw^vt>CIOZzrW?I9_xR# z0Mve8*WdqgzW9paC<@eG?6=Jv_U^?OII>YM5q4Gc5CySW-rn7xc&6uFbHAqA1@V=TFI(We%GBHR!nVAh^Auygc3zd; z@V1t{YPyL@&Z&$E8JXA8MlTLBk%)qPz3fs|);e1)oH8vuYJKLEl^l41uCIgc@W=2G%_f9wwpYwqjZ(rX^FVwz)vk)ImyV2_f7q*{ zvvAj=@GxogRxjb&_pAJuoi&*8nbtR94b^RX)?F`}mL!@we&L=wOY_S@-4gv@5*sc^+|JxH(kLa49cN zDo)g#>fI*G*{Qr(p)|_cWprpog>Aq-mlHSLzt~jtm5uX(XQIgo$s6}uZ(2R^+i2G* z{^t8D*YDds{gQLQ8m;@r9^Pp>{v)5~xlh{^?H*ks|AyxehUw1OIs8!D z(<9YCRnI%UYD}U?F=6qo--Y!VdXN^O_cMjOjr2skRiPK4&&Q*^5oWf>*j=S zYcqeL`8Y3A%Wqw7hwtSPBOHqt>*ktgOpVb@e&$w^*|=w8#_(?Hx+{V-J2&B&ZumNi#h$zOFIr*+RY2n%rGxBtIqVf zbvABhUQC&M%c?b>uj$?}F8iy!%cM02pXyy&*l(ZtF*Fda2zt)Lj0@6pVTG-`! z>R$Y$u6nDV{&c>c{qbJO6WenOukM~W>G`&QOH@iZv? z#}=1=3_h2=Tk0AzGu!C=_H#kjPoJdZy5BYJH1?jIC~Dg^{%u=DQ^+@47ccc0`(Td2 zow1kGue%SQ{l|$jV$VZ1`IG8I_iM!^mfJ@EHF|!K-Z{@u&!kT$oZsP-=i@ag%H}YKo`pkIr{IwB@|w;a+ps&rVbwycY7-0;~L}k;3r0=Ah}i z`L4Qc)}h}!+$h_jt0l0G_~HP+yX4l&1;f0`of4Kl$bQ~vWv>6SqH95&^Er=OM?^}G z=x%9h{myuo`vlW$AaS3C!EXv9vX!?+ndu zm)RCKb}h)x-gs@$M>;PP^Q-n5e0#b@d+<9a?rzd}nsEE`PhU8{7ZvEc=xADO#KDC# zmnnvIO>SP4d%d8gGk==C)GvYer%gg3Gt=GO$-;W3=OP;m`-#GdLOXo4!1Zl`{@~*l z)uN+_SBkH6MBtuR%jA49WhvroeHdPXA#a$zw$64``7Yw{2PqmJ(+vz$HQe7Cq_GNV zsOwySqXb7@Pkks`&Dt&lj#8*DdJub-4E%t8X)=%4FCJQp-?O^=*6`WU_GKXPnL)2Y zmiIlHi4va~Op1MSKJ!)|nFxHwfE0Uj@N9%eK++9d5MWMZqA?V4W6rqPSR*zD{TZS^ zI*mub2#t&+yzLnW1i%lmXXgYlH_Y=<4vC!$l#9_{fBt6=z~>CWy$0Y*2H*h$a3&&9 z9w`iFVuNF3vPi~jmalkjz`_r`#7uCwEHGw)8b`;-BjZAt=s>A7T*d?ihKJ9O^c71( zWvn?9Cy$UZu`z*>QbrLQE|Wzw(Tcd>u)r9|V^PZt~ToIi7m(^u7r;Rh!WfbkiZ=JM3OBofIjy&v*&PVw+hRS6gS5Gaiuu?cLb7$I%E3@ zes*9P&U;AEE^r(c2EQKl@VnUma!^Kz=#%k>t8ouMj`i14ycY8f6#oLt=@cJ}2+izvPn%imIbH1<?ls!b-^4mXqzN4rLTcy@_tPEIRbNkO8;H#NKSEgEGsD9 ziS;*8+zsxHKLXdo^WsJMF~NKh#Vs-Sqc}O2;X4TuiO&?Q zFID3n?uNOX;$;7-zj|JczXjHZWsjFWOWY_<*3}A%lYPwyW7kB)1qPu!E=HY)ky4B- zJWv=XONe8H(!jVtMi>+u%Lrql)B;;8l?5q61LTn*QAmd^2L=Vj$l{S27-NLK=t5;+ z+RMV_kuqX}+9O540jwMx6%iqeL`_FV#mR)|r;zcnae=|BupAnx5JtyDMayF1)?mM~ zuz--5K=c9mKS>tI3rr2!7sRO>F3>**<7p&n%rI1fedN|d)P*p32}j8hZ!&n723xW} z-+@Y$U>^a;#|j`exx<1&i96>Y)9u51Dfp!AS77@_RL4ygTmhBg{SKfpQIgnXv1zR2OJnUxfSXf2oC9pV&kH;eC>{Px}86V*T}>{A4xp zHSvS@_Ws&`Xn`tFO2!?A_6MUsx_x-R0u?(_fy$5^4b{01wpUBN_5`P)ivH}k8>uZm zA%-|7%@F%sVo&K!z#k^$dze%cJCYy7_N1QVBJyEF0M3aW!C#^REHNs~j0D@0`6K$I z|3rrG3-C$XCt&*oqKI?a{#(TRo4@FhY6A(jgZTrO#Gb65{@MnUhq!%1+%Y(g`dfd% g=(7Xt8GL?8S)unq#}B5tKl@_b{~voz*%EF4f0}1i^8f$< literal 11768 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 RnZE2-kp5re8ly68|6hwO7Zm^i