From c84317b02c9d53fae40b82480a9332d5fa3e2b30 Mon Sep 17 00:00:00 2001
From: Taha Belkhiri <belkhiri.taha53@gmail.com>
Date: Mon, 20 Jun 2022 14:13:00 +0200
Subject: [PATCH] added snakes

---
 travail_individuel/Belkhiri/snakes/Makefile |  21 ++
 travail_individuel/Belkhiri/snakes/run      | Bin 0 -> 22064 bytes
 travail_individuel/Belkhiri/snakes/snakes.c | 233 ++++++++++++++++++++
 3 files changed, 254 insertions(+)
 create mode 100644 travail_individuel/Belkhiri/snakes/Makefile
 create mode 100755 travail_individuel/Belkhiri/snakes/run
 create mode 100644 travail_individuel/Belkhiri/snakes/snakes.c

diff --git a/travail_individuel/Belkhiri/snakes/Makefile b/travail_individuel/Belkhiri/snakes/Makefile
new file mode 100644
index 0000000..e76de77
--- /dev/null
+++ b/travail_individuel/Belkhiri/snakes/Makefile
@@ -0,0 +1,21 @@
+CC=gcc
+
+LDFLAG=$(shell sdl2-config --cflags --libs) -lm -lSDL2_ttf -D_REENTRANT -lSDL2_image -pthread
+CFLAG=-Wall $(shell sdl2-config --cflags --libs)
+
+EXEC=run
+SRC=$(wildcard *.c)
+OBJ=$(SRC:.c=.o)
+
+all:$(EXEC)
+
+$(EXEC):$(OBJ)
+	$(CC) -o $@ $^ $(LDFLAG)
+
+%.o:%.c
+	$(CC) -o $@ -c $< $(CFLAG)
+
+.PHONY:clean 
+
+clean:
+	rm -rf $(EXEC)
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/snakes/run b/travail_individuel/Belkhiri/snakes/run
new file mode 100755
index 0000000000000000000000000000000000000000..6338c0e03adad271a3f22d17e9e5d4567fb494bd
GIT binary patch
literal 22064
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
JGqADRe*#OI()s`Z

literal 0
HcmV?d00001

diff --git a/travail_individuel/Belkhiri/snakes/snakes.c b/travail_individuel/Belkhiri/snakes/snakes.c
new file mode 100644
index 0000000..40cbd79
--- /dev/null
+++ b/travail_individuel/Belkhiri/snakes/snakes.c
@@ -0,0 +1,233 @@
+#include <SDL2/SDL.h>
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+#define NB_BLOCS 4
+#define NB_SNAKES 10
+
+typedef struct bloc {
+    int p1[2];
+    int p2[2];
+    int p3[2];
+    int p4[2];
+} bloc_t;
+
+typedef struct snake {
+    bloc_t * blocs[NB_BLOCS];
+} snake_t;
+
+
+int running = 1;
+
+void end_sdl(char ok,                                               
+             char const* msg,                                       
+             SDL_Window* window,                                    
+             SDL_Renderer* renderer) {                              
+  char msg_formated[255];                                                         
+  int l;                                                                          
+
+  if (!ok) {
+    strncpy(msg_formated, msg, 250);                                              
+    l = strlen(msg_formated);                                                     
+    strcpy(msg_formated + l, " : %s\n");                                          
+
+    SDL_Log(msg_formated, SDL_GetError());                                        
+  }                                                                               
+
+  if (renderer != NULL) {
+    SDL_DestroyRenderer(renderer);
+    renderer = NULL;
+  }
+  if (window != NULL)   {
+    SDL_DestroyWindow(window);
+    window= NULL;
+  }
+
+  SDL_Quit();                                                                     
+
+  if (!ok) {      
+    exit(EXIT_FAILURE);                                                           
+  }                                                                               
+}                                                                                 
+
+void draw_snake(SDL_Renderer* renderer, snake_t * Snake_to_draw) {
+    for (int i = 0; i < NB_BLOCS; i++) {
+        SDL_SetRenderDrawColor(renderer, rand() % 255, rand() % 255, rand() % 255, 255);
+        SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p1[0], Snake_to_draw->blocs[i]->p1[1], Snake_to_draw->blocs[i]->p2[0], Snake_to_draw->blocs[i]->p2[1]);
+        SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p2[0], Snake_to_draw->blocs[i]->p2[1], Snake_to_draw->blocs[i]->p3[0], Snake_to_draw->blocs[i]->p3[1]);
+        SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p3[0], Snake_to_draw->blocs[i]->p3[1], Snake_to_draw->blocs[i]->p4[0], Snake_to_draw->blocs[i]->p4[1]);
+        SDL_RenderDrawLine(renderer, Snake_to_draw->blocs[i]->p4[0], Snake_to_draw->blocs[i]->p4[1], Snake_to_draw->blocs[i]->p1[0], Snake_to_draw->blocs[i]->p1[1]);
+        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
+    }
+}
+
+snake_t * init_snake(int x, int y, int h, int w) {
+    snake_t * snake = malloc(sizeof(snake_t));
+    for (int i = 0; i < NB_BLOCS; i++) {
+        snake->blocs[i] = malloc(sizeof(bloc_t));
+        if (i == 0){
+        snake->blocs[i]->p1[0] = x;
+        snake->blocs[i]->p1[1] = y;
+        snake->blocs[i]->p2[0] = x;
+        snake->blocs[i]->p2[1] = y+h;
+        snake->blocs[i]->p3[0] = x+w;
+        snake->blocs[i]->p3[1] = y+h;
+        snake->blocs[i]->p4[0] = x+w;
+        snake->blocs[i]->p4[1] = y;
+        }
+        else {
+            snake->blocs[i]->p1[0] = snake->blocs[i-1]->p2[0];
+            snake->blocs[i]->p1[1] = snake->blocs[i-1]->p2[1];
+            snake->blocs[i]->p2[0] = snake->blocs[i]->p1[0];
+            snake->blocs[i]->p2[1] = snake->blocs[i]->p1[1] + h/(i+2);
+            snake->blocs[i]->p4[0] = snake->blocs[i-1]->p3[0];
+            snake->blocs[i]->p4[1] = snake->blocs[i-1]->p3[1];
+            snake->blocs[i]->p3[0] = snake->blocs[i]->p4[0];
+            snake->blocs[i]->p3[1] = snake->blocs[i]->p4[1] + h/(i+2);
+        }
+    }
+    return snake;
+}
+
+void rotate_bloc(float angle, bloc_t * bloc){
+    float x1 = bloc->p1[0];
+    float y1 = bloc->p1[1];
+    float x2 = bloc->p2[0];
+    float y2 = bloc->p2[1];
+    float x3 = bloc->p3[0];
+    float y3 = bloc->p3[1];
+    float x4 = bloc->p4[0];
+    float y4 = bloc->p4[1];
+    // middle is center of rotation
+    float middle_x = (x1 + x4)/2;
+    float middle_y = (y1 + y4)/2;
+
+    float x1_new = x1 - middle_x;
+    float y1_new = y1 - middle_y;
+    float x2_new = x2 - middle_x;
+    float y2_new = y2 - middle_y;
+    float x3_new = x3 - middle_x;
+    float y3_new = y3 - middle_y;
+    float x4_new = x4 - middle_x;
+    float y4_new = y4 - middle_y;
+    // rotate
+    x1_new = x1_new * cos(angle) - y1_new * sin(angle);
+    y1_new = x1_new * sin(angle) + y1_new * cos(angle);
+    x2_new = x2_new * cos(angle) - y2_new * sin(angle);
+    y2_new = x2_new * sin(angle) + y2_new * cos(angle);
+    x3_new = x3_new * cos(angle) - y3_new * sin(angle);
+    y3_new = x3_new * sin(angle) + y3_new * cos(angle);
+    x4_new = x4_new * cos(angle) - y4_new * sin(angle); 
+    y4_new = x4_new * sin(angle) + y4_new * cos(angle);
+    // move back
+    x1_new = x1_new + middle_x;
+    y1_new = y1_new + middle_y;
+    x2_new = x2_new + middle_x;
+    y2_new = y2_new + middle_y;
+    x3_new = x3_new + middle_x;
+    y3_new = y3_new + middle_y;
+    x4_new = x4_new + middle_x;
+    y4_new = y4_new + middle_y;
+    // assign new values
+    bloc->p1[0] = x1_new;
+    bloc->p1[1] = y1_new;
+    bloc->p2[0] = x2_new;
+    bloc->p2[1] = y2_new;
+    bloc->p3[0] = x3_new;
+    bloc->p3[1] = y3_new;
+    bloc->p4[0] = x4_new;
+    bloc->p4[1] = y4_new;
+}
+
+float random_angle_radian() {
+    return (float)rand() / (float)RAND_MAX * 2 * M_PI;
+}
+
+void move_bloc(int x, int y, bloc_t * bloc){
+    bloc->p1[0] += x;
+    bloc->p1[1] += y;
+    bloc->p2[0] += x;
+    bloc->p2[1] += y;
+    bloc->p3[0] += x;
+    bloc->p3[1] += y;
+    bloc->p4[0] += x;
+    bloc->p4[1] += y;
+}
+
+void move_snake(int x, int y, snake_t * snake){
+    for (int i = NB_BLOCS-1; i >= 0; i--) {
+        move_bloc(x, y, snake->blocs[i]);
+    }
+}
+
+void rotate_snake(float angle, snake_t * snake) {
+    for (int i = 0; i < NB_BLOCS; i++) {
+        if (i == 0){
+            rotate_bloc(angle, snake->blocs[i]);
+        }
+        else {
+            rotate_bloc(angle, snake->blocs[i]);
+            snake->blocs[i]->p1[0] = snake->blocs[i-1]->p2[0];
+            snake->blocs[i]->p1[1] = snake->blocs[i-1]->p2[1];
+            snake->blocs[i]->p4[0] = snake->blocs[i-1]->p3[0];
+            snake->blocs[i]->p4[1] = snake->blocs[i-1]->p3[1];
+        }
+    }
+}
+
+int main(int argc, char** argv) {
+    (void)argc;
+    (void)argv;
+
+  SDL_Window* window = NULL;
+  SDL_Renderer* renderer = NULL;
+
+  SDL_DisplayMode screen;
+
+  /*********************************************************************************************************************/  
+  /*                         Initialisation de la SDL  + gestion de l'échec possible                                   */
+  if (SDL_Init(SDL_INIT_VIDEO) != 0) end_sdl(0, "ERROR SDL INIT", window, renderer);
+
+  SDL_GetCurrentDisplayMode(0, &screen);
+  printf("Résolution écran\n\tw : %d\n\th : %d\n",
+         screen.w, screen.h);
+
+  /* Création de la fenêtre */
+  window = SDL_CreateWindow("Premier dessin",
+                            SDL_WINDOWPOS_CENTERED,
+                            SDL_WINDOWPOS_CENTERED, screen.w,
+                            screen.h,
+                            SDL_WINDOW_OPENGL);
+  if (window == NULL) end_sdl(0, "ERROR WINDOW CREATION", window, renderer);
+
+  /* Création du renderer */
+  renderer = SDL_CreateRenderer(window, -1,
+                                SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
+  if (renderer == NULL) end_sdl(0, "ERROR RENDERER CREATION", window, renderer);
+
+    snake_t * snakeList[NB_SNAKES];
+    for (int i = 0; i < NB_SNAKES; i++) {
+        // random int between 0 and WIDTH
+
+        snakeList[i] = init_snake(rand()%screen.w, rand()%screen.h, rand()%200, rand()%50);
+    }
+
+    for (int i=0; i< 50; i++){
+        for (int j=0; j<NB_SNAKES; j++){
+            float angle = 0.2 * pow(-1, 1 + rand()%2);
+            rotate_snake(angle, snakeList[j]);
+            move_snake(rand()%10, rand()%10, snakeList[j]);
+            draw_snake(renderer, snakeList[j]);            
+        }
+        SDL_RenderPresent(renderer);
+        SDL_Delay(100);
+        SDL_RenderClear(renderer);
+    }
+
+
+
+  /* on referme proprement la SDL */
+  end_sdl(1, "Normal ending", window, renderer);
+  return EXIT_SUCCESS;
+}
\ No newline at end of file
-- 
GitLab