Skip to content
Snippets Groups Projects
Commit bbfd9fa3 authored by antoinemeyer5's avatar antoinemeyer5
Browse files

Merge branch 'main' of github.com:maberet/ProjetZZ1 into main

parents ccb1c5c6 c84317b0
No related branches found
No related tags found
No related merge requests found
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
File added
#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
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
#include <SDL2/SDL.h>
#include <stdio.h>
int main(int argc, char **argv) {
(void)argc;
(void)argv;
int screen_width = 1079;
int screen_height = 1920;
SDL_Window * windows[20];
int bounce_count = 0;
int amplitude_bounce = 200;
int left_most_position = 0;
int top_most_position = 0;
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
SDL_Log("Error : SDL initialisation - %s\n",
SDL_GetError());
exit(EXIT_FAILURE);
}
int pas_y = (screen_height)/20;
int pas_x = (screen_width)/20;
int last_drawy = 0;
for (int i = 0; i < 10; i++) {
int draw_x = top_most_position + i * pas_x;
int draw_y = left_most_position + i * pas_y;
last_drawy = draw_y;
windows[i] = SDL_CreateWindow("Window",
draw_y , draw_x,
400, 300,
SDL_WINDOW_SHOWN);
if (windows[i] == NULL) {
SDL_Log("Error : SDL window creation - %s\n",
SDL_GetError());
exit(EXIT_FAILURE);
}
SDL_Delay(50);
}
for (int i = 10; i < 20; i++) {
int draw_x = top_most_position + (i-10) * pas_x;
int draw_y = last_drawy - (i-10) * pas_y;
windows[i] = SDL_CreateWindow("Window",
draw_y , draw_x,
400, 300,
SDL_WINDOW_SHOWN);
if (windows[i] == NULL) {
SDL_Log("Error : SDL window creation - %s\n",
SDL_GetError());
exit(EXIT_FAILURE);
}
SDL_Delay(50);
}
SDL_Delay(100);
while (bounce_count < 50) {
for (int i = 0; i < 10; i++) {
int draw_x = top_most_position + i * pas_x;
int draw_y = left_most_position + i * pas_y;
last_drawy = draw_y;
SDL_SetWindowPosition(windows[i],
draw_y , draw_x);
//SDL_Delay(50);
}
for (int i = 10; i < 20; i++) {
int draw_x = top_most_position + (i-10) * pas_x;
int draw_y = last_drawy - (i-10) * pas_y;
SDL_SetWindowPosition(windows[i],
draw_y , draw_x);
//SDL_Delay(50);
}
SDL_Delay(100);
bounce_count+=1;
int signe = (bounce_count % 2 == 0) ? (1) : (-1);
left_most_position = left_most_position + amplitude_bounce;
amplitude_bounce = 200 * sin(bounce_count);
}
for (int i = 0; i < 20; i++) {
SDL_DestroyWindow(windows[i]);
}
SDL_Delay(2000);
SDL_Quit();
return 0;
}
\ No newline at end of file
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment