diff --git a/Makefile b/Makefile index b92bf4089632c5668797e7450ea6e05ef0d5f01e..d3ccfc32c51a78655d39a075b0a8c57ea9a75f6e 100644 --- a/Makefile +++ b/Makefile @@ -5,8 +5,8 @@ LDFLAGS = `sdl2-config --cflags --libs` -lSDL2_ttf INCLUDES = -I./SDL2_ttf EXEC1 = main EXEC2 = tests -SRC = logique.c gestion_fichiers.c graphisme.c fonctions_SDL.c main.c -SRC2 = logique.c gestion_fichiers.c graphisme.c fonctions_SDL.c tests.c +SRC = logique.c gestion_fichiers.c graphisme.c main.c +SRC2 = logique.c gestion_fichiers.c graphisme.c tests.c OBJ = $(SRC:.c=.o) OBJ2 = $(SRC2:.c=.o) diff --git a/Ressources/compt0.bmp b/Ressources/compt0.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bc6ed62a2e140a3b4287f70bd7cdc5da72c063d8 Binary files /dev/null and b/Ressources/compt0.bmp differ diff --git a/Ressources/envoi0.bmp b/Ressources/envoi0.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c7029ece1215e2b117df1659ae2c91c3f8d4da8a Binary files /dev/null and b/Ressources/envoi0.bmp differ diff --git a/Ressources/fond1.bmp b/Ressources/fond1.bmp index f18c31d2e5a101cf3484f2430eaa14d1b837a297..9c4f5084e6f87f9192c905025eaa8d2f2b3c4d0d 100644 Binary files a/Ressources/fond1.bmp and b/Ressources/fond1.bmp differ diff --git a/Ressources/four0.bmp b/Ressources/four0.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c6785750391ab6cf2d0563637b3a8de78eaade3f Binary files /dev/null and b/Ressources/four0.bmp differ diff --git a/Ressources/frigo0.bmp b/Ressources/frigo0.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f86e91fd9b8035fcafbec57d7694253525fae678 Binary files /dev/null and b/Ressources/frigo0.bmp differ diff --git a/Ressources/kitchen.kra b/Ressources/kitchen.kra index 5e83c504082efc60a9de0125e855b5f4d9d0c5ed..66977e22fb33a2bddfda8b73ab62b86667d2256d 100644 Binary files a/Ressources/kitchen.kra and b/Ressources/kitchen.kra differ diff --git a/Ressources/lavabo0.bmp b/Ressources/lavabo0.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d0777a2e9b2d138a7b529fa413a9eadc22bf749f Binary files /dev/null and b/Ressources/lavabo0.bmp differ diff --git a/Ressources/trash0.bmp b/Ressources/trash0.bmp new file mode 100644 index 0000000000000000000000000000000000000000..106f096cd248c9b4efc6fb6ac744adca3bf012bc Binary files /dev/null and b/Ressources/trash0.bmp differ diff --git a/fonctions_SDL.c b/fonctions_SDL.c deleted file mode 100644 index 9546e5ffcbf1562275eff6dcf29a7edf615ab46f..0000000000000000000000000000000000000000 --- a/fonctions_SDL.c +++ /dev/null @@ -1,48 +0,0 @@ -/** - * \file fonctions_SDL.c - * \brief Fichier de gestion de l'affichage, du texte - * \author Guillaume Vautrin - * \version 1.0 - */ - -#include "fonctions_SDL.h" - - -SDL_Texture* charger_image (const char* nomfichier, SDL_Renderer* renderer){ - //Charge une image et retourne la surface de texture associée - SDL_Surface * image = SDL_LoadBMP(nomfichier); - SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, image); - SDL_FreeSurface(image); - return texture; -} - -SDL_Texture* charger_image_transparente(const char* nomfichier, SDL_Renderer* renderer, Uint8 r, Uint8 g, Uint8 b){ - SDL_Surface * image = SDL_LoadBMP(nomfichier); - SDL_SetColorKey(image, SDL_TRUE, SDL_MapRGB(image->format, r, g, b)); - SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, image); - SDL_FreeSurface(image); - return texture; -} -//int SDL_SetColorKey(SDL_Surface* surface, int flag, Uint32 key) ; // défini la couleur transparente dans une surface - -//Uint32 SDL_MapRGB(const SDL_PixelFormat* format, Uint8 r, Uint8 g, Uint8 b); //map les couleurs d'une bitmap - -SDL_Texture* charger_texte (const char* message, SDL_Renderer* renderer, TTF_Font *font, SDL_Color color){ - SDL_Surface* texte = TTF_RenderText_Blended(font, message, color); - SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, texte); - SDL_FreeSurface(texte); - return texture; -} - -void render_texte(SDL_Renderer *renderer, int x, int y, int w, int h, SDL_Texture* texte){ - SDL_Rect rect = {x, y, w, h}; - SDL_RenderCopy(renderer, texte, NULL, &rect); -} - -/* -TTF_Font *TTF_OpenFont(const char *file, int size) ; //charge la police et applique la taille du texte -// Écrire le texte sur une surface SDL -SDL_Surface *TTF_RenderText_Solid(TTF_Font *font, const char *text, SDL_Color fg) ; -// Fermer la police -void TTF_CloseFont(TTF_Font *font) ; -*/ \ No newline at end of file diff --git a/fonctions_SDL.h b/fonctions_SDL.h deleted file mode 100644 index ce9a477f94a5fdff1944e8ce0c39f97345213ab0..0000000000000000000000000000000000000000 --- a/fonctions_SDL.h +++ /dev/null @@ -1,23 +0,0 @@ -/** - * \file fonctions_SDL.h - * \brief header des fonctions SDL - * \author Guillaume Vautrin - * \version 1.0 - */ - - -#ifndef FONCTIONS_SDL_H -#define FONCTIONS_SDL_H - -#include <SDL2/SDL.h> -#include <SDL2/SDL_ttf.h> - -SDL_Texture* charger_image (const char* nomfichier, SDL_Renderer* renderer); - -SDL_Texture* charger_image_transparente(const char* nomfichier, SDL_Renderer* renderer, Uint8 r, Uint8 g, Uint8 b) ; - -SDL_Texture* charger_texte (const char* message, SDL_Renderer* renderer, TTF_Font *font, SDL_Color color); - -void render_texte(SDL_Renderer *renderer, int x, int y, int w, int h, SDL_Texture* texte); - -#endif \ No newline at end of file diff --git a/gestion_fichiers.c b/gestion_fichiers.c index 2e43a2c84b553e95fd0aa33720c9c1777bb1c3eb..f5e5761406c2d5bbc09112c4d4c133753f85e5e6 100644 --- a/gestion_fichiers.c +++ b/gestion_fichiers.c @@ -9,6 +9,7 @@ char** allouer_tab_2D (int lig, int col){ + //Allocation d'un tableau de caractère à 2 dimensions char ** tab = malloc(lig * sizeof(char *)); for(int i=0; i<lig; i++){ tab[i] = malloc(col * sizeof(char)); @@ -18,6 +19,7 @@ char** allouer_tab_2D (int lig, int col){ } void desallouer_tab_2D (char** tab, int lig){ + //désallocation d'un tab de car 2D for (int i=0; i<lig; i++){ free(tab[i]); } @@ -25,6 +27,7 @@ void desallouer_tab_2D (char** tab, int lig){ } void afficher_tab_2D (char** tab, int lig, int col){ + //Affiche le tableau 2D for (int i=0; i<lig; i++){ for (int j=0; j<col; j++){ printf("%c", tab[i][j]); @@ -36,6 +39,7 @@ void afficher_tab_2D (char** tab, int lig, int col){ } void taille_fichier (const char* nomFichier, int* nbLig, int* nbCol){ + //Donne la taille d'un fichier texte (colonne et ligne) char test[3000]; //Stocke les caractères d'une ligne int ligne = 0; // nb de lignes int colonne =0; // nb de colonnes @@ -60,6 +64,7 @@ void taille_fichier (const char* nomFichier, int* nbLig, int* nbCol){ } char** lire_fichier (const char* nomFichier){ + //Traduit le contenu d'un fichier dans un tableau de char FILE* fichier = fopen(nomFichier, "r"); if (fichier == NULL){ printf("Erreur: fichier inaccessible \n"); @@ -93,6 +98,7 @@ char** lire_fichier (const char* nomFichier){ } void genere_fichier (const char* nomFichier, char** source, int ligne, int colonne){ + //Génère un fichier a partir d'un tableau de caractère FILE* fichier = NULL; fichier = fopen(nomFichier, "w"); if (fichier !=NULL){ diff --git a/graphisme.c b/graphisme.c index 4b57947f643fa7fb8d4bea0f6844a23334813abc..9f3b53b41ae447cca5d7a274e6790eeeb61da60d 100644 --- a/graphisme.c +++ b/graphisme.c @@ -15,7 +15,25 @@ void clean_textures(textures_t *textures){ if (textures->fond != NULL){ SDL_DestroyTexture(textures->fond); } - + if (textures->comptoire != NULL){ + SDL_DestroyTexture(textures->comptoire); + } + + if (textures->envoi[0] != NULL){ + SDL_DestroyTexture(textures->envoi[0]); + } + if (textures->frigo[0] != NULL){ + SDL_DestroyTexture(textures->frigo[0]); + } + if (textures->four[0] != NULL){ + SDL_DestroyTexture(textures->four[0]); + } + if (textures->lavabo[0] != NULL){ + SDL_DestroyTexture(textures->lavabo[0]); + } + if (textures->poubelle != NULL){ + SDL_DestroyTexture(textures->poubelle); + } } void nettoyage_graphisme (SDL_Renderer *renderer, textures_t *textures, SDL_Window *fenetre){ @@ -27,6 +45,13 @@ void nettoyage_graphisme (SDL_Renderer *renderer, textures_t *textures, SDL_Wind void init_textures (SDL_Renderer *renderer, textures_t *textures, TTF_Font *font){ textures->fond = charger_image("Ressources/fond1.bmp", renderer); textures->joueur = charger_image ("Ressources/joueur.bmp", renderer); + textures->comptoire = charger_image ("Ressources/compt0.bmp", renderer); + textures->envoi[0] = charger_image ("Ressources/envoi0.bmp", renderer); + textures->frigo[0] = charger_image ("Ressources/frigo0.bmp", renderer); + textures->four[0] = charger_image ("Ressources/four0.bmp", renderer); + textures->poubelle = charger_image ("Ressources/trash0.bmp", renderer); + textures->lavabo[0] = charger_image ("Ressources/lavabo0.bmp", renderer); + // SDL_Color color = { 255, 0, 255 }; //... = charger_texte ("Score : ", renderer, font, color); } @@ -37,20 +62,26 @@ void apply_background (SDL_Renderer *renderer, textures_t *textures){ } } -void apply_sprite (SDL_Renderer *renderer, SDL_Texture *image, sprite_t *sprite){ - // applique la texture d'un sprite - - SDL_Rect SrC = create_SDL_rect_from_texture(image); - SDL_Rect Des = create_SDL_rect_from_sprite(sprite); - SDL_RenderCopy(renderer, image, &SrC , &Des); -} - void apply_graphics (SDL_Renderer *renderer, textures_t *textures, world_t *world){ //maj les texture selon la position des éléments différents if (textures->joueur !=NULL){ - apply_sprite (renderer, textures->joueur, &world->joueur); + SDL_RenderCopy(renderer, textures->joueur, NULL, &world->joueur.rect); + } + if (textures->poubelle !=NULL){ + SDL_RenderCopy(renderer, textures->poubelle, NULL, &world->poubelle.rect); + } + if (textures->lavabo[0] !=NULL){ + SDL_RenderCopy(renderer, textures->lavabo[0], NULL, &world->lavabo.rect); + } + if (textures->frigo[0] !=NULL){ + SDL_RenderCopy(renderer, textures->frigo[0], NULL, &world->frigo.rect); + } + if (textures->four[0] !=NULL){ + SDL_RenderCopy(renderer, textures->four[0], NULL, &world->four.rect); + } + if (textures->envoi[0] !=NULL){ + SDL_RenderCopy(renderer, textures->envoi[0], NULL, &world->envoi.rect); } - } @@ -62,7 +93,7 @@ void colorier_rect (SDL_Renderer *renderer, SDL_Rect rectangle, SDL_Color couleu } } } - +/* SDL_Rect create_SDL_rect_from_texture (SDL_Texture * texture){ //Permet de créer un SDL_rect retournant la texture de la taille de la texture (SOURCE) int w; @@ -80,11 +111,7 @@ SDL_Rect create_SDL_rect (int x, int y, int w, int h){ rectangle.h = h; return rectangle; } - -SDL_Rect create_SDL_rect_from_sprite (sprite_t* sprite){ - //Permet de créer un SDL_rect basé sur les données d'un sprite - return create_SDL_rect (sprite->x, sprite->y, sprite->w, sprite->h); -} +*/ void update_graphics (SDL_Renderer *renderer, world_t *world, textures_t *textures){ @@ -93,4 +120,45 @@ void update_graphics (SDL_Renderer *renderer, world_t *world, textures_t *textur apply_graphics(renderer, textures, world); SDL_RenderPresent(renderer); // Récupère les infos actualisés de render et les affiches -} \ No newline at end of file +} + + + +SDL_Texture* charger_image (const char* nomfichier, SDL_Renderer* renderer){ + //Charge une image et retourne la surface de texture associée + SDL_Surface * image = SDL_LoadBMP(nomfichier); + SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, image); + SDL_FreeSurface(image); + return texture; +} + +SDL_Texture* charger_image_transparente(const char* nomfichier, SDL_Renderer* renderer, Uint8 r, Uint8 g, Uint8 b){ + SDL_Surface * image = SDL_LoadBMP(nomfichier); + SDL_SetColorKey(image, SDL_TRUE, SDL_MapRGB(image->format, r, g, b)); + SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, image); + SDL_FreeSurface(image); + return texture; +} +//int SDL_SetColorKey(SDL_Surface* surface, int flag, Uint32 key) ; // défini la couleur transparente dans une surface + +//Uint32 SDL_MapRGB(const SDL_PixelFormat* format, Uint8 r, Uint8 g, Uint8 b); //map les couleurs d'une bitmap + +SDL_Texture* charger_texte (const char* message, SDL_Renderer* renderer, TTF_Font *font, SDL_Color color){ + SDL_Surface* texte = TTF_RenderText_Blended(font, message, color); + SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, texte); + SDL_FreeSurface(texte); + return texture; +} + +void render_texte(SDL_Renderer *renderer, int x, int y, int w, int h, SDL_Texture* texte){ + SDL_Rect rect = {x, y, w, h}; + SDL_RenderCopy(renderer, texte, NULL, &rect); +} + +/* +TTF_Font *TTF_OpenFont(const char *file, int size) ; //charge la police et applique la taille du texte +// Écrire le texte sur une surface SDL +SDL_Surface *TTF_RenderText_Solid(TTF_Font *font, const char *text, SDL_Color fg) ; +// Fermer la police +void TTF_CloseFont(TTF_Font *font) ; +*/ \ No newline at end of file diff --git a/graphisme.h b/graphisme.h index 41a60c881c5bba7fac12681034f74f78c70dac8b..022c35e7b336be5ac41792a171f364c384da285e 100644 --- a/graphisme.h +++ b/graphisme.h @@ -9,13 +9,19 @@ #ifndef GRAPHISME_H #define GRAPHISME_H -#include "fonctions_SDL.h" #include "logique.h" #include "constantes.h" struct textures_s{ SDL_Texture* fond; /*!< Texture liée à l'image du fond de l'écran. */ SDL_Texture* joueur ; /* Texture du joueur*/ + SDL_Texture* comptoire ; /*< Texture des comptoires */ + SDL_Texture* envoi[1] ; /*< Tableau de texture de la zone d'envoi */ + SDL_Texture* four[1] ; /*< Tableau de texture du four */ + SDL_Texture* lavabo[1] ; /*< Tableau de texture du frigo */ + SDL_Texture* poubelle ; /*< Texture de la poubelle */ + SDL_Texture* frigo[1] ; /*< Tableau de texture du frigo */ + //TTF_Font* police; /*Texture de la police d'écriture*/ }; /** @@ -25,6 +31,14 @@ struct textures_s{ typedef struct textures_s textures_t; +SDL_Texture* charger_image (const char* nomfichier, SDL_Renderer* renderer); + +SDL_Texture* charger_image_transparente(const char* nomfichier, SDL_Renderer* renderer, Uint8 r, Uint8 g, Uint8 b) ; + +SDL_Texture* charger_texte (const char* message, SDL_Renderer* renderer, TTF_Font *font, SDL_Color color); + +void render_texte(SDL_Renderer *renderer, int x, int y, int w, int h, SDL_Texture* texte); + /** * \brief La fonction nettoie les textures * \param textures les textures diff --git a/logique.c b/logique.c index 63034b2c51c75e91595cbd611c4de86c32c322b6..9dcb0dc055235181c21c42f2827c423d310a140d 100644 --- a/logique.c +++ b/logique.c @@ -27,7 +27,7 @@ void init_data(world_t * world){ //faux build_sprite_unique(&world->lavabo, 'L', LAVABO_LARGEUR, LAVABO_HAUTEUR, world->map); build_sprite_unique(&world->poubelle, 't', POUBELLE_LARGEUR, POUBELLE_HAUTEUR, world->map); build_sprite_unique(&world->envoi, 'e', ZONE_ENVOI_LARGEUR, ZONE_ENVOI_HAUTEUR, world->map); - build_sprites_tab(&world, 'X', BLOC_COMPT_SIZE, BLOC_COMPT_SIZE); + //build_sprites_tab(&world, 'X', BLOC_COMPT_SIZE, BLOC_COMPT_SIZE); /* @@ -72,13 +72,14 @@ void build_sprite_unique (sprite_t *sprite, char nom, int largeur, int hauteur, //Gestion des positions possibles. if (comptX == largeur && comptY == hauteur){ - init_sprite(sprite, nom, x, y, largeur, hauteur, 0, 0); + init_sprite(sprite, nom, x, y+1-hauteur, largeur, hauteur, 0, 0); } if (comptX == hauteur && comptY == largeur){ - init_sprite(sprite, nom, x, y, hauteur, largeur, 0, 0); + init_sprite(sprite, nom, x, y+1-largeur, hauteur, largeur, 0, 0); } + printf ("\n Sprite : %c, x: %d, y: %d", sprite->nom, sprite->rect.x, sprite->rect.y); } - +/* void build_sprites_tab (world_t* world, char nomSprite, int largeur, int hauteur){ for (int i=0; i<SCREEN_HEIGHT; i++){ @@ -86,14 +87,14 @@ void build_sprites_tab (world_t* world, char nomSprite, int largeur, int hauteur //Parcours du tableau pour repérer le premier caractère d'un } } -} +}*/ -void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v, int state){ //faux +void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v, int state){ //La fonction initialise tous les composants d'un sprite - sprite->x = x; - sprite->y = y; - sprite->w = w; - sprite->h = h; + sprite->rect.x = x; + sprite->rect.y = y; + sprite->rect.w = w; + sprite->rect.h = h; sprite->v = v; sprite->etat = state; sprite->is_visible = 0; @@ -145,34 +146,34 @@ int estFini(world_t *world){ return world->gameover; } -void limites_externes (sprite_t *sprite, world_t *world){ +void limites_externes (sprite_t *sprite){ //Défini les limites selon les murs - if (sprite->x + sprite->w > SCREEN_WIDTH-SIZE_MUR){ + if (sprite->rect.x + sprite->rect.w > SCREEN_WIDTH-SIZE_MUR){ //mur droite - sprite->x = SCREEN_WIDTH - (SIZE_MUR + sprite->w); + sprite->rect.x = SCREEN_WIDTH - (SIZE_MUR + sprite->rect.w); } - if (sprite->x < SIZE_MUR){ + if (sprite->rect.x < SIZE_MUR){ //mur gauche - sprite->x = SIZE_MUR; + sprite->rect.x = SIZE_MUR; } - if (sprite->y + sprite->h > SCREEN_HEIGHT-SIZE_MUR){ + if (sprite->rect.y + sprite->rect.h > SCREEN_HEIGHT-SIZE_MUR){ //mur bas - sprite->y = SCREEN_HEIGHT - (SIZE_MUR + sprite->h); + sprite->rect.y = SCREEN_HEIGHT - (SIZE_MUR + sprite->rect.h); } - if (sprite->y < SIZE_MUR){ + if (sprite->rect.y < SIZE_MUR){ //mur haut - sprite->y = SIZE_MUR; + sprite->rect.y = SIZE_MUR; } } void reset_sprite_on_map (sprite_t *sprite, world_t *world){ //On efface la position du joueur sur map - for (int i=sprite->y; i < sprite->y + sprite->h ; i++){ - for (int j = sprite->x ; j < sprite->x + sprite->w ; j++){ + for (int i=sprite->rect.y; i < sprite->rect.y + sprite->rect.h ; i++){ + for (int j = sprite->rect.x ; j < sprite->rect.x + sprite->rect.w ; j++){ if (world->map[i][j]== sprite->nom){ world->map[i][j] = ' '; } @@ -182,87 +183,13 @@ void reset_sprite_on_map (sprite_t *sprite, world_t *world){ void place_sprite_on_map (sprite_t *sprite, world_t *world){ //on écrit la position du joueur sur la map - for (int i=sprite->y; i < sprite->y + sprite->h ; i++){ - for (int j = sprite->x ; j < sprite->x + sprite->w ; j++){ + for (int i=sprite->rect.y; i < sprite->rect.y + sprite->rect.h ; i++){ + for (int j = sprite->rect.x ; j < sprite->rect.x + sprite->rect.w ; j++){ world->map[i][j]= sprite->nom; } } } -void deplace_bas (sprite_t *sprite, world_t *world){ - int compteur =0; - set_bas(&world->joueur); - world->joueur.y += world->joueur.v; - reset_sprite_on_map(sprite, world); - - if (world->map[sprite->y + SIZE_JOUEUR][sprite->x] != ' ' || world->map[sprite->y + SIZE_JOUEUR][sprite->x + SIZE_JOUEUR] != ' '){ - //Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit - for (int y= sprite->y; y<SIZE_JOUEUR; y++){ - if (world->map[y][sprite->x] == ' '){ - compteur++; - } - } - sprite->x -= compteur; - } -} - -void deplace_haut (sprite_t *sprite, world_t *world){ - int compteur =0; - set_haut(&world->joueur); - world->joueur.y -= world->joueur.v; - reset_sprite_on_map(sprite, world); - - //déplace vers le haut - if (world->map[sprite->y][sprite->x] != ' ' || world->map[sprite->y][sprite->x + SIZE_JOUEUR] != ' '){ - //Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit - for (int y= sprite->y; y<SIZE_JOUEUR; y++){ - if (world->map[y][sprite->x] != ' '){ - compteur++; - } - } - sprite->x += compteur; - } - -} - -void deplace_droite (sprite_t *sprite, world_t *world){ - int compteur =0; - set_droite(&world->joueur); - world->joueur.x += world->joueur.v; - reset_sprite_on_map(sprite, world); - - //déplace vers la droite - if (world->map[sprite->y][sprite->x + SIZE_JOUEUR] != ' ' || world->map[sprite->y + SIZE_JOUEUR][sprite->x + SIZE_JOUEUR] != ' '){ - //Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit - for (int x= sprite->x; x<SIZE_JOUEUR; x++){ - if (world->map[sprite->y][x] == ' '){ - compteur++; - } - } - sprite->x -= compteur; - } - -} - -void deplace_gauche (sprite_t *sprite, world_t *world){ - int compteur =0; - set_gauche(sprite); - sprite->x -= sprite->v; - reset_sprite_on_map(sprite, world); - //déplace vers la gauche - if (world->map[sprite->y][sprite->x] != ' ' || world->map[sprite->y + sprite->h][sprite->x] != ' '){ - //Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit - for (int x= sprite->x; x<sprite->w; x++){ - if (world->map[sprite->y][x] != ' '){ - compteur++; - } - } - sprite->x += compteur; - } - - -} - void gestion_events(SDL_Event *event, world_t *world){ SDL_PollEvent(event); @@ -275,22 +202,22 @@ void gestion_events(SDL_Event *event, world_t *world){ world->gameover = 1; break; //Déplacement du joueur case SDLK_UP: - world->joueur.y -= world->joueur.v; + world->joueur.rect.y -= world->joueur.v; //deplace_haut(&world->joueur, world); break; case SDLK_DOWN: - world->joueur.y += world->joueur.v; + world->joueur.rect.y += world->joueur.v; //deplace_bas(&world->joueur, world); break; case SDLK_RIGHT: - world->joueur.x += world->joueur.v; + world->joueur.rect.x += world->joueur.v; //deplace_droite(&world->joueur, world); break; case SDLK_LEFT: - world->joueur.x -= world->joueur.v; + world->joueur.rect.x -= world->joueur.v; //deplace_gauche(&world->joueur, world); break; //case SDLK_SPACE: @@ -351,7 +278,7 @@ char** init_map (){ void update_data (world_t *world){ const char *nomSave = "Ressources/save.txt"; - limites_externes(&world->joueur, world); + limites_externes(&world->joueur); place_sprite_on_map(&world->joueur, world); //printf("Sprite joueur : x : %d | y: %d \n", world->joueur.x, world->joueur.y); genere_fichier(nomSave, world->map, SCREEN_HEIGHT, SCREEN_WIDTH); diff --git a/logique.h b/logique.h index da6a5bfb23bd6ff8fae53f851f6e7ddd66968d3f..95c913af0f12794cb9a91e4e86c3ba5b35426205 100644 --- a/logique.h +++ b/logique.h @@ -9,6 +9,8 @@ #ifndef LOGIQUE_H #define LOGIQUE_H +#include <SDL2/SDL.h> +#include <SDL2/SDL_ttf.h> #include <stdio.h> #include <stdlib.h> #include <time.h> @@ -23,13 +25,10 @@ */ struct sprite_s{ char nom; /*!< char du sprite utilisé sur map*/ - int x; /*!< abscisse du centre du sprite*/ - int y; /*!< ordonnée du centre du sprite*/ - int h; /*!< hauteur du sprite*/ - int w; /*!< largeur du sprite*/ int v; /*!< vitesse du sprite*/ int etat; /*!< état du sprite; permet de varier son apparence */ int is_visible; /*!< Gère la visibilité d'un sprite; 0 si visible, i sinon */ + SDL_Rect rect; /*!< structure de position du sprite*/ }; /** @@ -181,39 +180,7 @@ int return_state (sprite_t *sprite); * @param sprite sprite pour lequel on test les limites * @param world données du monde */ -void limites_externes (sprite_t *sprite, world_t *world); - -/** - * @brief Déplacement d'un sprite vers la gauche + limites - * - * @param sprite sprite qui se déplace - * @param world données du monde - */ -void deplace_gauche (sprite_t *sprite, world_t *world); - -/** - * @brief Déplacement d'un sprite vers la droite + limites - * - * @param sprite sprite qui se déplace - * @param world données du monde - */ -void deplace_droite (sprite_t *sprite, world_t *world); - -/** - * @brief Déplacement d'un sprite vers le haut + limites - * - * @param sprite sprite qui se déplace - * @param world données du monde - */ -void deplace_haut (sprite_t *sprite, world_t *world); - -/** - * @brief Déplacement d'un sprite vers le bas + limites - * - * @param sprite sprite qui se déplace - * @param world données du monde - */ -void deplace_bas (sprite_t *sprite, world_t *world); +void limites_externes (sprite_t *sprite); /** * @brief Retire le sprite de la map - avant maj d'un déplacement diff --git a/main.c b/main.c index b412067f890ca76a380113239d3c393c00f8768d..760161634236ed96eb35955f70926dad6dc47596 100644 --- a/main.c +++ b/main.c @@ -10,7 +10,6 @@ #include "logique.h" #include "constantes.h" #include "gestion_fichiers.h" -#include "fonctions_SDL.h" #include "graphisme.h" #include "math.h" #include <time.h>