diff --git a/cmake-build-debug/CMakeFiles/nhf.dir/C.includecache b/cmake-build-debug/CMakeFiles/nhf.dir/C.includecache index 6c406a360f832d31c7b4cb1dd6c264e8a86eb5f1..658cf5a07ba427d42d04adb82e7057d98d2309fa 100644 --- a/cmake-build-debug/CMakeFiles/nhf.dir/C.includecache +++ b/cmake-build-debug/CMakeFiles/nhf.dir/C.includecache @@ -6,20 +6,6 @@ #IncludeRegexTransform: -/home/blint/projects/nhf/main.c -view.h -/home/blint/projects/nhf/view.h -move.h -/home/blint/projects/nhf/move.h -SDL2/SDL_image.h -- -SDL2/SDL2_gfxPrimitives.h -- -stdbool.h -- -time.h -- - /home/blint/projects/nhf/move.c move.h /home/blint/projects/nhf/move.h diff --git a/cmake-build-debug/CMakeFiles/nhf.dir/main.c.o b/cmake-build-debug/CMakeFiles/nhf.dir/main.c.o index 9aa1369685dab0f9b7f77db2f76d008563bf353a..8b52a65b93f44a3a850405dd0cfac82e5b8ee818 100644 Binary files a/cmake-build-debug/CMakeFiles/nhf.dir/main.c.o and b/cmake-build-debug/CMakeFiles/nhf.dir/main.c.o differ diff --git a/cmake-build-debug/CMakeFiles/nhf.dir/move.c.o b/cmake-build-debug/CMakeFiles/nhf.dir/move.c.o index 6f37d5fcef15346ac4c9566d5257e469bd7dd0a8..69dc93454eeda6d5e55f9930ef2af70f4e8ad2fb 100644 Binary files a/cmake-build-debug/CMakeFiles/nhf.dir/move.c.o and b/cmake-build-debug/CMakeFiles/nhf.dir/move.c.o differ diff --git a/cmake-build-debug/CMakeFiles/nhf.dir/view.c.o b/cmake-build-debug/CMakeFiles/nhf.dir/view.c.o index bf77b6e2bf01e700c7d93ed91eec7a05583f5b12..3e4334d10c551c4746c56b253c2b36c329c92f4e 100644 Binary files a/cmake-build-debug/CMakeFiles/nhf.dir/view.c.o and b/cmake-build-debug/CMakeFiles/nhf.dir/view.c.o differ diff --git a/cmake-build-debug/nhf b/cmake-build-debug/nhf index 76f49be00cfdda8883bef1dd2b1d79c0f8a956b6..b8b7a15247bcbef475c63577413dff7991cdbf73 100755 Binary files a/cmake-build-debug/nhf and b/cmake-build-debug/nhf differ diff --git a/main.c b/main.c index 3e413bd3131de8de286074829b74688f122054d2..40de94224484a81e062cce1e27d30557ba62ec65 100644 --- a/main.c +++ b/main.c @@ -27,11 +27,11 @@ int main(int argc, char *argv[]) { srand(time(NULL)); - sdl_init(W, H, &window, &renderer); + sdl_init(W, H); - SDL_Texture *bagoly = kep_betolt(renderer, "infoc.png"); + SDL_Texture *bagoly = kep_betolt("infoc.png"); - SDL_TimerID timer_id = SDL_AddTimer(1000/120, idozit, NULL); + SDL_TimerID timer_id = SDL_AddTimer(1000/240, idozit, NULL); SDL_RenderPresent(renderer); @@ -40,11 +40,11 @@ int main(int argc, char *argv[]) { bool reset = false; int elozo_x = 0; - int elozo_y = 550 - owl; + int elozo_y = W - 2*owl; Palyaelem *elem = NULL; - elem = palya_gen(elem, 20); + elem = palya_gen(elem, platform,50); while (!quit) { @@ -53,7 +53,7 @@ int main(int argc, char *argv[]) { SDL_WaitEvent(&ev); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); - palyakirajzol(renderer, elem); + palyakirajzol(elem); keywatcher(ev, bagoly, elozo_x, elozo_y, &quit, &moving); diff --git a/move.c b/move.c index b16a7082faca14be07ddb0690c64df2ec7763f1e..e0637c3da5bbfb292e1272306229a22b524d88d4 100644 --- a/move.c +++ b/move.c @@ -8,21 +8,13 @@ #include <stdbool.h> -int v = 5; -int vj = 25; -int vx = 0, vy = 0; -int t = 0; -int ipszilon = 0; -double g = 5; //saját gravitáció, mivel a 9.82 túl nehéz lenne... :'( +double v = 2; +double vj = 10; +double vx = 0, vy = 0; +double g = 0.3; //saját gravitáció, mivel a 9.82 túl nehéz lenne... :'( int jump_t = 0; -bool jump = false; -int VPos(int y0){ - int time = t/4; - return y0 - vj*time + ((int)g/2)*time*time; -} - static bool move(SDL_Event ev, int *x, const int *y) { @@ -45,9 +37,7 @@ static bool move(SDL_Event ev, int *x, const int *y) if (jump_t < 2) { - t = 0; - ipszilon = *y; - jump = true; + vy = -vj; } jump_t++; @@ -58,11 +48,13 @@ static bool move(SDL_Event ev, int *x, const int *y) switch (ev.key.keysym.sym) { case SDLK_a: + case SDLK_LEFT: if (vx < 0) vx = 0; break; case SDLK_d: + case SDLK_RIGHT: if (vx > 0) vx = 0; break; @@ -73,7 +65,7 @@ static bool move(SDL_Event ev, int *x, const int *y) case SDL_USEREVENT: - t++; + vy += g; break; default: @@ -90,9 +82,7 @@ void keywatcher(SDL_Event ev, SDL_Texture *kep, int x, int y, bool *quit, bool * case SDL_KEYUP: switch (ev.key.keysym.sym) { case SDLK_i: - kirajzol(renderer, kep, x, y); - t = 0; - ipszilon = 500; + kirajzol(kep, x, y); *moving = true; break; case SDLK_ESCAPE: @@ -122,38 +112,33 @@ Palyaelem *palyamozgat(Palyaelem *eleje, int x) void move_draw(SDL_Event ev, SDL_Texture *kep, int *x, int *y, Palyaelem *eleje) { if(move(ev, x, y)){ - *x += vx; - *y += vy; + *x += (int)vx; + *y += (int)vy; } + //platformokon ott marad Palyaelem *mozgo; for (mozgo = eleje; mozgo != NULL; mozgo = mozgo->kov) { - if ((*x <= mozgo->x && (*x + owl) > (mozgo->x) ) || (*x >= mozgo->x && (*x + owl) <= (mozgo->x + mozgo->hossz))) + if ((*x <= mozgo->x && (*x + owl) > (mozgo->x) ) || (*x >= mozgo->x && *x <= (mozgo->x + mozgo->hossz))) { - if ((*y + owl) <= mozgo->y + mozgo->magassag && (*y + owl) >= mozgo->y) + if ((*y + owl) <= mozgo->y + mozgo->magassag && (*y + owl) >= mozgo->y && vy>=0) { *y = mozgo->y - owl; - jump = false; + vy = 0; jump_t = 0; if (ev.key.keysym.sym == SDLK_w || ev.key.keysym.sym == SDLK_UP || ev.key.keysym.sym == SDLK_SPACE) { - jump = true; jump_t++; } } } } - if (jump) - { - *y = VPos(ipszilon); - } - jump = true; //talajszintnél lejjebb nem ugrik - if (*y >= (H -2*owl)) + if (*y >= (H - 2*owl)) { *y = H - 2*owl; jump_t = 0; @@ -162,19 +147,19 @@ void move_draw(SDL_Event ev, SDL_Texture *kep, int *x, int *y, Palyaelem *eleje) //pálya bal szélénél eltolja a koordinátákat - if (*x > (W - owl)) + if (*x > (W - 5*owl)) { - *x = W - owl; - palyamozgat(eleje, v); + *x = W - 5*owl; + palyamozgat(eleje, (int)v); } //pálya jobb szélénél tolja el a koordinátákat if (*x < 0) { *x = 0; - palyamozgat(eleje, -v); + palyamozgat(eleje, (int)-v); } - kirajzol(renderer, kep, *x, *y); + kirajzol(kep, *x, *y); } \ No newline at end of file diff --git a/move.h b/move.h index f956ebd5c7ce9ccd55672c66a09caa5a564e1825..abc1048f043d04e37a4a35e2b3bd53e869ceaf56 100644 --- a/move.h +++ b/move.h @@ -10,11 +10,10 @@ #include <stdbool.h> #include <math.h> -extern int v; -extern int vx; -extern int vy; +extern double v; +extern double vx; +extern double vy; extern double g; -extern double pi; //static void move(SDL_Event ev, int *x, int *y); diff --git a/view.c b/view.c index e66865aef508164868108b46225a35608f321200..f81e5716b023f75397d6b7a20f89636d00b23a02 100644 --- a/view.c +++ b/view.c @@ -15,28 +15,25 @@ int owl = 50; SDL_Window *window; SDL_Renderer *renderer; -void sdl_init(int szeles, int magas, SDL_Window **pwindow, SDL_Renderer **prenderer) { +void sdl_init(int szeles, int magas) { if (SDL_Init(SDL_INIT_EVERYTHING) < 0) { SDL_Log("Nem indithato az SDL: %s", SDL_GetError()); exit(1); } - SDL_Window *window = SDL_CreateWindow("InfoC Mario nhf", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, szeles, magas, 0); + window = SDL_CreateWindow("InfoC Mario nhf", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, szeles, magas, 0); if (window == NULL) { SDL_Log("Nem hozhato letre az ablak: %s", SDL_GetError()); exit(1); } - SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); if (renderer == NULL) { SDL_Log("Nem hozhato letre a megjelenito: %s", SDL_GetError()); exit(1); } SDL_RenderClear(renderer); - - *pwindow = window; - *prenderer = renderer; } -SDL_Texture *kep_betolt(SDL_Renderer *renderer, char *filename) +SDL_Texture *kep_betolt(char *filename) { SDL_Texture *kep = IMG_LoadTexture(renderer, filename); if (kep == NULL) @@ -48,14 +45,14 @@ SDL_Texture *kep_betolt(SDL_Renderer *renderer, char *filename) return kep; } -void kirajzol(SDL_Renderer *renderer, SDL_Texture *kep, int x, int y) { +void kirajzol(SDL_Texture *kep, int x, int y) { SDL_Rect src = {0, 0, 128, 128}; SDL_Rect dest = {x, y, owl, owl}; SDL_RenderCopy(renderer, kep, &src, &dest); } -Palyaelem *gen_elem(Palyaelem *elem) +Palyaelem *gen_elem(Palyaelem *elem, Type type) { Palyaelem *uj = (Palyaelem *) malloc(sizeof(Palyaelem)); uj->kov = NULL; @@ -66,6 +63,32 @@ Palyaelem *gen_elem(Palyaelem *elem) uj->x = (W/1/3); uj->y = (H - (3*owl)); uj->magassag = 20; + uj->type = type; + + switch (type){ + case ground: + { + uj->color.R = 101; + uj->color.G = 67; + uj->color.B = 33; + break; + } + case platform: + { + uj->color.R = 0; + uj->color.G = 255; + uj->color.B = 0; + break; + } + case item: + uj->color.R = 255; + uj->color.G = 0; + uj->color.B = 0; + break; + default: + break; + + } elem = uj; return elem; } @@ -74,17 +97,49 @@ Palyaelem *gen_elem(Palyaelem *elem) for (mozgo = elem; mozgo->kov != NULL; mozgo = mozgo->kov); mozgo->kov = uj; - uj->hossz = rand() % ((W / 2) + 1) + 100; - uj->x = rand() % (W - (mozgo->x + mozgo->hossz)) + (mozgo->x + mozgo->hossz + 2*owl); - uj->y = rand() % (mozgo->magassag + (4*owl)) + (mozgo->y - owl); + uj->hossz = rand() % (W / 3) + 2*owl; + + int xmin = mozgo->x + mozgo->hossz + owl; + int xmax = mozgo->x + mozgo->hossz + owl*3; + uj->x = rand() % (xmax - xmin) + xmin; + + int ymin = (mozgo->y - owl) < (H - 3*owl) ? (mozgo->y - owl) : (H - 3*owl); + int ymax = mozgo->magassag + (4*owl); + uj->y = rand() % (ymax - ymin) + ymin; if (uj->y >= (H - owl)) uj->y -= (3*owl); uj->magassag = 20; + uj->type = type; + + switch (type){ + case ground: + { + uj->color.R = 101; + uj->color.G = 67; + uj->color.B = 33; + break; + } + case platform: + { + uj->color.R = 0; + uj->color.G = 255; + uj->color.B = 0; + break; + } + case item: + uj->color.R = 255; + uj->color.G = 0; + uj->color.B = 0; + break; + default: + break; + + } return elem; } -void palyaelem_kirajzolo(Palyaelem *elem, SDL_Renderer *prenderer) +void palyaelem_kirajzolo(Palyaelem *elem) { SDL_Rect r; r.x = elem->x; @@ -92,29 +147,32 @@ void palyaelem_kirajzolo(Palyaelem *elem, SDL_Renderer *prenderer) r.w = elem->hossz; r.h = elem->magassag; - SDL_SetRenderDrawColor( renderer, 0, 255, 0, 255 ); - SDL_RenderFillRect( prenderer, &r ); + SDL_SetRenderDrawColor( renderer, elem->color.R, elem->color.G, elem->color.B, 255); + SDL_RenderFillRect(renderer, &r ); } -Palyaelem* palya_gen(Palyaelem *eleje, int hany_elem) +Palyaelem* palya_gen(Palyaelem *eleje, Type type, int hany_elem) { for (int i = 0; i < hany_elem; ++i) { - eleje = gen_elem(eleje); + eleje = gen_elem(eleje, type); } return eleje; } -void palyakirajzol(SDL_Renderer *prenderer, Palyaelem *elem) +void palyakirajzol(Palyaelem *elem) { Palyaelem alap; alap.x = 0; alap.y = 550; alap.hossz = 900; alap.magassag = 50; + alap.color.R = 101; + alap.color.G = 67; + alap.color.B = 33; - palyaelem_kirajzolo(&alap, prenderer); + palyaelem_kirajzolo(&alap); Palyaelem * mozgo; for (mozgo = elem; mozgo != NULL; mozgo = mozgo->kov) - palyaelem_kirajzolo(mozgo, prenderer); + palyaelem_kirajzolo(mozgo); } \ No newline at end of file diff --git a/view.h b/view.h index 6199da11ceeb64a524304a3f4e00f591085144e1..8ec68e8e706ad147ca37d36a437bdeff82609616 100644 --- a/view.h +++ b/view.h @@ -10,9 +10,19 @@ #include <stdlib.h> #include <stdio.h> +typedef enum{ + ground, + platform, + item +}Type; + typedef struct Palyaelem{ int x, y; int hossz, magassag; + struct { + int R, G, B; + } color; + Type type; struct Palyaelem *kov; }Palyaelem; @@ -23,18 +33,18 @@ extern int owl; extern SDL_Window *window; extern SDL_Renderer *renderer; -void sdl_init(int szeles, int magas, SDL_Window **pwindow, SDL_Renderer **prenderer); +void sdl_init(int szeles, int magas); -SDL_Texture *kep_betolt(SDL_Renderer *renderer, char *filename); +SDL_Texture *kep_betolt(char *filename); -void kirajzol(SDL_Renderer *renderer, SDL_Texture *kep, int x, int y); +void kirajzol(SDL_Texture *kep, int x, int y); -Palyaelem *gen_elem(Palyaelem *elem); +Palyaelem *gen_elem(Palyaelem *elem, Type type); -void palyaelem_kirajzolo(Palyaelem *elem, SDL_Renderer *prenderer); +void palyaelem_kirajzolo(Palyaelem *elem); -Palyaelem* palya_gen(Palyaelem *eleje, int hany_elem); +Palyaelem* palya_gen(Palyaelem *eleje, Type type, int hany_elem); -void palyakirajzol(SDL_Renderer *prenderer, Palyaelem *elem); +void palyakirajzol(Palyaelem *elem); #endif //NHF_VIEW_H \ No newline at end of file