From b26a2afe50dedc7936b69a45ff5bc155d19614c0 Mon Sep 17 00:00:00 2001 From: Aymen Hmani <47940043+TheLime1@users.noreply.github.com> Date: Wed, 8 Mar 2023 13:00:48 +0100 Subject: [PATCH 1/6] beta enemy test --- assets/img/enemyrun.png | Bin 0 -> 21349 bytes build/makefile | 2 +- include/enemy.h | 20 +++++++++++++ src/enemy.c | 61 ++++++++++++++++++++++++++++++++++++++++ src/main.c | 11 ++++++++ 5 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 assets/img/enemyrun.png create mode 100644 include/enemy.h create mode 100644 src/enemy.c diff --git a/assets/img/enemyrun.png b/assets/img/enemyrun.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3eb23a717e1501f611ffc56476103e9fd752f0 GIT binary patch literal 21349 zcmeI4cUV(N*T8Qm5?m>(D2gjYY@i#GKq4e25US#eurv`HA-RDFBryrS7y;X>2m&@x zL9r{iEFgk3br;LJf&zjx3kpbAq?dd*AbM5Y>|4I?d*0_so`;*m%sFRfelv6C%>5&K z?bfbTnyN7s001THRTlODAVY;@H{=xP*>mwvUFb`ZyJ|fj0KS_c{zCu>$7cfoVmZs) z+|JIEBjE5oIb4*rxjBl<<1ks?AOHkZryfXOecMirTC(r-OS@%q+qeO7Iy%={+=|bj zEmf~n%)j^K%&FC^>6Tbg9xBVLLm1 zCu%8GWOiQTx7pZ;uuG=3h;t-XC6x@E-Q0np>fRku($TH#HVpxoB|Rb7M!?{1s65tJ za1pW9nq=>h?|{C17_`2TD0h&o36eAzJQL*^hZbK-NzscDDHORERIy3C)UE4-TZawO zn*OM*k5(1B1pVl0YUJ4TZ0Y_J&zfEq2h36C(1PqU>y}-AD%{z6I@S49o_t>erl{C< zq}kQh9RSSuEJqiCi_IDmo#UfNV{qI-y#OCB#2Wy}CIMU;-3t_;+(8c(o1)!$qfi^g zVoj;q>n{?_-GqXg(NbM!6eyRSbb;?`j4XRDG+c;7>vKazn;H=9*5_F!4Zi>3|1eb zuaAZ_(ELEQfEIve^B0Uenebx)^65MlSHR-1QDVO|caE=sqOC1%=;PzePGWL+J~V+b%ZKIx zVz_J%GUihuOml4YlC0T$0gX)utu2h90zDRsL0V3y6PGiV)6h&TmWgK2@cL*P(`Y%G zNvAXEAf0Y#L@f4tK_M@j?d~WXxx!pStzY@`D-c>*@S^2*&-x z%)i}+zbDB4tBo@5YE0|fPWT+Az@NqgO+BC$@^|*|xYy6kzI0Er(v*8jpp@M(Vk z-ZbF#X$&TfsgK6HGl^(JEFMG~fp`KGCWugpp%J(oyL@7r|J7+AKq2d6y!!u}hEJ=Q z?nz^NfDB{I#KzU6B$tWz%uD*90Qs(B8`THVhEjK=uRVG83y!;@%>XX z_pLKRI&&X_ABXJ+^8T6d2L)Lgl+J=YzA=->@j=nJTyGYgCJv<-KQ`k-KKStjLJ2r1 z*fBZI9p>ZzaFsGZ9_ycpFtA?ICorM@%f|d~$JD=3jlYQbkZ{?rG(+h?mvAHKjx?#-q;4kCY*Xmk zAkK#Qus({9e(?e^qj`K@I#B^7XA`+Ok!gg-65aKoiv@v>);EAMA{yO*fyOeKG$>PN zf;dCyp7GZi-A8Bc1gw!Eoz8&HXCo{cnsWx4X6TMXFUMhxa9BFgfN4mW+}U{P=N*RQ z_^aWP#W!0Lba8-^*s)W_7)Qo@RR*ItR_7wV0C@Y3CHRK=Sm*=2NP#{dOySjEny&wA zQ+V~4rk^aG*erpu{)g7SD27>yuixV<%>jDl1R5_V5DXxOUlxC9VaEypy!9mCy88-df1C`)lkLl)Y`(-F`&Bb zM2VM^hh}k7gWN_VC+w;HM$>(9XgPOJ)!(pI(|79It!`JVu{^Zx&1&@wjgFR4L~iVQ zqNh3`(?<7U+TMk_y5VOs5vL6HRijStnOc#nGwt~LR|R+a^7@YROLCfOw*;DKslKm& ze=a1cFSMX!sGeUxBa)^g{y~hSDl0|kO9;q8Pbwe-Jy8Gxda4Sc2Y{rCpK>ViQ$|(% zL?EHZ-&X(6c=@`~f2A*9d--alZ~)#v@6tg~n-s&7oXjs!e}@W*gSWDL;s?A8m+JZWFR!Y0#~4k`hBbMcGFma z*NYtH+O`KK3P`HcpAiSdIviOY#D(BdbHEI62IP`M2uX#{(>#6OoG85*6jHQmbFjg$TP~}(O@ z8?su})I>M81EM+cfQ4)_qJQh?g6*@9ETjZxo(!$K{n$bNyxyJS(U$}K1Y$a$|2m{C zXw8hG?Oj@3b=$8gg#%WRhh>Z!GXh4B-x~OC&~JeBrZ7&)?ajqo9=-v-_fmYV6DuiI*F}EE@_D{x@r@Xr5a)H=wkwZzIrMgE4J+jJCHWu$yl_-= zXkSywqJr!&5qQPAYT1>PG7q)1jb)GC7$hp4d9<(;G2ZEziB7-B$emS^v@eQ(qfveI z+RE%%Ck@|Voi>zj4RyYmp5dBWV#P;QZTjiNPeRdiljn&dZ*w3S@m@D-X6NsT{Pdt3 z4V0jfV%{LbHK&+B?N=F%fYf9&WXF*FqawIpai>xu!I87~O$DHoQL51!+ z1(ez10f+P^?FgAwb=H6FPqD>)?WJvpE~nSDL$1pn>@K?+=0AAYqsY26)yu~w@KHYYthz3ZpV^bq=)UD~5Kx?sLpbo@FW9+)^U4 z9%(D7PmEb8xO>s`kv#X6>7R)Bt}Ty)-}T#CjVMx2%tAFyokmin@;j*gE|tk`RsIC5 z`kw0UqOjPU6r1vZO07|4%hg*CzBUOASJ6-_OTH^p6%dmWF_#?rbmpbsg5M2Bx0|;C zJ*xme%^-DZ`;=*ki!RPP<~Y*p`k0K|SD)&hMoce^PWrj^Eyu8au$`c_uIOy24hOKg zrDUw6RJGT$EW)*&dVPL*+4J=m`(E`Vg@H&!RVYf>8?DE#tJ@IV{vA0En+-;Ht~gRZ zO(R=b95|caBAjB*m8O%8m1GK?C2@;fnL0 zmD9xBm@BeZA00h%P6hA3@M)#R15b}XoYK#~I8Qfr{B1j#oww;3;?LPb1r>$7PTd9* z<0&XPH+gE-+@pbRX}6&P?T-qrDPLsik&J)CqZ1Qk4~BhLV#t}{{OhcfyOSKX28SOn z5`*6va=}J4Kft-oRDNVhQSkjh+c~1QVG2lu3!*pGvGx=$_?9jg{uwSB*Mq{SqktVnvGipoN~`rfVgenk~Jy4NR`X}@PBEpu9O+7won zKjD|T!eINfI>1QLm5q?;>&a}LU%R;NN_=A4Wh@`niUVSgEHPa&5c7C=iI3j(QF^1@ zVG(1bFbLX8p1U>gL`)~#eV2TCwBe6_Ofx0DFK&1V3la0&^%u3Dywm%iZ+` zQsuBa4c}(~q0C{q(vGdD{9F`X|3K!|-(nlX2ksZ)5AJUb;?3)AqywwFPE~mYnt3`Q z%Cmu2`)iIWfE5%kh0HZTPutJ4)B4WjA2CvCyR*Oiz?zmPDO;kN6ckUEy)r3KNX8?0 zhC)1|7GRj!nM^G`zf5S45X3kGp>Ae-ne?mwh;zQvQL^Z$?S_ECAAfNfsf(E39bmUw zR_6z5Xf5LYJCq;wMhnH%-pHm~YiPs|I`iUxm3deL=*uD7PbA}M0U9AWKtc*);moQV zfGZxz5A44lmX{H)5$PWF{L$5mh$NuAU<%9EwmbQf%mojGPDR9Yzg@0+!qg-Wh0JiE z{Qma+eVMH$a>?;PrvH1PrgyD_ybMD*NX9M)aJ`056~_7oba%aNwww`J>w2Rh>{4%< zbL*Dxg-eer_yIn*Baqa2?~<>`bN6*M^z>t1Qv8rM2@1NDY&3L?p1o4gdqA_)>uU5h zZvcv8VfduH6{;I(@}-=`jQzFBrq;B(U5zgqs>8T0g`zSMlDY|b%DPfLw{REWctRno z8exN6xnC4pPxp#>ZPGh*o71TcI4u&+6TU+}#|vwzdkkonF&3uYn?$ta)_%^cofA*4;Un zw!NkH)5HT#_})x0`JP5(Qb_LUXcN+5rxd%`;^MU}9d%b{MBUY&+dhwyJmOKz$_ssN zF865b?WTQq=Hj&O=K$wA=Dk08MwJo7c~m_#OSp6fDoU&KM^m4)O$9qZiSzSb%-HtX=2iotblxy{8v3%}-+Xebyt=%m`fVi7SZ!0EUHR^fK1UTQ0%CIJ z6!*?;&hJ}OQ6H5#hjC3Q7Jz83+;M04;2DLveeN$5NLth_!J+tbh$)AXpu`|HfvTfR zCWTrx%y5W3^LDT9$h%jxvZW7ZA1w1ewJ)k@b4X5@Tt$%GNmYxkw&Q)Ps(+pDS%X4y zo8J$K*M}{8ySlvQQ1nQ`zzV^`{%oxuo^;jRNN5>;)$4!MPPur=xwb&nsLnT?f)v$izs@0V-flo!0o zTUgm&xW1pv9JWkT41dyH6jH*D4z<2Eu*$y6tzol{b#SUk6P?>?-uslHY#P`1AoP^^ z`Df?v&J2#ZSeTFcrRgTegmMV)T`=om?h|C^y*HE&7tz~?j~hdBG6urubVj(go(h}g z#$R%(zrFn+cIKwpEg5eUo!Hg$)K!*u>y6<^I^a0B)vcubk_Kb$SylP{@nD%T= z_72uBkCsI-xy`7kYu`l`;h&+h`=)Unn(uV6!lTbx{)n`E@m{$nwJP}4u5yRCvNpii z9>{1dv+7dJjx`!_8$Nfk+yC(6j>x@cF(XdEt3(BPr3?2$G@=eOYmQmjow*iZt8n{# zJ7xEQyw|YpOt3hL^eGOR*<+Q`Lf%vT zl5zq=jn>*#ebDL0%XRnH0qs}9H-ybvL4CcOTe0|cjj|nP +#include +#include "enemy.h" + +void initEnemy(enemy *e) +{ + e->img = IMG_Load("../assets/img/enemyrun.png"); + if (e->img == NULL) + { + printf("Error loading enemy image: %s\n", SDL_GetError()); + } + e->direction = 1; + e->speed = 2; + e->max_steps = 30; + + e->img_size.x = 96; // (width of img / sprite size) :576/6 =96 + e->img_size.y = 96; // image height + e->img_size.w = (e->img->w) / 6; + e->img_size.h = e->img->h; + e->img_pos.x = 1280 / 2; + e->img_pos.y = 720 / 2; +} + +void drawEnemy(SDL_Surface *screen, enemy e) +{ + SDL_BlitSurface(e.img, &(e.img_pos), screen, &(e.img_pos)); +} + +void animateEnemy(enemy *e) +{ + static int frame = 0; // static variable to track current frame + e->img_pos.x = frame * e->img_size.w; // set x position based on frame + + frame++; // increment frame counter + if (frame >= 6) + { // if we've reached the end of the sprite sheet, wrap around + frame = 0; + } +} + +void moveEnemy(enemy *e, float speed) +{ + if (e->direction == 1) + { // move right + e->img_pos.x += (int)(speed + e->speed); + if (e->img_pos.x >= e->max_steps) + { + e->img_pos.x = e->max_steps; + e->direction = 2; // change direction to left + } + } + else + { // move left + e->img_pos.x -= (int)(speed + e->speed); + if (e->img_pos.x <= 0) + { + e->img_pos.x = 0; + e->direction = 1; // change direction to right + } + } +} diff --git a/src/main.c b/src/main.c index 7921c55..4689cc1 100644 --- a/src/main.c +++ b/src/main.c @@ -16,6 +16,7 @@ #include "../include/text.h" //text header #include "../include/stars.h" //stars header #include "../include/settings.h" //settings header +#include "../include/enemy.h" // screen SDL_Surface *screen; @@ -65,6 +66,9 @@ Mix_Chunk *clickFX; // text text author; +// characters +enemy enemy1; + // logic SDL_Event event; int loop = 1; // game loop @@ -141,6 +145,9 @@ int main() // loading text textLoad(&author); + // loading enemy + initEnemy(&enemy1); + //* loading settings menu images //? maybe add background instead of solid color for settings menu @@ -440,6 +447,10 @@ int main() imageDraw_lvl1(screen, lvl1); imageDraw_backbutton(screen, backButton); //! used twice, but it's ok for now (universal fucntion) + animateEnemy(&enemy1); + moveEnemy(&enemy1, 15); + drawEnemy(screen, enemy1); + while (SDL_PollEvent(&event)) { switch (event.type) From 4dfc69595a7991143b5751f43e145690dc6e5858 Mon Sep 17 00:00:00 2001 From: TheLime03 Date: Wed, 8 Mar 2023 13:46:28 +0100 Subject: [PATCH 2/6] +constants optimization no more double define wornings --- include/constants.h | 17 +++++++++++++++++ include/menu.h | 5 ----- src/enemy.c | 7 ++++--- src/main.c | 10 ++-------- src/menu.c | 22 ++++++++++------------ 5 files changed, 33 insertions(+), 28 deletions(-) create mode 100644 include/constants.h diff --git a/include/constants.h b/include/constants.h new file mode 100644 index 0000000..26dbc4c --- /dev/null +++ b/include/constants.h @@ -0,0 +1,17 @@ +#ifndef CONSTANTS_H +#define CONSTANTS_H + +//*screen size +#define SCREEN_W 1280 +#define SCREEN_H 720 + +//*stars stuff +#define STARS_COUNT 100 // number of stars //? need locking +#define STARS_LAYERS 4 // number of stars variations +#define DELTA_TIME 16 // 1000ms / 60fps = 16.6666 + +//*main menu buttons stuff +#define BUTTON_SPACING 14 // spacing between the buttons (px) //! LOCKED +#define INTIAL_BUTTON_Y 325 // initial button y position (px) //!LOCKED + +#endif \ No newline at end of file diff --git a/include/menu.h b/include/menu.h index e33e43a..bd2bab7 100644 --- a/include/menu.h +++ b/include/menu.h @@ -1,9 +1,6 @@ #ifndef MENU_H #define MENU_H - -#define SCREEN_W 1280 -#define SCREEN_H 720 // screen height and width typedef struct { @@ -46,7 +43,6 @@ void imageDrawClicked_playbutton(SDL_Surface *screen, image img); void imageDrawClicked_settingsbutton(SDL_Surface *screen, image img); void imageDrawClicked_quitbutton(SDL_Surface *screen, image img); - void imageDrawHovered_playbutton(SDL_Surface *screen, image img); void imageDrawHovered_settingsbutton(SDL_Surface *screen, image img); void imageDrawHovered_quitbutton(SDL_Surface *screen, image img); @@ -55,5 +51,4 @@ void imageDrawHovered_quitbutton(SDL_Surface *screen, image img); //**UNIVERSAL FUNCTION**// // free buttons - #endif diff --git a/src/enemy.c b/src/enemy.c index dba4570..8013170 100644 --- a/src/enemy.c +++ b/src/enemy.c @@ -1,5 +1,6 @@ #include #include +#include "constants.h" #include "enemy.h" void initEnemy(enemy *e) @@ -10,15 +11,15 @@ void initEnemy(enemy *e) printf("Error loading enemy image: %s\n", SDL_GetError()); } e->direction = 1; - e->speed = 2; + e->speed = 1; e->max_steps = 30; e->img_size.x = 96; // (width of img / sprite size) :576/6 =96 e->img_size.y = 96; // image height e->img_size.w = (e->img->w) / 6; e->img_size.h = e->img->h; - e->img_pos.x = 1280 / 2; - e->img_pos.y = 720 / 2; + e->img_pos.x = SCREEN_W / 2; + e->img_pos.y = SCREEN_H / 2; } void drawEnemy(SDL_Surface *screen, enemy e) diff --git a/src/main.c b/src/main.c index 4689cc1..6319704 100644 --- a/src/main.c +++ b/src/main.c @@ -3,6 +3,7 @@ #include #include #include +#include "constants.h" // for constants #include #include //for loading images @@ -10,7 +11,6 @@ #include //for loading sounds // including the headers - #include "../include/menu.h" //menu header #include "../include/music.h" //music header #include "../include/text.h" //text header @@ -20,12 +20,6 @@ // screen SDL_Surface *screen; -#define SCREEN_W 1280 -#define SCREEN_H 720 // screen height and width - -#define STARS_COUNT 100 // number of stars //! need locking -#define STARS_LAYERS 4 // number of stars variations -#define DELTA_TIME 16 // 1000ms / 60fps = 16.6666 //* regular -> hovered -> clicked // images (_C for clicked) (_H for hovered) @@ -448,7 +442,7 @@ int main() imageDraw_backbutton(screen, backButton); //! used twice, but it's ok for now (universal fucntion) animateEnemy(&enemy1); - moveEnemy(&enemy1, 15); + moveEnemy(&enemy1, 1); drawEnemy(screen, enemy1); while (SDL_PollEvent(&event)) diff --git a/src/menu.c b/src/menu.c index 1e034d1..e15ec57 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1,9 +1,7 @@ #include #include #include "../include/menu.h" - -spacing = 14; // spacing between the buttons (px) -initial_y = 325; // intitial y pos //!LOCKED +#include "constants.h" // load the images void imageLoad_background(image *img) @@ -54,7 +52,7 @@ void imageLoad_playbutton(image *img) img->img_size.w = img->img->w; img->img_size.h = img->img->h; img->img_pos.x = ((SCREEN_W / 2) - (img->img_size.w / 2)); - img->img_pos.y = initial_y; + img->img_pos.y = INTIAL_BUTTON_Y; } void imageLoad_settingsbutton(image *img) @@ -72,7 +70,7 @@ void imageLoad_settingsbutton(image *img) img->img_size.w = img->img->w; img->img_size.h = img->img->h; img->img_pos.x = ((SCREEN_W / 2) - (img->img_size.w / 2)); - img->img_pos.y = initial_y + img->img_size.h + spacing; + img->img_pos.y = INTIAL_BUTTON_Y + img->img_size.h + BUTTON_SPACING; } void imageLoad_quitbutton(image *img) @@ -89,7 +87,7 @@ void imageLoad_quitbutton(image *img) img->img_size.w = img->img->w; img->img_size.h = img->img->h; img->img_pos.x = ((SCREEN_W / 2) - (img->img_size.w / 2)); - img->img_pos.y = initial_y + img->img_size.h * 2 + spacing * 2; + img->img_pos.y = INTIAL_BUTTON_Y + img->img_size.h * 2 + BUTTON_SPACING * 2; } // load the Clicked images @@ -107,7 +105,7 @@ void imageLoadClicked_playbutton(image *img) img->img_size.w = img->img->w; img->img_size.h = img->img->h; img->img_pos.x = ((SCREEN_W / 2) - (img->img_size.w / 2)); - img->img_pos.y = initial_y; + img->img_pos.y = INTIAL_BUTTON_Y; } void imageLoadClicked_settingsbutton(image *img) @@ -124,7 +122,7 @@ void imageLoadClicked_settingsbutton(image *img) img->img_size.w = img->img->w; img->img_size.h = img->img->h; img->img_pos.x = ((SCREEN_W / 2) - (img->img_size.w / 2)); - img->img_pos.y = initial_y + img->img_size.h + spacing; + img->img_pos.y = INTIAL_BUTTON_Y + img->img_size.h + BUTTON_SPACING; } void imageLoadClicked_quitbutton(image *img) @@ -141,7 +139,7 @@ void imageLoadClicked_quitbutton(image *img) img->img_size.w = img->img->w; img->img_size.h = img->img->h; img->img_pos.x = ((SCREEN_W / 2) - (img->img_size.w / 2)); - img->img_pos.y = initial_y + img->img_size.h * 2 + spacing * 2; + img->img_pos.y = INTIAL_BUTTON_Y + img->img_size.h * 2 + BUTTON_SPACING * 2; } // load the hovered images @@ -159,7 +157,7 @@ void imageLoadHovered_playbutton(image *img) img->img_size.w = img->img->w; img->img_size.h = img->img->h; img->img_pos.x = ((SCREEN_W / 2) - (img->img_size.w / 2)); - img->img_pos.y = initial_y; + img->img_pos.y = INTIAL_BUTTON_Y; } void imageLoadHovered_settingsbutton(image *img) @@ -176,7 +174,7 @@ void imageLoadHovered_settingsbutton(image *img) img->img_size.w = img->img->w; img->img_size.h = img->img->h; img->img_pos.x = ((SCREEN_W / 2) - (img->img_size.w / 2)); - img->img_pos.y = initial_y + img->img_size.h + spacing; + img->img_pos.y = INTIAL_BUTTON_Y + img->img_size.h + BUTTON_SPACING; } void imageLoadHovered_quitbutton(image *img) @@ -193,7 +191,7 @@ void imageLoadHovered_quitbutton(image *img) img->img_size.w = img->img->w; img->img_size.h = img->img->h; img->img_pos.x = ((SCREEN_W / 2) - (img->img_size.w / 2)); - img->img_pos.y = initial_y + img->img_size.h * 2 + spacing * 2; + img->img_pos.y = INTIAL_BUTTON_Y + img->img_size.h * 2 + BUTTON_SPACING * 2; } // draw the images From 79eb2506be73d6272148a6ad5ff071803f9f1e68 Mon Sep 17 00:00:00 2001 From: TheLime03 Date: Wed, 8 Mar 2023 19:12:35 +0100 Subject: [PATCH 3/6] working NPC --- build/makefile | 4 +++- src/enemy.c | 29 ++++++++++++++++++----------- src/main.c | 2 +- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/build/makefile b/build/makefile index 36bb613..d8fed24 100644 --- a/build/makefile +++ b/build/makefile @@ -2,11 +2,13 @@ CC = gcc CFLAGS = -Wall -I../include LDFLAGS = -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf OBJS = main.o menu.o music.o text.o stars.o settings.o start.o enemy.o + game: $(OBJS) $(CC) $(OBJS) $(LDFLAGS) -o game + %.o: ../src/%.c $(CC) $(CFLAGS) -c $< .PHONY: clean clean: - rm -f $(OBJS) game \ No newline at end of file + rm -f $(OBJS) game diff --git a/src/enemy.c b/src/enemy.c index 8013170..5ac8608 100644 --- a/src/enemy.c +++ b/src/enemy.c @@ -14,28 +14,35 @@ void initEnemy(enemy *e) e->speed = 1; e->max_steps = 30; - e->img_size.x = 96; // (width of img / sprite size) :576/6 =96 - e->img_size.y = 96; // image height - e->img_size.w = (e->img->w) / 6; - e->img_size.h = e->img->h; + e->img_size.x = 0; + e->img_size.y = 0; + e->img_size.w = (e->img->w) / 6; // (width of img / sprite size) :576/6 =96px + e->img_size.h = e->img->h; // image height = 96px e->img_pos.x = SCREEN_W / 2; e->img_pos.y = SCREEN_H / 2; } void drawEnemy(SDL_Surface *screen, enemy e) { - SDL_BlitSurface(e.img, &(e.img_pos), screen, &(e.img_pos)); + SDL_BlitSurface(e.img, &(e.img_size), screen, &(e.img_pos)); } void animateEnemy(enemy *e) { - static int frame = 0; // static variable to track current frame - e->img_pos.x = frame * e->img_size.w; // set x position based on frame + static int frame = 0; // static variable to track current frame + e->img_size.x = frame * e->img_size.w; // set x position based on frame - frame++; // increment frame counter - if (frame >= 6) - { // if we've reached the end of the sprite sheet, wrap around - frame = 0; + Uint32 current_time = SDL_GetTicks(); + static Uint32 last_time = 0; + Uint32 delta_time = current_time - last_time; + if (delta_time >= 100) + { // add a delay of 100 milliseconds between frames + frame++; // increment frame counter + if (frame >= 6) + { // if we've reached the end of the sprite sheet, wrap around + frame = 0; + } + last_time = current_time; } } diff --git a/src/main.c b/src/main.c index 6319704..3ff0d23 100644 --- a/src/main.c +++ b/src/main.c @@ -441,9 +441,9 @@ int main() imageDraw_lvl1(screen, lvl1); imageDraw_backbutton(screen, backButton); //! used twice, but it's ok for now (universal fucntion) + drawEnemy(screen, enemy1); animateEnemy(&enemy1); moveEnemy(&enemy1, 1); - drawEnemy(screen, enemy1); while (SDL_PollEvent(&event)) { From e1502f45776614afef20c4e34d7fd38f233e3814 Mon Sep 17 00:00:00 2001 From: Aymen Hmani <47940043+TheLime1@users.noreply.github.com> Date: Wed, 8 Mar 2023 19:41:26 +0100 Subject: [PATCH 4/6] +new sprite sheet for enemy --- assets/img/enemyrun.png | Bin 21349 -> 13268 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/img/enemyrun.png b/assets/img/enemyrun.png index ed3eb23a717e1501f611ffc56476103e9fd752f0..ff5767e766e31cd9e87358aefbcfad01d6f310a5 100644 GIT binary patch literal 13268 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 literal 21349 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 Date: Thu, 9 Mar 2023 00:11:45 +0100 Subject: [PATCH 5/6] +3 animations --- doc/enemxy.png | Bin 0 -> 75546 bytes include/enemy.h | 19 +++++++------ src/enemy.c | 73 ++++++++++++++++++++++++++++++++++++------------ src/main.c | 3 +- 4 files changed, 67 insertions(+), 28 deletions(-) create mode 100644 doc/enemxy.png diff --git a/doc/enemxy.png b/doc/enemxy.png new file mode 100644 index 0000000000000000000000000000000000000000..1984f0f39265758893fa05a037ba90074654de89 GIT binary patch literal 75546 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 Z!6y}%T%Kwl@a|wXO;tUW4@!2C{{vcfVMPD{ literal 0 HcmV?d00001 diff --git a/include/enemy.h b/include/enemy.h index e5255e8..7e84953 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -3,18 +3,21 @@ typedef struct { - SDL_Rect img_pos; - SDL_Rect img_size; - SDL_Surface *img; - int direction; // 0 for idle, 1 for right , 2 for left - float speed; - int max_steps; + SDL_Rect img_pos; // position of the sprite on the screen + SDL_Rect img_size; // size of the sprite + SDL_Surface *img; // pointer to the sprite image + int direction; // 0 for idle, 1 for right , 2 for left + float speed; // steps per frame + int max_steps; // maximum number of steps before changing direction + int idle_time; // time when the enemy started idling + int x; // position of the enemy in the grid (screen coordinates) + int y; // position of the enemy in the grid (screen coordinates) } enemy; void initEnemy(enemy *e); void drawEnemy(SDL_Surface *screen, enemy e); -void animateEnemy(enemy *e); -void moveEnemy(enemy *e, float speed); +void animateEnemy(enemy *e, int direction); +void moveEnemy(enemy *e); //! added new parameter dont forget // TODO : add collision detection #endif \ No newline at end of file diff --git a/src/enemy.c b/src/enemy.c index 5ac8608..bf0e671 100644 --- a/src/enemy.c +++ b/src/enemy.c @@ -12,14 +12,17 @@ void initEnemy(enemy *e) } e->direction = 1; e->speed = 1; - e->max_steps = 30; + e->max_steps = 100; + e->idle_time = 2000; + e->x = (SCREEN_W / 2 - (e->img->w / 6) - 96 / 2) + 100; // screen width - (width of img / sprite size) - (width of sprite / 2) + e->y = (SCREEN_H / 2 - (e->img->h / 3) - 96 / 2) + 100; // screen height - (height of img / sprite size) - (height of sprite / 2) e->img_size.x = 0; e->img_size.y = 0; - e->img_size.w = (e->img->w) / 6; // (width of img / sprite size) :576/6 =96px - e->img_size.h = e->img->h; // image height = 96px - e->img_pos.x = SCREEN_W / 2; - e->img_pos.y = SCREEN_H / 2; + e->img_size.w = (e->img->w) / 6; // (width of img / sprite frames) :576/6 =96px + e->img_size.h = (e->img->h) / 3; // (height of img / sprite frames) := 288/3= 96px + e->img_pos.x = e->x; + e->img_pos.y = e->y; } void drawEnemy(SDL_Surface *screen, enemy e) @@ -27,10 +30,24 @@ void drawEnemy(SDL_Surface *screen, enemy e) SDL_BlitSurface(e.img, &(e.img_size), screen, &(e.img_pos)); } -void animateEnemy(enemy *e) +void animateEnemy(enemy *e, int direction) //! added new parameter dont forget { - static int frame = 0; // static variable to track current frame + static int frame = 0; // static variable to track current frame + int row = 0; + if (direction == 1) + { + row = 0; + } + else if (direction == 2) + { + row = 1; + } + else if (direction == 0) + { + row = 2; + } e->img_size.x = frame * e->img_size.w; // set x position based on frame + e->img_size.y = row * e->img_size.h; // set y position based on direction Uint32 current_time = SDL_GetTicks(); static Uint32 last_time = 0; @@ -46,24 +63,44 @@ void animateEnemy(enemy *e) } } -void moveEnemy(enemy *e, float speed) +void moveEnemy(enemy *e) { if (e->direction == 1) { // move right - e->img_pos.x += (int)(speed + e->speed); - if (e->img_pos.x >= e->max_steps) + animateEnemy(e, 1); + e->img_pos.x += e->speed; + if (e->img_pos.x >= e->x + e->max_steps) { - e->img_pos.x = e->max_steps; - e->direction = 2; // change direction to left + e->img_pos.x = e->x + e->max_steps; + e->direction = 0; // change direction to idle + e->idle_time = SDL_GetTicks(); // start idle time } } - else + else if (e->direction == 2) { // move left - e->img_pos.x -= (int)(speed + e->speed); - if (e->img_pos.x <= 0) + animateEnemy(e, 2); + e->img_pos.x -= e->speed; + if (e->img_pos.x <= e->x) { - e->img_pos.x = 0; - e->direction = 1; // change direction to right + e->img_pos.x = e->x; + e->direction = 0; // change direction to idle + e->idle_time = SDL_GetTicks(); // start idle time } } -} + else if (e->direction == 0) + { // idle + animateEnemy(e, 0); + Uint32 current_time = SDL_GetTicks(); + if (current_time - e->idle_time >= 2000) + { // check if idle time is over + if (e->img_pos.x == e->x) + { + e->direction = 1; // change direction to right + } + else if (e->img_pos.x == e->x + e->max_steps) + { + e->direction = 2; // change direction to left + } + } + } +} \ No newline at end of file diff --git a/src/main.c b/src/main.c index 3ff0d23..43d7674 100644 --- a/src/main.c +++ b/src/main.c @@ -442,8 +442,7 @@ int main() imageDraw_backbutton(screen, backButton); //! used twice, but it's ok for now (universal fucntion) drawEnemy(screen, enemy1); - animateEnemy(&enemy1); - moveEnemy(&enemy1, 1); + moveEnemy(&enemy1); //* moveEnemy will call animateEnemy while (SDL_PollEvent(&event)) { From 932c66a95e13db646d2f7c1e169b7d8895615fae Mon Sep 17 00:00:00 2001 From: Aymen Hmani <47940043+TheLime1@users.noreply.github.com> Date: Mon, 13 Mar 2023 08:55:44 +0100 Subject: [PATCH 6/6] +collision added test enemy for collision --- include/enemy.h | 9 +++- src/enemy.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++- src/main.c | 10 ++++ 3 files changed, 137 insertions(+), 2 deletions(-) diff --git a/include/enemy.h b/include/enemy.h index 7e84953..4928bc4 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -18,6 +18,13 @@ void initEnemy(enemy *e); void drawEnemy(SDL_Surface *screen, enemy e); void animateEnemy(enemy *e, int direction); void moveEnemy(enemy *e); //! added new parameter dont forget -// TODO : add collision detection +int collisionBB(SDL_Rect player, SDL_Rect enemy); + +//**************************************************** + +void initEnemytest(enemy *e); +void drawEnemytest(SDL_Surface *screen, enemy e); +void animateEnemytest(enemy *e, int direction); +void moveEnemytest(enemy *e); #endif \ No newline at end of file diff --git a/src/enemy.c b/src/enemy.c index bf0e671..e13013e 100644 --- a/src/enemy.c +++ b/src/enemy.c @@ -103,4 +103,122 @@ void moveEnemy(enemy *e) } } } -} \ No newline at end of file +} + +int collisionBB(SDL_Rect player, SDL_Rect enemy) +{ + int collision = 0; + if ((player.x + player.w < enemy.x) || (player.x > enemy.x + enemy.w) || (player.y + player.h < enemy.y) || (player.y > enemy.y + enemy.h)) + { + collision = 0; // no collision + } + else + { + collision = 1; // collision + } + return collision; +} + +//******************************* + +void initEnemytest(enemy *e) +{ + e->img = IMG_Load("../assets/img/enemyrun.png"); + if (e->img == NULL) + { + printf("Error loading enemy image: %s\n", SDL_GetError()); + } + e->direction = 1; + e->speed = 1; + e->max_steps = 100; + e->idle_time = 2000; + e->x = (SCREEN_W / 2 - (e->img->w / 6) - 96 / 2) + 200; // screen width - (width of img / sprite size) - (width of sprite / 2) + e->y = (SCREEN_H / 2 - (e->img->h / 3) - 96 / 2) + 100; // screen height - (height of img / sprite size) - (height of sprite / 2) + + e->img_size.x = 0; + e->img_size.y = 0; + e->img_size.w = (e->img->w) / 6; // (width of img / sprite frames) :576/6 =96px + e->img_size.h = (e->img->h) / 3; // (height of img / sprite frames) := 288/3= 96px + e->img_pos.x = e->x; + e->img_pos.y = e->y; +} + +void drawEnemytest(SDL_Surface *screen, enemy e) +{ + SDL_BlitSurface(e.img, &(e.img_size), screen, &(e.img_pos)); +} + +void animateEnemytest(enemy *e, int direction) //! added new parameter dont forget +{ + static int frame = 0; // static variable to track current frame + int row = 0; + if (direction == 1) + { + row = 0; + } + else if (direction == 2) + { + row = 1; + } + else if (direction == 0) + { + row = 2; + } + e->img_size.x = frame * e->img_size.w; // set x position based on frame + e->img_size.y = row * e->img_size.h; // set y position based on direction + + Uint32 current_time = SDL_GetTicks(); + static Uint32 last_time = 0; + Uint32 delta_time = current_time - last_time; + if (delta_time >= 100) + { // add a delay of 100 milliseconds between frames + frame++; // increment frame counter + if (frame >= 6) + { // if we've reached the end of the sprite sheet, wrap around + frame = 0; + } + last_time = current_time; + } +} + +void moveEnemytest(enemy *e) +{ + if (e->direction == 2) + { // move right + animateEnemy(e, 1); + e->img_pos.x += e->speed; + if (e->img_pos.x >= e->x + e->max_steps) + { + e->img_pos.x = e->x + e->max_steps; + e->direction = 0; // change direction to idle + e->idle_time = SDL_GetTicks(); // start idle time + } + } + else if (e->direction == 1) + { // move left + animateEnemy(e, 2); + e->img_pos.x -= e->speed; + if (e->img_pos.x <= e->x) + { + e->img_pos.x = e->x; + e->direction = 0; // change direction to idle + e->idle_time = SDL_GetTicks(); // start idle time + } + } + else if (e->direction == 0) + { // idle + animateEnemy(e, 0); + Uint32 current_time = SDL_GetTicks(); + if (current_time - e->idle_time >= 2000) + { // check if idle time is over + if (e->img_pos.x == e->x) + { + e->direction = 1; // change direction to right + } + else if (e->img_pos.x == e->x + e->max_steps) + { + e->direction = 2; // change direction to left + } + } + } +} diff --git a/src/main.c b/src/main.c index 43d7674..9cddc51 100644 --- a/src/main.c +++ b/src/main.c @@ -62,6 +62,7 @@ text author; // characters enemy enemy1; +enemy enemy2; // logic SDL_Event event; @@ -141,6 +142,7 @@ int main() // loading enemy initEnemy(&enemy1); + initEnemytest(&enemy2); //* loading settings menu images //? maybe add background instead of solid color for settings menu @@ -443,6 +445,14 @@ int main() drawEnemy(screen, enemy1); moveEnemy(&enemy1); //* moveEnemy will call animateEnemy + //************ + drawEnemytest(screen, enemy2); + moveEnemytest(&enemy2); //* moveEnemy will call animateEnemy + //************ + if (collisionBB(enemy1.img_pos, enemy2.img_pos) == 1) + { + printf(" collision detected \t"); + } while (SDL_PollEvent(&event)) {