diff --git a/travail_de_groupe/jeu_appren_par_renfo/map.txt b/travail_de_groupe/jeu_appren_par_renfo/map.txt index d6e01f65207317b588d271d05e59c8c595a4dd00..684beb70d028a51a8a1368bd7bcc9e7a8c71e1b3 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/map.txt +++ b/travail_de_groupe/jeu_appren_par_renfo/map.txt @@ -6,8 +6,8 @@ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/gest_event.c b/travail_de_groupe/jeu_appren_par_renfo/src/gest_event.c index aefb6558ba9509d558cb62a57d485f09e56fa6f2..8072c078c153854cbe879c71f25a75890e37d475 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/gest_event.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/gest_event.c @@ -30,11 +30,51 @@ void gestMenu(){ } + +void gestGame(){ + SDL_Event event; + while (SDL_PollEvent(&event)){ + switch(event.type) + { + case SDL_QUIT: + running = 0; + break; + + case SDL_MOUSEMOTION: + if (event.motion.xrel > 0){ + player.angle += 0.01; + if (player.angle > 2*pi) player.angle -= 2*pi; + } + else if (event.motion.xrel < 0){ + player.angle -= 0.01; + if (player.angle < 0) player.angle += 2*pi; + } + + case SDL_KEYUP: + switch (event.key.keysym.sym) + { + case SDLK_ESCAPE: + running = 0; + continue; + + default: + continue; + } + break; + + default: + continue; + } + } + SDL_Delay(5); +} + + void *EventLoop(void *arg){ while(running){ switch(game_state){ case MENU : gestMenu();break; - case GAME : gestMenu();break; + case GAME : gestGame();break; default:printf("game state fault");break; } } diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/main.c b/travail_de_groupe/jeu_appren_par_renfo/src/main.c index 7ca6b39f5741c10f6c1052e6074791e7a3f0f337..ac05036e66735a4cdcbe30b8ebc7ffcf21111139 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/main.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/main.c @@ -9,6 +9,7 @@ int main(){ game_state = GAME; readMapFromFile("map.txt"); printMap(); + initPlayer(); mainLoop(); diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/player.c b/travail_de_groupe/jeu_appren_par_renfo/src/player.c index a013abfb1568f7c768d80ccb94b1b49829be846d..e958ca130e77f7fbda6db924caf1bc1157eeec3a 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/player.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.c @@ -3,8 +3,8 @@ player_t player; void initPlayer(){ - player.x= 8*BLOCK_SIZE; - player.y= 8*BLOCK_SIZE; + player.x= 2*BLOCK_SIZE; + player.y= 2*BLOCK_SIZE; player.speed = 1; player.isMoving = 0; player.HPMax = 3; diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/render.c b/travail_de_groupe/jeu_appren_par_renfo/src/render.c index 5ec13d32ba89944c6b193276574e8aefe5039a26..0ff89b9f3deb46e62ba171a192d1d174c7dbec11 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/render.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.c @@ -10,11 +10,33 @@ SDL_Rect rect; SDL_Rect sky; SDL_Rect ground; -// ray casting variables -float htexture; -int r, mx, my, dof; -double rx, ry, xo, yo, distT; -double ra; +int ** rays; +int raysListLength = 0; + +void initRays(){ + int i; + rays = malloc(sizeof(int*) * NB_RAYS); + for (i = 0; i < NB_RAYS; i++){ + rays[i] = malloc(sizeof(int) * 2); + } +} + +void addRayToList(int x, int y){ + if (raysListLength < NB_RAYS){ + *rays[raysListLength] = x; + *(rays[raysListLength] + 1) = y; + raysListLength++; + } +} + +void resetRayList(){ + int i; + for (i = 0; i < NB_RAYS; i++){ + *rays[i] = 0; + *(rays[i] + 1) = 0; + } + raysListLength = 0; +} // end ray casting variables @@ -59,6 +81,12 @@ void endSDL(){ } void drawRays(int map[][MAP_WIDTH]){ + // ray casting variables + float htexture; + int r, mx, my, dof; + double rx, ry, xo, yo, distT; + double ra; + resetRayList(); ra = player.angle - DR * FOV_ANGLE/4; if (ra < 0) ra -= 2*pi; if (ra > 2*pi) ra -= 2*pi; @@ -87,13 +115,12 @@ void drawRays(int map[][MAP_WIDTH]){ while (dof < DOF){ mx = (int)rx>>6; my = (int)ry>>6; - if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT){ - if (map[my][mx] == 1){ - hx = rx; - hy = ry; - disH = sqrt((rx-player.x)*(rx-player.x) + (ry-player.y)*(ry-player.y)); - dof = DOF; - } + if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT && map[my][mx] == 1){ + + hx = rx; + hy = ry; + disH = sqrt((rx-player.x)*(rx-player.x) + (ry-player.y)*(ry-player.y)); + dof = DOF; } else { rx += xo; @@ -118,16 +145,19 @@ void drawRays(int map[][MAP_WIDTH]){ xo = BLOCK_SIZE; yo = -xo*nTan; } + if (ra == pi || ra == 0){ + ry = player.y; + rx = player.x; + dof = DOF; + } while (dof < DOF){ mx = (int)rx>>6; my = (int)ry>>6; - if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT){ - if (map[my][mx] == 1){ - vx = rx; - vy = ry; - disV = sqrt((rx-player.x)*(rx-player.x) + (ry-player.y)*(ry-player.y)); - dof = DOF; - } + if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT && map[my][mx] == 1){ + vx = rx; + vy = ry; + disV = sqrt((rx-player.x)*(rx-player.x) + (ry-player.y)*(ry-player.y)); + dof = DOF; } else { rx += xo; @@ -157,9 +187,9 @@ void drawRays(int map[][MAP_WIDTH]){ float lineH = (screenDimension.h/2)/distT; rect.x = r; - rect.y = lineH; + rect.y = screenDimension.h/2 - lineH; rect.w = 1; - rect.h = lineH; + rect.h = (2 * screenDimension.w * lineH/200); if (disH < disV) { SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); @@ -168,6 +198,10 @@ void drawRays(int map[][MAP_WIDTH]){ SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); } SDL_RenderFillRect(renderer, &rect); + + // draw the ray in the minimap + addRayToList(rx, ry); + } } @@ -184,18 +218,30 @@ void drawMap2D(int map[][MAP_WIDTH]){ SDL_RenderFillRect(renderer, &rect); } else { - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); - SDL_RenderFillRect(renderer, &rect); + if (i == player.x/BLOCK_SIZE && j == player.y/BLOCK_SIZE){ + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + SDL_RenderFillRect(renderer, &rect); + } + else { + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderFillRect(renderer, &rect); + } } rect.x += CELL_SIZE; } rect.y += CELL_SIZE; rect.x = 0; } + SDL_SetRenderDrawColor(renderer, 255, 255, 0, 255); + for (i = 0; i < NB_RAYS; i++){ + SDL_RenderDrawLine(renderer, player.x * CELL_SIZE / BLOCK_SIZE , player.y * CELL_SIZE / BLOCK_SIZE, rays[i][0] * CELL_SIZE / BLOCK_SIZE, rays[i][1] * CELL_SIZE / BLOCK_SIZE); + } + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); } void drawGame(){ SDL_RenderClear(renderer); + drawRays(map); drawMap2D(map); SDL_RenderPresent(renderer); } @@ -204,6 +250,7 @@ void drawGame(){ void mainLoop(){ createWindow(); + initRays(); unsigned int a = SDL_GetTicks(); unsigned int b = SDL_GetTicks();