diff --git a/travail_de_groupe/jeu_appren_par_renfo/.vscode/settings.json b/travail_de_groupe/jeu_appren_par_renfo/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..a7361b1789711920f04de454549e57ad57fb63f1 --- /dev/null +++ b/travail_de_groupe/jeu_appren_par_renfo/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "qlearn.h": "c" + } +} \ No newline at end of file diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/ball.c b/travail_de_groupe/jeu_appren_par_renfo/src/ball.c index 9c3acb03b507c92c84055610aa8d69ea262de04f..b9fd1f53f0c0dda64112bb01a4a13fb459c0b334 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/ball.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/ball.c @@ -13,6 +13,8 @@ void initBall() ball.isHit = 0; ball.angle = -pi; ball.speed = 0; + landingPointEnnemyIsFind = 0; + landingPointPlayerIsFind = 0; } //ball_t ball; int trajectoireAntoine[NUMBERPOINT_TRAJEC][2]; @@ -134,7 +136,12 @@ void updateBall() if (ball.isHit) { // landingPoint est déjà / BLOCK_SIZE de base - ball.z = lagrangeInterpolation(ball.x / BLOCK_SIZE, lastHitPoint[0] / BLOCK_SIZE, lastHitPoint[1] / BLOCK_SIZE, 15, 2 * player.h / BLOCK_SIZE, landingPoint[0], 0); + if (ball.isTravelingTo == AI){ + ball.z = lagrangeInterpolation(ball.x / BLOCK_SIZE, lastHitPointPlayerX / BLOCK_SIZE, lastHitPointPlayerY / BLOCK_SIZE, 15, 2 * player.h / BLOCK_SIZE, landingPointPlayerX, 0); + } + else if (ball.isTravelingTo == PLAYER){ + ball.z = lagrangeInterpolation(ball.x / BLOCK_SIZE, lastHitPointEnnemyX / BLOCK_SIZE, lastHitPointEnnemyY / BLOCK_SIZE, 15, 2 * ennemy.h / BLOCK_SIZE, landingPointEnnemyX, 0); + } } if (ball.z < 0) { diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.c b/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.c index 1a1d3f95912b4db1d902266807ea79a8afd82602..eea44274e9aa7a81d3368fe8ba260238cb5f0148 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.c @@ -1,5 +1,13 @@ #include "player.h" +int landingPointEnnemyX; +int landingPointEnnemyY; + +int lastHitPointEnnemyX; +int lastHitPointEnnemyY = 0; + +int landingPointEnnemyIsFind = 0; + int angleF; int angleH; int ennemyZone; @@ -22,12 +30,12 @@ void manageEnnemyMovement() { if (ball.isTravelingTo == AI) { - angleF = defineAngleF(lastHitPoint[0], lastHitPoint[1], landingPoint[0], landingPoint[1]); + angleF = defineAngleF(lastHitPointPlayerX, lastHitPointPlayerY, landingPointPlayerX, landingPointPlayerY); angleF = converterIntoAngleF(angleF); - angleH = defineAngleH(lastHitPoint[0], landingPoint[0]); + angleH = defineAngleH(lastHitPointPlayerX, landingPointPlayerX); angleH = converterIntoAngleH(angleH); ennemyZone = convertIntoZone(ennemy.x, ennemy.y); - canonZone = convertIntoZone(lastHitPoint[0], lastHitPoint[1]); + canonZone = convertIntoZone(lastHitPointPlayerX, lastHitPointPlayerY); action = takeAction(ennemy.x, ennemy.y, Q, canonZone, angleH, angleF, 1); while (ennemyHasMoved == 0) { @@ -90,38 +98,38 @@ void manageEnnemyMovement() } } -int * generateLandingPointEnnemy(){ - int *landingPoint = malloc(sizeof(int) * 2); +int generatelandingPointEnnemy(){ int randomPointX = rand() % ((MAP_WIDTH/2)); - landingPoint[0] = randomPointX ; - landingPoint[1] = 0; - landingPointIsFind = 1; + landingPointEnnemyIsFind = 1; + landingPointPlayerIsFind = 0; - return landingPoint; + return randomPointX; } + void ennemyHitBall(){ if (sqrt(pow(ennemy.x - ball.x, 2) + pow(ennemy.y - ball.y, 2)) / BLOCK_SIZE < HIT_RANGE) { if (ball.isTravelingTo == AI) { - if(landingPointIsFind == 0){ - freeIntList(landingPoint); - landingPoint = generateLandingPointEnnemy(); - } - ball.isTravelingTo = PLAYER; - ball.angle = ennemy.angle; - ball.speed = HIT_FORCE; - ball.isHit = 1; - lastHitPoint[0] = ball.x; - lastHitPoint[1] = player.h; - - printf("ennemy new lastHitPoint : %d %d\n", lastHitPoint[0]/BLOCK_SIZE, lastHitPoint[1]/BLOCK_SIZE); + //cherche et trouve point de chute, UNE SEULE FOIS! + if(landingPointEnnemyIsFind == 0){ + landingPointEnnemyX = generatelandingPointEnnemy(); + ball.isTravelingTo = PLAYER; + ball.angle = ennemy.angle; + ball.speed = HIT_FORCE; + ball.isHit = 1; + lastHitPointEnnemyX = ball.x; + lastHitPointEnnemyY = player.h; + + printf("ennemy new lastHitPointEnnemy : %d %d\n", lastHitPointEnnemyX/BLOCK_SIZE, lastHitPointEnnemyY/BLOCK_SIZE); + + printf("ennemy new landingPointEnnemy : %d %d\n", landingPointEnnemyX/BLOCK_SIZE, landingPointEnnemyY/BLOCK_SIZE); + } - printf("ennemy new landingPoint : %d %d\n", landingPoint[0]/BLOCK_SIZE, landingPoint[1]/BLOCK_SIZE); } } } diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.h b/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.h index 660453be677e92987bb34dee561e04e36fa87d61..a4f58a2d7e941ceb86fd61491097792e57c4bd9d 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.h +++ b/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.h @@ -8,7 +8,13 @@ #include "qlearn.h" +extern int landingPointEnnemyX; +extern int landingPointEnnemyY; +extern int lastHitPointEnnemyX; +extern int lastHitPointEnnemyY; + +extern int landingPointEnnemyIsFind; void initEnnemy(); void manageEnnemy(); 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 7e2656a61fe2fc93d978cfd4d068f2585fd52c76..a63f41996d75ea3ddb21e016e69be3263cb76596 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 @@ -68,11 +68,11 @@ void gestGame() } if (event.motion.yrel > 0) { - player.viewAngle -= 1; + player.viewAngle -= 0.01 * RD; } if (event.motion.yrel < 0) { - player.viewAngle += 1; + player.viewAngle += 0.01 * RD; } player.deltax = cos(player.angle); player.deltay = sin(player.angle); @@ -118,7 +118,8 @@ void gestGame() case SDLK_b: initBall(); - landingPointIsFind = 0; + landingPointPlayerIsFind = 0; + landingPointEnnemyIsFind = 0; break; default: 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 b6d289bad2bcb17d39bbb2ed928b1ea74d144ad2..f0e6e199e3b520a5fd6c7d400d9b354093592735 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/player.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.c @@ -3,9 +3,13 @@ player_t player; player_t ennemy; -int *landingPoint; -int *lastHitPoint; -int landingPointIsFind = 0; +int landingPointPlayerX; +int landingPointPlayerY = 0; + +int lastHitPointPlayerX; +int lastHitPointPlayerY; + +int landingPointPlayerIsFind = 0; void initPlayer() { @@ -30,33 +34,15 @@ void initPlayer() player.viewAngle = 0; } -int *generateLandingPoint(int rxWall) +int generatelandingPointPlayer(int rxWall) { - int *landingPoint = malloc(sizeof(int) * 2); int randomPointX = MAP_WIDTH/2 + 1 + rand()%(rxWall/BLOCK_SIZE - (MAP_WIDTH/2)); - landingPoint[0] = randomPointX ; - landingPoint[1] = 0; - landingPointIsFind = 1; - - return landingPoint; -} - -int *allocLastHitPoint() -{ - int *lastHitPoint = (int *)malloc(sizeof(int) * 2); - lastHitPoint[0] = 0; - lastHitPoint[1] = 0; - return lastHitPoint; -} + landingPointPlayerIsFind = 1; + landingPointEnnemyIsFind = 0; -void freeIntList(int *list) -{ - if (list != NULL) - { - free(list); - } + return randomPointX; } void hitBall() @@ -74,28 +60,26 @@ void hitBall() // printf("hit\n"); if (rxWall > MAP_WIDTH/2) { - - freeIntList(lastHitPoint); - lastHitPoint = allocLastHitPoint(); //cherche et trouve point de chute, UNE SEULE FOIS! - if(landingPointIsFind == 0){ - freeIntList(landingPoint); - landingPoint = generateLandingPoint(rxWall); - } + if(landingPointPlayerIsFind == 0){ - lastHitPoint[0] = ball.x; - lastHitPoint[1] = player.h; + landingPointPlayerX = generatelandingPointPlayer(rxWall); - ball.angle = player.angle; - ball.speed = HIT_FORCE; - ball.z = player.h; - ball.isHit = 1; - ball.isTravelingTo = AI; + printf("player new lastHitPointPlayer : %d %d\n", lastHitPointPlayerX/BLOCK_SIZE, lastHitPointPlayerY/BLOCK_SIZE); - printf("ennemy new lastHitPoint : %d %d\n", lastHitPoint[0]/BLOCK_SIZE, lastHitPoint[1]/BLOCK_SIZE); + printf("player new landingPointPlayer : %d %d\n", landingPointPlayerX/BLOCK_SIZE, landingPointPlayerY/BLOCK_SIZE); + + lastHitPointPlayerX = ball.x; + lastHitPointPlayerY = player.h; + + ball.angle = player.angle; + ball.speed = HIT_FORCE; + ball.z = player.h; + ball.isHit = 1; + ball.isTravelingTo = AI; + } - printf("ennemy new landingPoint : %d %d\n", landingPoint[0]/BLOCK_SIZE, landingPoint[1]/BLOCK_SIZE); } // printf("valid hit\n"); } 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 ca036f8f246d56c3d93046d0c21c4ffead7b7cc7..50c18b7c9c30c2bc5ee73c4f8888b7a4d697b1bf 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/player.h +++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.h @@ -37,9 +37,12 @@ typedef struct player extern player_t player; extern player_t ennemy; -extern int *landingPoint; -extern int *lastHitPoint; -extern int landingPointIsFind; +extern int landingPointPlayerX; +extern int landingPointPlayerY; + +extern int lastHitPointPlayerX; +extern int lastHitPointPlayerY; +extern int landingPointPlayerIsFind; 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 02a5f7c08cc96b0ae1696de6f1e1fe14d7728993..bcb8be4302eb89d8ad563de243cb1a48264d4b04 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/render.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.c @@ -894,10 +894,10 @@ void drawMap2D(int map[][MAP_WIDTH]) SDL_RenderFillRect(renderer, &rect); // draw landing point - if (landingPointIsFind == 1) + if (landingPointPlayerIsFind == 1) { SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); - rect.x = landingPoint[0] * CELL_SIZE; + rect.x = landingPointPlayerX * CELL_SIZE; rect.y = CELL_SIZE; rect.h = (MAP_HEIGHT - 2) * CELL_SIZE; rect.w = 3;