From 178e5dc125cca3fffc8d3e42f0aad89c340bc89a Mon Sep 17 00:00:00 2001
From: antoinemeyer5 <antoine.meyer54@gmail.com>
Date: Wed, 29 Jun 2022 11:30:29 +0200
Subject: [PATCH] fix deplacement personnage

---
 .../jeu_appren_par_renfo/src/gest_event.c     | 276 ++++++++++--------
 .../jeu_appren_par_renfo/src/player.c         | 124 ++++----
 2 files changed, 219 insertions(+), 181 deletions(-)

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 9ca3432..34ff219 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
@@ -1,154 +1,174 @@
 #include "gest_event.h"
 
-
 int Keys[NB_KEYS];
 
-void initKeys(){
+void initKeys()
+{
     int i;
-    for(i = 0; i < NB_KEYS; i++)
+    for (i = 0; i < NB_KEYS; i++)
     {
-        Keys[i] = 0;
+        Keys[i] = 1;
     }
 }
 
-void gestMenu(){
+void gestMenu()
+{
     SDL_Event event;
-    while (SDL_PollEvent(&event)){
-            switch(event.type)
-            {   
-                case SDL_QUIT:
-                    running = 0;
-                    break;
-
-                case SDL_KEYUP:
-                    switch (event.key.keysym.sym)
-                    {
-                    case SDLK_ESCAPE:
-                        running = 0;
-                        continue;
-
-                    default:
-                        continue;
-                    }
-                    break;
-
-                default:
-                    continue;
+    while (SDL_PollEvent(&event))
+    {
+        switch (event.type)
+        {
+        case SDL_QUIT:
+            running = 0;
+            break;
+
+        case SDL_KEYUP:
+            switch (event.key.keysym.sym)
+            {
+            case SDLK_ESCAPE:
+                running = 0;
+                continue;
+
+            default:
+                continue;
             }
+            break;
+
+        default:
+            continue;
+        }
     }
     SDL_Delay(5);
 }
 
+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;
+            }
+            if (event.motion.xrel < 0)
+            {
+                player.angle -= 0.01;
+                if (player.angle < 0)
+                    player.angle += 2 * pi;
+            }
+            if (event.motion.yrel > 0)
+            {
+                player.viewAngle -= 1;
+            }
+            if (event.motion.yrel < 0)
+            {
+                player.viewAngle += 1;
+            }
+            player.deltax = cos(player.angle);
+            player.deltay = sin(player.angle);
+            break;
+
+        case SDL_KEYUP:
+            switch (event.key.keysym.sym)
+            {
+            case SDLK_ESCAPE:
+                running = 0;
+                continue;
+
+            case SDLK_z:
+                // avance
+                Keys[2] = 1;
+                continue;
+
+            case SDLK_d:
+                // va à droite
+                Keys[3] = 1;
+                continue;
+
+            case SDLK_s:
+                // va en arrière
+                Keys[0] = 1;
+                continue;
+
+            case SDLK_q:
+                // va à gauche
+                Keys[1] = 1;
+                continue;
+
+            default:
+                break;
+            }
 
+        case SDL_KEYDOWN:
+            switch (event.key.keysym.sym)
+            {
+            case SDLK_z:
+                Keys[2] = 0;
+                continue;
 
-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;
-                    }
-                    if (event.motion.xrel < 0){
-                        player.angle -= 0.01;
-                        if (player.angle < 0) player.angle += 2*pi;
-                    }
-                    if (event.motion.yrel > 0){
-                        player.viewAngle -= 1;
-                    }
-                    if (event.motion.yrel < 0){
-                        player.viewAngle += 1;
-                    }
-                    player.deltax = cos(player.angle);
-                    player.deltay = sin(player.angle);
-
-                case SDL_KEYUP:
-                    switch (event.key.keysym.sym)
-                    {
-                        case SDLK_ESCAPE:
-                            running = 0;
-                            continue;
-                            
-                        case SDLK_z:
-                            Keys[2] = 1;
-                            continue;
-
-                        case SDLK_d:
-                            Keys[3] = 1;
-                            continue;
-
-                        case SDLK_s:
-                            Keys[0] = 1;
-                            continue;
-
-                        case SDLK_q:
-                            Keys[1] = 1;
-                            continue;
-
-
-                    default:
-                        break;
-                    }
-
-                case SDL_KEYDOWN:
-                    switch (event.key.keysym.sym)
-                    {
-                        case SDLK_z:
-                            Keys[2] = 0;
-                            continue;
-
-                        case SDLK_d:
-                            Keys[3] = 0;
-                            continue;
-
-                        case SDLK_s:
-                            Keys[0] = 0;
-                            continue;
-
-                        case SDLK_q:
-                            Keys[1] = 0;
-                            continue;
-
-                        default:
-                            break;
-                    }
-
-                case SDL_MOUSEBUTTONDOWN:
-                    if (event.button.button == SDL_BUTTON_LEFT){
-                        player.isHitting = 1;
-                    }
-                    break;
-                
-                case SDL_MOUSEBUTTONUP:
-                    if (event.button.button == SDL_BUTTON_LEFT){
-                        player.isHitting = 0;
-                    }
-                    break;
-
-                default:
-                    break;
-
-                
+            case SDLK_d:
+                Keys[3] = 0;
+                continue;
+
+            case SDLK_s:
+                Keys[0] = 0;
+                continue;
+
+            case SDLK_q:
+                Keys[1] = 0;
+                continue;
+
+            default:
+                break;
             }
+
+        case SDL_MOUSEBUTTONDOWN:
+            if (event.button.button == SDL_BUTTON_LEFT)
+            {
+                player.isHitting = 1;
+            }
+            break;
+
+        case SDL_MOUSEBUTTONUP:
+            if (event.button.button == SDL_BUTTON_LEFT)
+            {
+                player.isHitting = 0;
+            }
+            break;
+
+        default:
+            break;
+        }
     }
     managePlayer();
     SDL_Delay(5);
 }
 
-
-void *EventLoop(void *arg){
-    while(running){
-        switch(game_state){
-            case MENU : gestMenu();break;
-            case GAME : gestGame();break;
-            default:printf("game state fault");break;
+void *EventLoop(void *arg)
+{
+    while (running)
+    {
+        switch (game_state)
+        {
+        case MENU:
+            gestMenu();
+            break;
+        case GAME:
+            gestGame();
+            break;
+        default:
+            printf("game state fault");
+            break;
         }
     }
     return NULL;
-} 
\ No newline at end of file
+}
\ No newline at end of file
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 27b27f7..190b29c 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/player.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.c
@@ -6,12 +6,13 @@ player_t ennemy;
 
 player_t ball;
 
-int * landingPoint;
-int * lastHitPoint;
+int *landingPoint;
+int *lastHitPoint;
 
-void initPlayer(){
-    player.x= 6*BLOCK_SIZE;
-    player.y= 6*BLOCK_SIZE;
+void initPlayer()
+{
+    player.x = 6 * BLOCK_SIZE;
+    player.y = 6 * BLOCK_SIZE;
     player.h = 2 * BLOCK_SIZE;
     player.w = 2 * BLOCK_SIZE;
     player.angle = 0;
@@ -29,51 +30,59 @@ void initPlayer(){
     player.HPMax = 3;
     player.currentHP = player.HPMax;
     player.coins = 0;
-    player.angle=0;
-    player.deltax = 0;
-    player.deltay = 1;
+    player.angle = 0;
+    player.deltax = 1;
+    player.deltay = 0;
     player.viewAngle = 0;
     ball.isHit = 0;
     ball.speed = 0;
     ball.angle = -pi;
 }
 
-int * generateLandingPoint(){
-    int * landingPoint = malloc(sizeof(int) * 2);
-    int randomLength = rand() % (int)((MAP_WIDTH/2)*BLOCK_SIZE) + (MAP_WIDTH/2)*BLOCK_SIZE;
+int *generateLandingPoint()
+{
+    int *landingPoint = malloc(sizeof(int) * 2);
+    int randomLength = rand() % (int)((MAP_WIDTH / 2) * BLOCK_SIZE) + (MAP_WIDTH / 2) * BLOCK_SIZE;
     int randomPointX = randomLength * cos(player.angle) + player.x;
     int randomPointY = randomLength * sin(player.angle) + player.y;
-    landingPoint[0] = randomPointX/BLOCK_SIZE;
-    landingPoint[1] = randomPointY/BLOCK_SIZE;
-    //printf("landing point: %d %d\n", landingPoint[0], landingPoint[1]);
+    landingPoint[0] = randomPointX / BLOCK_SIZE;
+    landingPoint[1] = randomPointY / BLOCK_SIZE;
+    // printf("landing point: %d %d\n", landingPoint[0], landingPoint[1]);
     return landingPoint;
 }
 
-int * allocLastHitPoint(){
-    int * lastHitPoint = (int *)malloc(sizeof(int) * 2);
+int *allocLastHitPoint()
+{
+    int *lastHitPoint = (int *)malloc(sizeof(int) * 2);
     lastHitPoint[0] = 0;
     lastHitPoint[1] = 0;
     return lastHitPoint;
 }
 
-void freeIntList(int * list){
-    if (list != NULL){
+void freeIntList(int *list)
+{
+    if (list != NULL)
+    {
         free(list);
     }
 }
 
-void hitBall(){
-    //printf("map edges: %d %d\n",  BLOCK_SIZE * MAP_WIDTH/2,  BLOCK_SIZE *MAP_HEIGHT/2);
-    //printf("ray1: %d %d\n", ray1[0], ray1[1]);
-    int angleMin = RD * atan2((MAP_WIDTH/2)*BLOCK_SIZE - player.x, player.y);
-    int angleMax = 90 + RD * atan2((MAP_WIDTH/2)*BLOCK_SIZE - player.x, MAP_HEIGHT * BLOCK_SIZE - player.y);
-    int currAngle = (int) ((player.angle) * RD +90) %360;
-    //printf("player angle: %d\n",(int) ((player.angle) * RD +90) %360);
-    //printf("distance to ball: %f\n", sqrt(pow(ball.x - player.x, 2) + pow(ball.y - player.y, 2))/BLOCK_SIZE);
-    if (sqrt(pow(player.x - ball.x, 2) + pow(player.y - ball.y, 2))/BLOCK_SIZE < HIT_RANGE){
-        if (currAngle < angleMax && currAngle > angleMin){
-            //printf("hit\n");
-            if (player.isHitting){
+void hitBall()
+{
+    // printf("map edges: %d %d\n",  BLOCK_SIZE * MAP_WIDTH/2,  BLOCK_SIZE *MAP_HEIGHT/2);
+    // printf("ray1: %d %d\n", ray1[0], ray1[1]);
+    int angleMin = RD * atan2((MAP_WIDTH / 2) * BLOCK_SIZE - player.x, player.y);
+    int angleMax = 90 + RD * atan2((MAP_WIDTH / 2) * BLOCK_SIZE - player.x, MAP_HEIGHT * BLOCK_SIZE - player.y);
+    int currAngle = (int)((player.angle) * RD + 90) % 360;
+    // printf("player angle: %d\n",(int) ((player.angle) * RD +90) %360);
+    // printf("distance to ball: %f\n", sqrt(pow(ball.x - player.x, 2) + pow(ball.y - player.y, 2))/BLOCK_SIZE);
+    if (sqrt(pow(player.x - ball.x, 2) + pow(player.y - ball.y, 2)) / BLOCK_SIZE < HIT_RANGE)
+    {
+        if (currAngle < angleMax && currAngle > angleMin)
+        {
+            // printf("hit\n");
+            if (player.isHitting)
+            {
                 freeIntList(landingPoint);
                 freeIntList(lastHitPoint);
                 lastHitPoint = allocLastHitPoint();
@@ -87,52 +96,61 @@ void hitBall(){
                 ball.speed = HIT_FORCE;
                 ball.isHit = 1;
             }
-           //printf("valid hit\n");
+            // printf("valid hit\n");
         }
-        else {
-            //printf("unvalid hit\n");
+        else
+        {
+            // printf("unvalid hit\n");
         }
     }
     //}
 }
 
-void updateBall(){
+void updateBall()
+{
     ball.x = ball.x + ball.speed * cos(ball.angle);
     ball.y = ball.y + ball.speed * sin(ball.angle);
-    if (ball.isHit){
+    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.z > 0){
+        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.z > 0)
+        {
             printf("param. lagrange : xp=%f, xd=%d, yd=%d, xf=%d, yf=%d, xt=%d, yt=%d\n",
-                ball.x/BLOCK_SIZE,
-                lastHitPoint[0]/BLOCK_SIZE,
-                lastHitPoint[1]/BLOCK_SIZE,
-                15,
-                2*player.h/BLOCK_SIZE,
-                landingPoint[0],
-                0
-            );
+                   ball.x / BLOCK_SIZE,
+                   lastHitPoint[0] / BLOCK_SIZE,
+                   lastHitPoint[1] / BLOCK_SIZE,
+                   15,
+                   2 * player.h / BLOCK_SIZE,
+                   landingPoint[0],
+                   0);
             printf("ballZ: %f\n", ball.z);
         }
-        
     }
 }
 
-
-void manageMovement(){
+void manageMovement()
+{
+    // z : keys[2] : avance
+    // s : keys[0] : arrière
+    // q : keys[1] : gauche
+    // d : keys[3] : droite
     float x_increment = (Keys[0] - Keys[2]) * player.deltax + (Keys[3] - Keys[1]) * sin(player.angle);
     float y_increment = (Keys[0] - Keys[2]) * player.deltay + (Keys[1] - Keys[3]) * cos(player.angle);
-    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] != 1){
+    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] != 1)
+        {
             player.x += x_increment * MOVEMENT_SPEED;
             player.y += y_increment * MOVEMENT_SPEED;
         }
     }
 }
 
-void managePlayer(){
+void managePlayer()
+{
     manageMovement();
     hitBall();
     updateBall();
-- 
GitLab