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 ae9b39dcf3c477c9e5f1f16ee091715d18d470da..d8b9658623878b099f1d3e4a25c7c9fe92965991 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 @@ -93,7 +93,7 @@ void gestGame(){ default: - continue; + break; } case SDL_KEYDOWN: @@ -114,10 +114,13 @@ void gestGame(){ case SDLK_q: Keys[1] = 0; continue; + + default: + break; } default: - continue; + 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 01189fd475b3db8e7dd26bdf4a5ddeea764dc816..82eba25d7d18c55adee39cc74c1240fd551a7c18 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/main.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/main.c @@ -8,7 +8,7 @@ int main(){ running = 1; game_state = GAME; readMapFromFile("map.txt"); - printMap(); + //printMap(); initPlayer(); initKeys(); 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 5296dbc64f44966c1d67324279ea357389cb9ea0..b1d7c85e7fdcb3d9c67dd6554970146d71bbe38b 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/player.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.c @@ -2,9 +2,13 @@ player_t player; +player_t ennemy; + void initPlayer(){ player.x= 6*BLOCK_SIZE; player.y= 6*BLOCK_SIZE; + ennemy.x = 20 * BLOCK_SIZE; + ennemy.y = 15 * BLOCK_SIZE; player.speed = 1; player.isMoving = 0; player.HPMax = 3; @@ -22,7 +26,7 @@ void manageMovement(){ float newpos_x = (player.x + x_increment)/BLOCK_SIZE; float newpos_y = (player.y + y_increment)/BLOCK_SIZE; if (newpos_x >= 0 && newpos_x < MAP_WIDTH && newpos_y >= 0 && newpos_y < MAP_HEIGHT){ - if (map[(int)newpos_y][(int)newpos_x] == 0){ + if (map[(int)newpos_y][(int)newpos_x] != 1){ player.x += x_increment * MOVEMENT_SPEED; player.y += y_increment * MOVEMENT_SPEED; } diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/player.h b/travail_de_groupe/jeu_appren_par_renfo/src/player.h index 3bde8189e6edadf30b9b9d43eff6212de6ff2898..177507de7a7fe37c96b2f85d46513d15897b092d 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/player.h +++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.h @@ -26,6 +26,7 @@ typedef struct player{ } player_t; extern player_t player; +extern player_t ennemy; void initPlayer(); void managePlayer(); 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 6768e8e95bde263e2332a43c4dcb4d037ca71c5b..f9ab547472002568adfb9d11e466df85d5052ff3 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/render.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.c @@ -117,22 +117,17 @@ void drawRayColumn(float ra, float distT, int r, int isTransparent, int directio } else { - destRect.x += + 64 * (SDL_GetTicks()/400 % 4); + destRect.x += + 64 * (SDL_GetTicks()/200 % 4); if (direction){ SDL_RenderCopy(renderer, crowdTexture, &destRect, &rect); - //SDL_SetRenderDrawColor(renderer, 255 * (1 - isTransparent), 255, 0, 255 * (1 - isTransparent)); } else { SDL_RenderCopy(renderer, crowdTexture, &destRect, &rect); - //SDL_SetRenderDrawColor(renderer, 0, 255, 255, 255 * (1 - isTransparent)); } } - //SDL_RenderFillRect(renderer, &rect); - //SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); } - -void drawRays(int map[][MAP_WIDTH]){ +void castRays(int map[][MAP_WIDTH]){ // ray casting variables float htexture, htexture2; int r, mx, my, dof; @@ -146,7 +141,7 @@ void drawRays(int map[][MAP_WIDTH]){ if (ra > 2*pi) ra -= 2*pi; for (r = 0; r<NB_RAYS; r++){ // check horizontal rays - int foundTransparentWallH = 0; + //int foundTransparentWallH = 0; int foundSolidWallH = 0; dof = 0; float disH = 100000, disH2 = 100000, hx = player.x, hy = player.y , hx2 = player.x, hy2 = player.y; @@ -183,7 +178,7 @@ void drawRays(int map[][MAP_WIDTH]){ hx2 = rx; hy2 = ry; disH2 = sqrt((rx-player.x)*(rx-player.x) + (ry-player.y)*(ry-player.y)); - foundTransparentWallH = 1; + //foundTransparentWallH = 1; dof++; rx += xo; ry += yo; @@ -337,6 +332,34 @@ void drawRays(int map[][MAP_WIDTH]){ } } +void drawEnnemy(){ + float ennemyAngle = atan2(ennemy.y - player.y, ennemy.x - player.x); + if (ennemyAngle < 0) ennemyAngle += 2*pi; + if (ennemyAngle > 2*pi) ennemyAngle -= 2*pi; + float ennemyDistance = sqrt((ennemy.x - player.x)*(ennemy.x - player.x) + (ennemy.y - player.y)*(ennemy.y - player.y)) * BLOCK_SIZE; + float ennemyBaseWidth = BLOCK_SIZE; + float ennemyDistanceX = ennemyDistance * cos(ennemyAngle - player.angle) * BLOCK_SIZE; + float ennemyDistanceY = ennemyDistance * fabs(sin(ennemyAngle - player.angle)) * BLOCK_SIZE; + float scaledEnnemyWidth = ennemyBaseWidth / sqrt(3); + int ennemyWidth = 50; + int ennemyHeight = 200; + + printf("%f %f\n", ennemyAngle, player.angle - (FOV_ANGLE)/2 * DR); + + + if (ennemyAngle >= player.angle - (FOV_ANGLE)/2 * DR && ennemyAngle <= player.angle + (FOV_ANGLE)/2 * DR){ + rect.x = screenDimension.w/2 + (screenDimension.w * tan(ennemyAngle - player.angle)) * sqrt(3) * 0.5; + rect.y = (screenDimension.h/2 + player.angle) - MAP_WIDTH * ennemyDistance/200000; + rect.w = (ennemyWidth * screenDimension.w) / (ennemyDistance/BLOCK_SIZE); + rect.h = (ennemyHeight * screenDimension.h)/(ennemyDistance/BLOCK_SIZE); + + //printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h); + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + SDL_RenderFillRect(renderer, &rect); + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + } +} + void drawSkyAndGround(){ SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); SDL_RenderFillRect(renderer, NULL); @@ -357,31 +380,33 @@ void drawMap2D(int map[][MAP_WIDTH]){ rect.h = CELL_SIZE; rect.x = 0; rect.y = 0; + SDL_SetRenderDrawColor(renderer, 255, 255, 0, 255); + for (i = 0; i < raysListLength; 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); + } for (i = 0; i < MAP_HEIGHT; i++){ for (j = 0; j < MAP_WIDTH; j++){ - if (map[i][j] == 1){ + switch (map[i][j]) + { + case 1: SDL_SetRenderDrawColor(renderer, 5, 255, 255, 255); SDL_RenderFillRect(renderer, &rect); + break; + + case 2: + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 100); + SDL_RenderFillRect(renderer, &rect); + break; } - else { - 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); - } + if ((i == player.x/BLOCK_SIZE && j == player.y/BLOCK_SIZE) || (i == ennemy.x/BLOCK_SIZE && j == ennemy.y/BLOCK_SIZE)){ + SDL_SetRenderDrawColor(renderer, 255, 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 < raysListLength; 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); } @@ -407,9 +432,10 @@ void drawFPS(){ void drawGame(){ SDL_RenderClear(renderer); drawSkyAndGround(); - drawRays(map); + castRays(map); drawMap2D(map); drawFPS(); + drawEnnemy(); SDL_RenderPresent(renderer); }