diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000000000000000000000000000000000000..143979c3e1ccd696151be5ab4bb48db98495e6dd --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,21 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE" + ], + "compilerPath": "C:\\msys64\\mingw64\\bin\\gcc.exe", + "cStandard": "c17", + "cppStandard": "gnu++17", + "intelliSenseMode": "windows-gcc-x64", + "configurationProvider": "ms-vscode.makefile-tools" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index d564005163a46bf1edd682ba7c60988b3598e3e4..7aa2d6da21b1b023eea293485e7cc6f5c2d4c970 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,9 @@ "files.associations": { "sdl2-light.h": "c", "world.h": "c", - "display.h": "c" - } + "display.h": "c", + "stdio.h": "c", + "sprites.h": "c" + }, + "C_Cpp.errorSquiggles": "disabled" } \ No newline at end of file diff --git a/Makefile b/Makefile index 74d11f05f1628b2f348f6cffd38ac49d930335c1..b28ee07441ad531b0aca76a0365417cf44ff7b94 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,8 @@ LDFLAGS = -lm -lmingw32 -lSDL2main -lSDL2 SDL2_INCLUDE_DIR = src/include SDL2_LIBRARIES_DIR = src/lib -INC = sdl2-light.h library/Display/Display.h library/World/world.h -SRC = main.c sdl2-light.c library/Display/Display.c library/World/world.c +INC = sdl2-light.h library/Display/Display.h library/World/world.h library/Sprites/sprites.h +SRC = main.c sdl2-light.c library/Display/Display.c library/World/world.c library/Sprites/sprites.c OBJ = $(SRC:%.c=%.o) diff --git a/library/Sprites/sprites.c b/library/Sprites/sprites.c new file mode 100644 index 0000000000000000000000000000000000000000..75df60aa5ae18762a99ca11936523e9c3ec187d3 --- /dev/null +++ b/library/Sprites/sprites.c @@ -0,0 +1,35 @@ +#include "sprites.h" +#include "../../constante.c" +int isOverScreen(sprite_t *sprite){ + if(sprite->x < 0 || sprite->x + sprite->w > SCREEN_WIDTH || sprite->y < 0 || sprite->y + sprite->h > SCREEN_HEIGHT){ + return 1; + } + return 0; +} + +void print_sprite(sprite_t *sprite){ + printf("x = %d, y = %d, w = %d, h = %d\n", sprite->x, sprite->y, sprite->w, sprite->h); +} + + +sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h){ + sprite = malloc(sizeof(sprite_t)); + sprite->x = x; + sprite->y = y; + sprite->w = w; + sprite->h = h; + return sprite; +} + +int sprites_collide(sprite_t *sp1, sprite_t *sp2){ + if (sp1->x + sp1->w < sp2->x){ + return 0; + }else if(sp1->x > sp2->x + sp2->w){ + return 0; + }else if(sp1->y + sp1->h < sp2->y){ + return 0; + }else if(sp1->y > sp2->y + sp2->h){ + return 0; + } + return 1; +} \ No newline at end of file diff --git a/library/Sprites/sprites.h b/library/Sprites/sprites.h new file mode 100644 index 0000000000000000000000000000000000000000..fc4d1921c8d2326af24e8fdf92e6ce0595497755 --- /dev/null +++ b/library/Sprites/sprites.h @@ -0,0 +1,49 @@ +/** + * \brief Le fichier qui gères les sprites + */ +#include <stdio.h> +#include <stdlib.h> + + +#ifndef SPRITES_H +#define SPRITES_H +/** + * \brief Représentation pour stocker les données du vaisseau ou autre sprites + * + */ + +struct sprite_s{ + int x; + int y; + int w; + int h; +}; + +typedef struct sprite_s sprite_t; + + +int isOverScreen(sprite_t *sprite); + +void print_sprite(sprite_t *sprite); + +/** + * \brief La fonction initialise les sprites du jeu + * + * \param sprite + * \param x + * \param y + * \param w + * \param h + */ +sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h); + +/** + * \brief La fonction libère les données du sprite + * + * \param sp1 + * \param sp2 + * \return int 0 si les sprites ne se touchent pas, 1 sinon + */ +int sprites_collide(sprite_t *sp1, sprite_t *sp2); + +#endif \ No newline at end of file diff --git a/library/Sprites/sprites.o b/library/Sprites/sprites.o new file mode 100644 index 0000000000000000000000000000000000000000..0b0819682368140de557fc3cd415794ee36ff8d5 Binary files /dev/null and b/library/Sprites/sprites.o differ diff --git a/library/World/world.h b/library/World/world.h index d0a56df8e147d54c1c919b3cf6edac0bc54e6d2b..2f215301bf41616d15a82bfdf04b0b3e3efd8cc2 100644 --- a/library/World/world.h +++ b/library/World/world.h @@ -1,28 +1,15 @@ #include <stdio.h> #include <stdlib.h> +#include "../Sprites/sprites.h" +#include "../../constante.c" /** * \brief Fichier qui contient les données du monde du jeu * */ -#include "../../constante.c" - #ifndef WORLD_H #define WORLD_H -/** - * \brief Représentation pour stocker les données du vaisseau ou autre sprites - * - */ - -struct sprite_s{ - int x; - int y; - int w; - int h; -}; - -typedef struct sprite_s sprite_t; /** * \brief Représentation du monde du jeu @@ -48,16 +35,23 @@ void update_data(world_t *world); * \param sprite * \return int 0 si le sprite est dans l'écran, 1 sinon */ -int isOverScreen(sprite_t *sprite); int is_game_over(world_t *world); -void print_sprite(sprite_t *sprite); - -sprite_t *init_sprite(sprite_t *sprite, int x, int y, int w, int h); - +/** + * \brief La fonction initialise les données du monde + * + * \param world + */ void init_data(world_t * world); +/** + * \brief La fonction libère les données du monde + * + * \param world + */ void clean_data(world_t * world); +void handle_sprite_collide(sprite_t *sp1, sprite_t *sp2, world_t *world, int make_disappear); + #endif diff --git a/library/World/world.o b/library/World/world.o index 83b5a8f9f3dda6146032d660746085c342740bda..56ddaeca313ffeac1c13a955770d68856d1b1c52 100644 Binary files a/library/World/world.o and b/library/World/world.o differ diff --git a/main.c b/main.c index 8f34c6f2137c047665fa804b7c66a47116068dcd..08ed35a6659f4533c9fd09dc2d19bb2de67703b9 100644 --- a/main.c +++ b/main.c @@ -49,11 +49,9 @@ void handle_events(SDL_Event *event,world_t *world){ world->vaisseau->x -= MOVING_STEP; break; case SDLK_z: - world->vaisseau->y -= MOVING_STEP; world->speed_h = 3; break; case SDLK_s: - world->vaisseau->y += MOVING_STEP; world->speed_h = -3; break; case SDLK_ESCAPE: diff --git a/main.o b/main.o index 1c4119f69837b2b9e6960a091117f09ef7b55d13..70b49f709b3d38211b6d3a2ab31a0d45aa98dfec 100644 Binary files a/main.o and b/main.o differ diff --git a/spacecorridor.exe b/spacecorridor.exe index 889155a525eb4d1a49d1fdc02dd231019641bc07..deb3ecae1a773bd7293c931e78a9e36b4fdd3a38 100644 Binary files a/spacecorridor.exe and b/spacecorridor.exe differ