From c84317b02c9d53fae40b82480a9332d5fa3e2b30 Mon Sep 17 00:00:00 2001 From: Taha Belkhiri <belkhiri.taha53@gmail.com> Date: Mon, 20 Jun 2022 14:13:00 +0200 Subject: [PATCH] added snakes --- travail_individuel/Belkhiri/snakes/Makefile | 21 ++ travail_individuel/Belkhiri/snakes/run | Bin 0 -> 22064 bytes travail_individuel/Belkhiri/snakes/snakes.c | 233 ++++++++++++++++++++ 3 files changed, 254 insertions(+) create mode 100644 travail_individuel/Belkhiri/snakes/Makefile create mode 100755 travail_individuel/Belkhiri/snakes/run create mode 100644 travail_individuel/Belkhiri/snakes/snakes.c diff --git a/travail_individuel/Belkhiri/snakes/Makefile b/travail_individuel/Belkhiri/snakes/Makefile new file mode 100644 index 0000000..e76de77 --- /dev/null +++ b/travail_individuel/Belkhiri/snakes/Makefile @@ -0,0 +1,21 @@ +CC=gcc + +LDFLAG=$(shell sdl2-config --cflags --libs) -lm -lSDL2_ttf -D_REENTRANT -lSDL2_image -pthread +CFLAG=-Wall $(shell sdl2-config --cflags --libs) + +EXEC=run +SRC=$(wildcard *.c) +OBJ=$(SRC:.c=.o) + +all:$(EXEC) + +$(EXEC):$(OBJ) + $(CC) -o $@ $^ $(LDFLAG) + +%.o:%.c + $(CC) -o $@ -c $< $(CFLAG) + +.PHONY:clean + +clean: + rm -rf $(EXEC) \ No newline at end of file diff --git a/travail_individuel/Belkhiri/snakes/run b/travail_individuel/Belkhiri/snakes/run new file mode 100755 index 0000000000000000000000000000000000000000..6338c0e03adad271a3f22d17e9e5d4567fb494bd GIT binary patch literal 22064 zcmeHP4|H5rnSYZ>N(yaef<Z$qbU@JtZJL%+i&Dw7nf67KHlzuSl{!q5Njs9vg!uz4 zQcX9+_3aQg?rybZT`iomYdPYvp0jugQb^j;6#SPeXi$()%R0e`Aq^O?F#G%Nz2BQR zFEf_2f6kt>CpRbaz3=z^x%YnezWeUIGw*)MSGTUf;m|lawNGlqRli3f)k@H{L0y1U zYpb;R_*|r2uFU~oC@?9nmIP9nMhdcNvBI68WLHiXIp{(OYfQO>M9D5++BZ*1m}+jx zlU)&AD&9_uE|GdnS#IW6CFPop>Z<%qt#%Zf(d(t%Xk9j4q3l*E%61ekvYSwL6UvUM zTg8(p$CF}0|Lo6BJ&;lIh)+$k+qI~2*lCT@XG(cc+Vpa~?Z1*=gR(oQ;%KLLOZOU6 z&hJLpQC!|_;%07C`Q>W|kE%CQYHvzQJ3`x5u2|a9wxlBzPV8K=bJfZvD_2y;B9+U9 zoXSOcP@h`Ap;<$-3=qc6N!MkHC;5_Z+&6mS1M9wU`-2bvcK?y7FBa5)W|DnSo}@#G z>{Sz+{AIWz9jgCVs_%E8p%)Y8!9S%nzGugWgFo&3;qU(8uFrqzzPp~gt%YwJsbKkh z1=kl_c)q+P4}Lo`&ZYn1Jorm_{QN8r{;52E?#_eH%Y*-29{;=Z=pW3Zzcr8kH}mKp z&4X{wgP+TT2lM3Hk_TUu2RHKIu{`;%%cFk<^gZ~ur!{%>zm*54zT>ew0lzvA{(bmy zYnN(e4cSKhz^}}P1b1BMFVM<u`VRrW7@iJ$q|t!7F%K(!yMGP$`=*+@<x7@VR?%Hv zrTP8aJ0oF#EFOr){eI0~+f?sw3r2(6L$P=;+El-`BN7fa1-5krr7WieF8#IPP+X&n zwb5W89&8MT$xT#1n}Tu4*F*z%tc`R;BwQ1W#iNm3S*kU`j=(Nqv_2SLn}|k(;do6b z)&;aa(iUWiFB(-&q;*3y7=xw|-<VJ(QT{iF!flZ|gh(o{?Fa^B2_#RYstbjs^Sa1( zp(?APY!S9jiq}f5H4@Xh;4KykQ!ra48r+F2QJHXS*Diz<(QLid-@4;ge|sR*p>;(= z;dndAJAz>?8VI*(oq>*yNGnuZcLx0Jp>UuhbSEP0Czq-*Is?eUA8ZT60}yPB#Uu_0 z_Ur3v*R1s~uUvjz=Cbly^LmBqLp;Vh)o4pRWAr3tp2m09aR7CQKN^n<v{j-nX<|xX zeD!M>o{O}n6qZ;JnoE|?fTu+I8<dRrvQTI~<ujV4UtsF<e1V_S9(tG{rPO?Y@liET zD^~rVapp%hN;`UXTrMxg=colQx8NxYzQBS{Sn&5-@M#Nfedv@c`~v8z5C|)e1<%A= z(-vEBeuk1kl?A8gC8t#uT+Hi~pxT04=L@<8r!sMBu;3g!lC@ZHG^CksvEUb)sHW|( z;1^l&E(@-vrb4>Yf}<mtsoR2=m?)n67TjgQ`z<)lM>y@X;H3<L9<bon=lVeluDX=4 zI%L6B7Zmtm3$CWl0w1v8?-hvrIBCJ(XTgUp_@x$n_Hs4?vk~~;kHA^i<!|Xd<HdTi z=%pJpP469u7o>;vp5w*GMCR#hPk&O=Cev5_4#c%cBmEsDnH+m5olf@)o(A~Iu~Q~b z1N-FIpvlvKJ~{S%lc#}va_oMSrvZF&?5ieE1NY?E9+Rg5dvfeHlc#}tax7r-G(b;| z-DvVOFi(zoO`Zni$+2Z7PXqDf*cB#E1MuWnsmas8J2~bsd6(c{dxz^w11;)r@-)Dr z{w7ZYE9!6ZG@zpXCQkz?>TmKifTI2;PXj0FZ}K!?qW;XIH7*maQKO0W0AG*!v};j@ z_u2T>HvU>0zr@C0W#cci@t4^6`8K}D#=nj23~TvbxAA|p@h{u>7i|2qHvT6z{z)5u z#Ku2t<G*X;|JBC-i;drF<(K`j);RS!-8ilHoSA57s_QHI8hV7@H-C{Js~gb2(wE!` zlc|2aZ}t7S(EEz+BXZqz{1V)HH_<h2y}9X8*P?E;wsuTW=-(#vul+ocig$ElLLYqf z27PeasXI>Sr{0N|!NC&cpg29+F5=AgbbofQu7Free56_LS$+BwxYUi8<MZ_7>N&tu z55ApFr`pijPZT-8JGR2s%%AMX?tqXknqjB!8L!6uZcOXO!^7y2y0Q19AbkTMU+H}w zpKW@w@T$ckAK&z{f$k#&YKgd>>=Pz^y%PW)eM@NkR5ylFucHjQgo!-?*61CFQc`^C z`}DrOWTQKVhcwT}Jy*34RTsuCJW)MIOFc)n#!=J!m+){HuC<hlEP9Sm!L;}SJ=sfF z<o_lz84@fhLWk-gb!2UZQV*OHIzm9seh!{%a^Vv+<fXm^H~o6jH{GURBP$#)O5F+Y zsbd^2Z__3WuO8jlJ)#?l;UV8RWjI!XAu@G{a%dgaLqFfs-QBGZzT$BlHBJq_dBOgQ zQ^wPSr;96|t{653jgvL5AB?8{=G|($elU`1e)q}~sKAK#a2my`F<vr$P4Rhy%#*(1 zWb?S*`g64AaB?U5OBSHxnUMuF6bc{#lQ&>8k*oqg;-#K4lzQebGd-f?W;xK^HlRV~ zneo^~d9uqrIb1HZdC<#kK!eQG;*v6Dmz6nO%35UtF{9ctPm4#&lRZBFmZ-N1@FUdt zkJ88E^g)41BFi4%xT9zHxYKoSih5K(9>1Q?dT-up_9E&+#_n+=kusXk81<u1cwn8X zrqUX|=^@_~c^kV7ok~hRBqW0<$8@rJiki@vH{7#(N^|wnongVLX`9Cl3IeMNC}oJ| z%)-Wv2CBRjt4}4H&p4hoL`!7}#*@vXB(QrnEvO-KT2T0`f@YLu;n?-K<C4Cqz6R=; z)1p_F4GYbBRPZTuxRc4oV#9r2oq4vJ&G2&Z%xda|<aTF4(syS6pVP*P>=O2sEkgj# zo3YzyC_k@K8R}~FKBIJv<uhZdFC@QRvUu<0EM8fUZwh^E3VlqBmxy6zkV5zBI_oO+ zJ%nNE0CGQ&#Ju9_0fG(-wz`n{$0T3O{D9==F@Ie0Zst!)zKr=FOTL_WYQh7_>V?cd zbJped9X{)7@eSi@{>zveoppU~kcu)wqQ^)?O7ow#h@MwgH<MDSZ&YdC?1P}xcZOKh zMoCk|9w$~v$B8{@N+*c@u_>J*7DZ9E)5IcsWqa<dYfJO!q^q=fAFg~4rC#`RIz8$7 zjBg(>A7NY1;A(5Xlz#6GDea$hxtpPK^KiRs@zF`w77=QcdP|U;1(maIrEWUwBxjw< zSyW{OXDyVUbb`8WsZT+zUOD-+y+ny|NE6D*WtI|cr4o&xM90_}BDG~VIoqwAz52SX zdd=jlSveccIJ1-p@!hg@0%}{8lSgJ$YYI}XR#Ig_F$z+NFris|oJ%x8F(PLiqnqs| zswZdlsze)dmI!USB{2=PgeuX8?IqfM4$|Gq$(vJ|R_mk^rBI?LxkS@&)=bX03p}mV zp{cq6IpZ$ySf+ZG7@;4zsn@nx`Y&3t#nOM#7D_7mFQTfXqW>Z;N{TDD4>eR$(SK1! zCB>E7huoBu^Zlr}4GlL*k*{JK3W-N{%oh`n{Ft9dJThcn*ds^g%SetanJ*_Ec{0DS zKQjiU9ym*rOd56E^CvNJmbZNi_$?>V7m7{;!>u()fzLb{jos&r1ZEh`6BtM)k{JHa zIgZk$c%)4v8!&QDD?~ie02ODH!~+cwMsHJ#CLMq*uEawOP?<%G9$$bkqH~4~^xy)7 z!PxY*us>7O%tIW-9UbzWqh;|Qu7J^KviY2Pq9yTs^o<)o#mwMR%({Cz&tcR)r|o*K z-x4eGL<8G6#%ppUp8n6{lT;H|+B}llui9PVfz&)qM#c`w34k@vjK(W(V#@71C!eyT znWyY%vK}S0K4s6NLr>ZBI+9Ps^LU~sVh@6hy5ZrqfEMMJP<WeZhP`K;rZvWq>mkLu zqzc5k1{qm4fZ2WnP>K{TThyhTEggI<oyOwpDm}TE1Xw4Ks&1STtBPx1!gjzDWSE+s z1l-qqi;$j>*hgTT+`9u%vX>T7c>4COejFxp33As&w%Gd!ZH{;i%<C}^OfSVeFufEO zhhUNNLs>Uu?mb6Dc@z0cb+1{fZB!~*=0|Dg<Z+Y&ZiZ45e-iFQoqCRlI_GuQY`S|7 z+zs_s!w1!Q>>u%wnnMK>E0smPf4GrWDzr{1#5%=m{MdWzGs`Q6y~gp>i<IFEwK@BZ zA65J!^ox`5g!Rm^)M2P4`zU1l|NN%ccsBKI0Z{Y+7{g*2Qe(V|D*Oe5X>u<WMoeOB zp6%`tMRW8VA#kqiUTTb?-Wq(0;(i*_#GziDS^DlFrNjOH!B-YJhI>XG6~jFPj!BF& zST%ng3v-O+C);(pJ4#VW3^el%pghpvF6*s>v!rl|WoWYL$?l|p_@>&9wGxZ#l5J0R zr$$~yH#n-d9@Rqw+uPgQ^}&?K7#w`Fz!)B!UW8yAGe!nS3mhYk0pk}H$5IFXs(u9) zfTVpA+NUZ8>x|RJZ;hX&{tZ)n&Q_EPT|l(7LF?btUFeoQqR<Exg#)2FORHbj8cLNS z+b7zndH)ty76Fx~M}!o%6xn62dk+fRocG6aY^TZf@CX7ey1kxEj9^W?LTmzHP25fy z>^V*{tZTemX^Y`*YA=lPm%ruRT-UdH6ZQ+dH`N-y^fuQTuX~%k#<^y_Z%GZ{O?4G- zW5_E`ZTth=48HA*FIx5+wLem4Ox78%))>F{rpsQ`dyYBu>t0B_Li?AW-AXxmKj-xy zYj3Z#=0`i5lrQ<r>~xCa%zn&9U^W7?5txm@Yy@T_FdKo{2+T&{|8)fDcWIP-jg1={ zJ@}QPr*=balcqHudoUL1NW?>tu;<u=t@vr)g>&zqFW%ZNoV!C(4L>dH3<aZ}wqT5Y z^e0_xuH8_xakFP_qtDw^yK#d;8+{vUe2u=w489=}#ZUb__{m-<yj>Kb8lM}>m((=< z<%+p<jWqGZefudrb%W#m&QH*afxe30`J!BA6u*>CkAg1;od(@^I-NcMy61Q4v>OY* zLub<ID$qCnBb{ynZ5~Uf<Dk#|F`fP=P&Za3{|@>?&}Tr4uzZ;!91FoRgk=OfQq`b3 z7NK8}VG_UTMi!dm&PL6#)9rZwybFryx2g1%{zCjupe##Cq2>bdbF2^Ias~bm{}%fe z(9=rX>q^Q$<+|vO;%@DR1s}iqnh#zHRM_7P>KR4Z2~dgr#_?YcyqoM*qP*_Ge+YG6 zO1Q7Y{pEtS^XE7}<Uo-$51@zezZ0=oM`dUE`g@!`h0c`)P$D10_`mPvblPv#ao$8? zSs%!s`+YinccI0H^9zM6r#P=3Pp3Zyv6)Ahq%s~9|0c-4W0e;?AQUM72FPE8{8L$S zuPN_>d@kDSB2d%6vq01lOGB+6_!Q*g_q|-lx<2PUg*`>i?>J>apjU(c$DrGfb#V~a z+PV_=-xt)Dl;7+0m3aCJeI<+UDXJ-{`tlsTWL3`v>r1M`C9Aw8Ro;@tYf3z8O3K%i zxYv{vi{JbgB36gt$NIZNaygr3BQP6**$B)=U^W7?5txm@Yy|%ABf#&?@Ov^ejih9! z^e>r+0NI;kyl))TEq#DokmbCiY1D&H}%$!|%q>{Fl-KNzC_lXwFNC<*&b!ju3x< zz6?g<Ic2eWNrm5G8Bub6=j0VtK7QAvT$*dvcQFW3W>{HC1)AnlqIC@=T3=A&cVhV6 zj24v<<NMT0FkJ2dVTHN5qMZNbif281OC{=u;tB{~BME+$GQ_t_g6DE!=_U9{<pAGD z3*M}U^8Y_Y_`Pbozbe(<)rvMKdW)i6igqj7ujm0q4=FmJ=&+)ricTo1;a3fm+=_Y> ztx~jF(FR3tQM60ZZbkbQJ)o%c`tCpZeKG1*>({RRxMy+mwnR9d@LX4UO=Z=RWgklj zcG(w~S5;Q6sF3h^+&giXmFH+UdY^7pPTZ;S`{!2IPP`{~S5EyR^S;T}pQG{pl8s-W z@qLwz7i-+#vhleZ_tR|rLXGc-Z2TgP@0)BKqX@URMc~9K3Z9&JiFPPQJ36uZF_05? zo98uH+~eLaHOHxJ94{zTSrK{d)ZU}<`}kI=6Qe}cGAqLRmuNihS*1?xz2<nAjlWOJ zb-y_^j2;`Un(QB=YeO!4!HoBVNz1A6=$o;j{#>ZNCVm`{LFKq!fJW)EzU&4C{0suU z)2$t_;a4b}pCjyx_B|XJ<@tSL%8$}I{5x{Qp%Xay=jRgXQrd-o2S#suJof?5RsMYS zx?lJy(`v54g)Qas^F5(6v)xzYek-7-pRIo$g}y_Z*^WOFelD5O?$0aSUavn1KQr6C z2o<xwmnh8f@xDCx)dF{G-&7ASv5y7)YxC&W=E1k*!CUj-3E-u8`ny&Cr0p?E`OX`- z7y7y0Yu}s4|F`qtMQ9ff%{pxN#iP(KrN~vua&UR*edJv6d;$2CQZ?)I%{=<^@qo_t zKK;c4&vGG{kLJO>z)K4*)%bbCmK&7+?=F&v*zd#TXY=?8D*aZaFZK_izZdbjxM1eE z*OkZ5?mYOH^Wa}o`M#|teqvt~`Oc+$(Zbbg+*m5Bp*@ht&*Q);4)${ko>u-_)I?6~ z-NM(idHno75B{e-xD(~1erWGMzd{~vjAQolxJA8GWh~^w!cS)0W6?D#4&7>gEcRL< zT&wUsYJy1PCZ)}J{BH;D5gOSaJ<3monz)L+Z>S^{KB4mEdGtT$@&8aB{71lZ<@@VA z_>}O2b0$>1#6C9_xiuP(#S{4DQLC0YHNqe7^taNv5iuNG&=&D;?}%&*bokrik!Z{x zNbJNR3Y}dY!FaH(a#htzI)fsI5}k?=@&}^Pz%HD45RdNC+M|Kapua8A*-2+CSU5j4 z<5{Y)aNyQp42AOh*EM?UeSUl~L#JE#aR80qrz=peY1I5RpV{E8uU!jSmY23{K%9@E z`PbKNT;r|tZ(O%-lds9&<Xuze^NZ6WW*#+RI|f5I7sXP?K~z_pXE@;ChRnekmeVTC zgDkSoxQHggVfr=+-$rFSQHMp)0TbB*@@_lo!e6@)=SkpODSsjsY_rxuD&pjh?87Ot zJ<78zvN3UB1!a}{<PLQ_Mz#%_J{IxsK#6g{NHh}1$sv9jC2}MW1L=(1ZUx~zbNWXu zpE@E-El>7PezwUIHnI=n$Yj3)6~y@_s%y023=oww9p;fyTdrD%&IOUDc4W&?1Dw#I z&gP&(=Q!*n>-Y|N#z$)`Av&Bm4kXg)4}`aO1pU!KTPP6LaKMNqlk5KKsVw+v(I0E; zKxM?)A>^0t96G4P;sceKakz+GJo6x!oQJ)L<`A*fDr37k<AH6U@u;Lb_zEYU1fyMA zWjGQKR&Ea`D!ZbQu3$92%K~jngmCgys7*oMHML9Pf$f@5-w}xI&??(@g^`7%@u-yC z9*oBDeQg%whb)SdW5_^Vb#=tGO1kT`N?cZMkEn}SuvM#!2X}%MajJ|)#1Si%!5wN$ z+0h1X%t;?|aFG^#jjRHlAvlxfIG{zV#K6``$I$$D6V323MZw%uCSG4M<^2^U7P@>* z^aJ>(Jq@;Bh4GsbQ;*;>AH0vj$VyyT?OT*RQ}y^^b<EwfQ?1RO*R@PN+3GXwH$#rM zRU%w|-Zx^pO4;+ik-hu@$Z5}r?MGDknN}&D>PT^Bd(6~D3gMGf*q+zZOnF~QYD*t{ zP4qVW)1D98^SYa9jZ)_FvmVngLQZ=~%=7x3=`G5h+lb4rV66`q)Fy1t>v*OEN|Ezt zd#?Z2mHir}$LoEj)ygs1la1Z}eqa<=_K!)IOp4l9u=f7*4V%43*)gT>!>!5YUi-Gq zp7$A;vOfD@p6MZ*J?}>_?LJTbkJ#*azRdJt+x`aU%jJ2(X3zVuOnHBn_3iO{QrUC+ z^LmNtK{iyB+mGR&*z9?~gz4R^sHi>v-`MPVUxjJ8Sup9qp8v~$X^%qPrsjSDpKoZ_ zXP)V6uytAN`8=uA^#GArPjVTa@wXwMzRUUZeh!~k$>&ni{YQ!IxE*PJOkITS&3&I6 zNE^x4f7qVs9LTfm8>E?5Eh+D3E7Z)Nc{)Fkd~yD~Z&Ow+HSFzWD~?vG@~>itin9IH zHk|FP)YinpqPkidmaBd7%fMFRpX<%z4~e<#(n5Z=(1Qi(9h;Ezl~URx$Zda9z0_D> JGqADRe*#OI()s`Z literal 0 HcmV?d00001 diff --git a/travail_individuel/Belkhiri/snakes/snakes.c b/travail_individuel/Belkhiri/snakes/snakes.c new file mode 100644 index 0000000..40cbd79 --- /dev/null +++ b/travail_individuel/Belkhiri/snakes/snakes.c @@ -0,0 +1,233 @@ +#include <SDL2/SDL.h> +#include <math.h> +#include <stdio.h> +#include <string.h> + +#define NB_BLOCS 4 +#define NB_SNAKES 10 + +typedef struct bloc { + int p1[2]; + int p2[2]; + int p3[2]; + int p4[2]; +} bloc_t; + +typedef struct snake { + bloc_t * blocs[NB_BLOCS]; +} snake_t; + + +int running = 1; + +void end_sdl(char ok, + char const* msg, + SDL_Window* window, + SDL_Renderer* renderer) { + char msg_formated[255]; + int l; + + if (!ok) { + strncpy(msg_formated, msg, 250); + l = strlen(msg_formated); + strcpy(msg_formated + l, " : %s\n"); + + SDL_Log(msg_formated, SDL_GetError()); + } + + if (renderer != NULL) { + SDL_DestroyRenderer(renderer); + renderer = NULL; + } + if (window != NULL) { + SDL_DestroyWindow(window); + window= NULL; + } + + SDL_Quit(); + + if (!ok) { + exit(EXIT_FAILURE); + } +} + +void draw_snake(SDL_Renderer* renderer, snake_t * Snake_to_draw) { + for (int i = 0; i < NB_BLOCS; i++) { + SDL_SetRenderDrawColor(renderer, rand() % 255, rand() % 255, rand() % 255, 255); + SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p1[0], Snake_to_draw->blocs[i]->p1[1], Snake_to_draw->blocs[i]->p2[0], Snake_to_draw->blocs[i]->p2[1]); + SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p2[0], Snake_to_draw->blocs[i]->p2[1], Snake_to_draw->blocs[i]->p3[0], Snake_to_draw->blocs[i]->p3[1]); + SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p3[0], Snake_to_draw->blocs[i]->p3[1], Snake_to_draw->blocs[i]->p4[0], Snake_to_draw->blocs[i]->p4[1]); + SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p4[0], Snake_to_draw->blocs[i]->p4[1], Snake_to_draw->blocs[i]->p1[0], Snake_to_draw->blocs[i]->p1[1]); + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + } +} + +snake_t * init_snake(int x, int y, int h, int w) { + snake_t * snake = malloc(sizeof(snake_t)); + for (int i = 0; i < NB_BLOCS; i++) { + snake->blocs[i] = malloc(sizeof(bloc_t)); + if (i == 0){ + snake->blocs[i]->p1[0] = x; + snake->blocs[i]->p1[1] = y; + snake->blocs[i]->p2[0] = x; + snake->blocs[i]->p2[1] = y+h; + snake->blocs[i]->p3[0] = x+w; + snake->blocs[i]->p3[1] = y+h; + snake->blocs[i]->p4[0] = x+w; + snake->blocs[i]->p4[1] = y; + } + else { + snake->blocs[i]->p1[0] = snake->blocs[i-1]->p2[0]; + snake->blocs[i]->p1[1] = snake->blocs[i-1]->p2[1]; + snake->blocs[i]->p2[0] = snake->blocs[i]->p1[0]; + snake->blocs[i]->p2[1] = snake->blocs[i]->p1[1] + h/(i+2); + snake->blocs[i]->p4[0] = snake->blocs[i-1]->p3[0]; + snake->blocs[i]->p4[1] = snake->blocs[i-1]->p3[1]; + snake->blocs[i]->p3[0] = snake->blocs[i]->p4[0]; + snake->blocs[i]->p3[1] = snake->blocs[i]->p4[1] + h/(i+2); + } + } + return snake; +} + +void rotate_bloc(float angle, bloc_t * bloc){ + float x1 = bloc->p1[0]; + float y1 = bloc->p1[1]; + float x2 = bloc->p2[0]; + float y2 = bloc->p2[1]; + float x3 = bloc->p3[0]; + float y3 = bloc->p3[1]; + float x4 = bloc->p4[0]; + float y4 = bloc->p4[1]; + // middle is center of rotation + float middle_x = (x1 + x4)/2; + float middle_y = (y1 + y4)/2; + + float x1_new = x1 - middle_x; + float y1_new = y1 - middle_y; + float x2_new = x2 - middle_x; + float y2_new = y2 - middle_y; + float x3_new = x3 - middle_x; + float y3_new = y3 - middle_y; + float x4_new = x4 - middle_x; + float y4_new = y4 - middle_y; + // rotate + x1_new = x1_new * cos(angle) - y1_new * sin(angle); + y1_new = x1_new * sin(angle) + y1_new * cos(angle); + x2_new = x2_new * cos(angle) - y2_new * sin(angle); + y2_new = x2_new * sin(angle) + y2_new * cos(angle); + x3_new = x3_new * cos(angle) - y3_new * sin(angle); + y3_new = x3_new * sin(angle) + y3_new * cos(angle); + x4_new = x4_new * cos(angle) - y4_new * sin(angle); + y4_new = x4_new * sin(angle) + y4_new * cos(angle); + // move back + x1_new = x1_new + middle_x; + y1_new = y1_new + middle_y; + x2_new = x2_new + middle_x; + y2_new = y2_new + middle_y; + x3_new = x3_new + middle_x; + y3_new = y3_new + middle_y; + x4_new = x4_new + middle_x; + y4_new = y4_new + middle_y; + // assign new values + bloc->p1[0] = x1_new; + bloc->p1[1] = y1_new; + bloc->p2[0] = x2_new; + bloc->p2[1] = y2_new; + bloc->p3[0] = x3_new; + bloc->p3[1] = y3_new; + bloc->p4[0] = x4_new; + bloc->p4[1] = y4_new; +} + +float random_angle_radian() { + return (float)rand() / (float)RAND_MAX * 2 * M_PI; +} + +void move_bloc(int x, int y, bloc_t * bloc){ + bloc->p1[0] += x; + bloc->p1[1] += y; + bloc->p2[0] += x; + bloc->p2[1] += y; + bloc->p3[0] += x; + bloc->p3[1] += y; + bloc->p4[0] += x; + bloc->p4[1] += y; +} + +void move_snake(int x, int y, snake_t * snake){ + for (int i = NB_BLOCS-1; i >= 0; i--) { + move_bloc(x, y, snake->blocs[i]); + } +} + +void rotate_snake(float angle, snake_t * snake) { + for (int i = 0; i < NB_BLOCS; i++) { + if (i == 0){ + rotate_bloc(angle, snake->blocs[i]); + } + else { + rotate_bloc(angle, snake->blocs[i]); + snake->blocs[i]->p1[0] = snake->blocs[i-1]->p2[0]; + snake->blocs[i]->p1[1] = snake->blocs[i-1]->p2[1]; + snake->blocs[i]->p4[0] = snake->blocs[i-1]->p3[0]; + snake->blocs[i]->p4[1] = snake->blocs[i-1]->p3[1]; + } + } +} + +int main(int argc, char** argv) { + (void)argc; + (void)argv; + + SDL_Window* window = NULL; + SDL_Renderer* renderer = NULL; + + SDL_DisplayMode screen; + + /*********************************************************************************************************************/ + /* Initialisation de la SDL + gestion de l'échec possible */ + if (SDL_Init(SDL_INIT_VIDEO) != 0) end_sdl(0, "ERROR SDL INIT", window, renderer); + + SDL_GetCurrentDisplayMode(0, &screen); + printf("Résolution écran\n\tw : %d\n\th : %d\n", + screen.w, screen.h); + + /* Création de la fenêtre */ + window = SDL_CreateWindow("Premier dessin", + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, screen.w, + screen.h, + SDL_WINDOW_OPENGL); + if (window == NULL) end_sdl(0, "ERROR WINDOW CREATION", window, renderer); + + /* Création du renderer */ + renderer = SDL_CreateRenderer(window, -1, + SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (renderer == NULL) end_sdl(0, "ERROR RENDERER CREATION", window, renderer); + + snake_t * snakeList[NB_SNAKES]; + for (int i = 0; i < NB_SNAKES; i++) { + // random int between 0 and WIDTH + + snakeList[i] = init_snake(rand()%screen.w, rand()%screen.h, rand()%200, rand()%50); + } + + for (int i=0; i< 50; i++){ + for (int j=0; j<NB_SNAKES; j++){ + float angle = 0.2 * pow(-1, 1 + rand()%2); + rotate_snake(angle, snakeList[j]); + move_snake(rand()%10, rand()%10, snakeList[j]); + draw_snake(renderer, snakeList[j]); + } + SDL_RenderPresent(renderer); + SDL_Delay(100); + SDL_RenderClear(renderer); + } + + + + /* on referme proprement la SDL */ + end_sdl(1, "Normal ending", window, renderer); + return EXIT_SUCCESS; +} \ No newline at end of file -- GitLab