diff --git a/travail_de_groupe/chef_oeuvre/Res/fire.png b/travail_de_groupe/chef_oeuvre/Res/fire.png new file mode 100755 index 0000000000000000000000000000000000000000..44369269dee3f3da30af668681c4613d1822b20e Binary files /dev/null and b/travail_de_groupe/chef_oeuvre/Res/fire.png differ diff --git a/travail_de_groupe/chef_oeuvre/map.txt b/travail_de_groupe/chef_oeuvre/map.txt index b0f58501d0a50ef7e8b4d80d6cd5f77d734046da..cfd451b26db099bb036f41da76b8a9cb238c16d2 100644 --- a/travail_de_groupe/chef_oeuvre/map.txt +++ b/travail_de_groupe/chef_oeuvre/map.txt @@ -1,10 +1,10 @@ 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 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 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 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 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 0 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 +0 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 0 0 0 0 0 1 0 0 0 0 +0 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 0 0 0 0 0 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 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 0 0 0 0 0 0 0 0 0 diff --git a/travail_de_groupe/chef_oeuvre/src/main.c b/travail_de_groupe/chef_oeuvre/src/main.c index c94127751afde4c7a3876f34266bd451292b761b..d614bddfb4a48fd373628e8c3497125115224e9d 100644 --- a/travail_de_groupe/chef_oeuvre/src/main.c +++ b/travail_de_groupe/chef_oeuvre/src/main.c @@ -8,8 +8,5 @@ int main(){ running = 1; gameState = MENU; readMapFromFile("map.txt"); - initPlayer(); - mainLoop(); - } \ No newline at end of file diff --git a/travail_de_groupe/chef_oeuvre/src/player.c b/travail_de_groupe/chef_oeuvre/src/player.c index 4f99716c03498b4d1c1c41bc89bfbfde66924461..92e4f572490653856233d111a7ee48c3781139b5 100644 --- a/travail_de_groupe/chef_oeuvre/src/player.c +++ b/travail_de_groupe/chef_oeuvre/src/player.c @@ -2,42 +2,126 @@ player_t player; + void initPlayer(){ - player.x = 0; + player.x = 18*32; player.y = 0; + player.w = CELLSIZE*0.8; + player.h = CELLSIZE*0.8; player.waterLevel = 0; player.speed = 1; + player.isMoving = 0; +} + +int giveCaseBelowPosition(int x, int y){ + int x2 = x/CELLSIZE; + int y2 = y/CELLSIZE; + return map[y2][x2]; +} + +int collisionsLeftPlayer(){ + int collision = 0; + int dotTopLeft = giveCaseBelowPosition(player.x, player.y); + int dotDownLeft = giveCaseBelowPosition(player.x, player.y+player.h); + //collision window + if(player.x <= 0){ + collision = 1; + } + //collision tree + if(dotTopLeft==1 || dotDownLeft==1){ + collision = 1; + } + + return collision; +} + +int collisionsRightPlayer(){ + int collision = 0; + int dotTopRight = giveCaseBelowPosition(player.x+player.w, player.y); + int dotDownRight = giveCaseBelowPosition(player.x+player.w, player.y+player.h); + //collision window + if(player.x + player.w >= MAPSIZE * CELLSIZE){ + collision = 1; + } + //collision tree + if(dotTopRight==1 || dotDownRight==1){ + collision = 1; + } + return collision; +} + +int collisionsUpPlayer(){ + int collision = 0; + int dotTopRight = giveCaseBelowPosition(player.x+player.w, player.y); + int dotTopLeft = giveCaseBelowPosition(player.x, player.y); + //collision window + if(player.y <= 0){ + collision = 1; + } + //collision tree + if(dotTopRight==1 || dotTopLeft==1){ + collision = 1; + } + return collision; +} + +int collisionsDownPlayer(){ + int collision = 0; + int dotDownRight = giveCaseBelowPosition(player.x+player.w, player.y+player.h); + int dotDownLeft = giveCaseBelowPosition(player.x, player.y+player.h); + //collision window + if(player.y + player.h >= MAPSIZE * CELLSIZE){ + collision = 1; + } + //collision tree + if(dotDownRight==1 || dotDownLeft==1){ + collision = 1; + } + return collision; } void moveRightPlayer(){ - player.x = player.x + player.speed; + if(!collisionsRightPlayer()){ + player.x = player.x + player.speed; + } } void moveLeftPlayer(){ - player.x = player.x - player.speed; + if(!collisionsLeftPlayer()){ + player.x = player.x - player.speed; + } } void moveUpPlayer(){ - player.y = player.y - player.speed; + if(!collisionsUpPlayer()){ + player.y = player.y - player.speed; + } } void moveDownPlayer(){ - player.y = player.y + player.speed; + if(!collisionsDownPlayer()){ + player.y = player.y + player.speed; + } } void manageMovement(){ if(keys[PLAYER_UP]){ moveUpPlayer(); + player.isMoving = 1; } - if(keys[PLAYER_DOWN] == 1){ + if(keys[PLAYER_DOWN]){ moveDownPlayer(); + player.isMoving = 1; } - if(keys[PLAYER_LEFT] == 1){ + if(keys[PLAYER_LEFT]){ moveLeftPlayer(); + player.isMoving = 1; } - if(keys[PLAYER_RIGHT] == 1){ + if(keys[PLAYER_RIGHT]){ moveRightPlayer(); + player.isMoving = 1; } + player.isMoving = 0; } int selectStateHover(){ diff --git a/travail_de_groupe/chef_oeuvre/src/player.h b/travail_de_groupe/chef_oeuvre/src/player.h index 4f8791242356c2fac3238982e1671e11d3397982..8dda417ec6b48cac57240a0dc79a26c8748e4575 100644 --- a/travail_de_groupe/chef_oeuvre/src/player.h +++ b/travail_de_groupe/chef_oeuvre/src/player.h @@ -12,8 +12,11 @@ typedef struct player{ int x; int y; + int w; + int h; int waterLevel; int speed; + int isMoving; } player_t; extern player_t player; diff --git a/travail_de_groupe/chef_oeuvre/src/render.c b/travail_de_groupe/chef_oeuvre/src/render.c index 9f1b2f862f2e8cfa4d70395cd7ac08385a274146..0f1adc2be3369f5aa754b479c86a055ec4616a96 100644 --- a/travail_de_groupe/chef_oeuvre/src/render.c +++ b/travail_de_groupe/chef_oeuvre/src/render.c @@ -143,6 +143,7 @@ void drawGame(){ void mainLoop(){ createWindow(); + initPlayer(); grassSurface = IMG_Load("Res/grass.png"); grassTexture = SDL_CreateTextureFromSurface(renderer, grassSurface);