Skip to content
Snippets Groups Projects
Commit ffba5324 authored by marouaneYATIME's avatar marouaneYATIME
Browse files

premier message

parent adb66e2d
No related branches found
No related tags found
No related merge requests found
CFLAGS = -Wall -O3 `sdl2-config --cflags`
LDFLAGS = -m64 `sdl2-config --libs` -lSDL2_ttf -lm
INC = sdl2.h logic.h graphics.h const.h data.h sdl2-ttf.h event.h
SRC = main.c sdl2.c logic.c graphics.c data.c sdl2-ttf.c event.c
OBJ = $(SRC:%.c=%.o)
PROG = fastcar
%.o: %.c $(INC)
gcc $(CFLAGS) -c $<
fastcar: $(OBJ)
gcc $(CFLAGS) $(OBJ) $(LDFLAGS) -o $@
doc: $(PROG)
doxygen ./$(PROG)
make -C latex
clean:
rm -f *~ *.o $(PROG)
rm -rf latex html
CFLAGS = -Wall -O3 -Dmain=SDL_main
LDFLAGS = -m64 -lm -lmingw32 -lSDL2main -lSDL2 -lSDL2_ttf
SDL2_INCLUDE_DIR = C:\SDL2-2.0.12\x86_64-w64-mingw32\include
SDL2_LIBRARIES_DIR = C:\SDL2-2.0.12\x86_64-w64-mingw32\lib
INC = sdl2.h logic.h graphics.h const.h data.h sdl2-ttf.h event.h
SRC = main.c sdl2.c logic.c graphics.c data.c sdl2-ttf.c event.c
OBJ = $(SRC:%.c=%.o)
PROG = fastcar.exe
%.o: %.c $(INC)
gcc $(CFLAGS) -c $< -I $(SDL2_INCLUDE_DIR)
$(PROG): $(OBJ)
gcc $(CFLAGS) $(OBJ) $(LDFLAGS) -o $@ -L $(SDL2_LIBRARIES_DIR)
doc: $(PROG)
doxygen $(PROG)
.PHONY: clean
clean:
del /f /q *.o *~ $(PROG)
rd /s /q latex html
/**
* \file const.h
* \brief Rassemblement des constantes utiles au jeu
* \author YATIME Marouane - AIT OUALI Marouane
* \date 26 septembre 2021
*/
#ifndef __CONST_H__
#define __CONST_H__
/**
* \brief Largeur de l'écran de jeu
*/
#define SCREEN_WIDTH 840
/**
* \brief Hauteur de l'écran de jeu
*/
#define SCREEN_HEIGHT 650
/**
* \brief Taille d'un vaisseau
*/
#define SHIP_SIZE 100
/**
* \brief Nombre de bullets
*/
#define NB_BULLETS 30
/**
* \brief Nombre de bullets
*/
#define BULLET_SIZE 8
/**
* \brief Hauteur de la ligne d'arrivée
*/
#define FINISH_LINE_HEIGHT 10
/**
* \brief Pas de déplacement horizontal du vaisseau
*/
#define MOVING_STEP 10
/**
* \brief Vitesse initiale de déplacement vertical des éléments du jeu
*/
#define INITIAL_SPEED 2
#define NB_BACKGROUND 2000
#define NB_VOITURES 3
#endif
\ No newline at end of file
V1/data.h 0 → 100644
/**
* \file data.h
* \brief Gestion des données du jeu
* \author YATIME Marouane - AIT OUALI Marouane
* \date 26 septembre 2021
*/
#ifndef __DATA_H__
#define __DATA_H__
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "sdl2.h"
#include "sdl2-ttf.h"
#include "const.h"
enum{
SPACESHIP,
BULLET,
METEORE,
FINISH_LINE,
BACKGROUND,
};
enum{
CONTINUE,
EXIT,
LOOSE,
WIN,
};
/**
* \brief Représentation du sprite
*/
struct sprite_s{
double x; /*!<L'abscisse au centre*/
double y; /*!<L'ordonnée au centre*/
double w; /*!<largeur*/
double h; /*!<hauteur*/
char is_visible; /*!< Champ indiquant si le sprite est visible */
int type; /*!< Champ indiquant le type de sprite (cf l'enum de ce fichier) */
};
/**
* \brief Type qui correspond aux sprite
*/
typedef struct sprite_s sprite_t ;
/**
* \brief Représentation des bullets
*/
struct bullet_s{
sprite_t bullet;
double vy;
};
/**
* \brief Type qui correspond aux bullet
*/
typedef struct bullet_s bullet_t;
/**
* \brief Représentation des bullets
*/
struct bullets_s{
bullet_t bullet[NB_BULLETS];
int bullet_nb;
};
/**
* \brief Type qui correspond aux bullets
*/
typedef struct bullets_s bullets_t;
/**
* \brief Représentation d'un spaceship
*/
struct spaceship_s{
sprite_t spaceship;
bullets_t bullets;
};
/**
* \brief Type qui correspond à un spaceship
*/
typedef struct spaceship_s spaceship_t;
/**
* \brief Représentation du monde du jeu
*/
struct world_s{
spaceship_t spaceship;
sprite_t background;
sprite_t finish_line;
double vy; /*!< Champ indiquant la vitesse sur l'axe des y */
int gameover; /*!< Champ indiquant si l'on est à la fin du jeu */
Uint32 t0; /*!<Ticks de la première frame (SDL_GetTicks()) */
};
/**
* \brief Type qui correspond aux données du monde
*/
typedef struct world_s world_t;
#include "graphics.h"
int is_game_over(world_t *world);
void init_spaceship(spaceship_t *spaceship);
void init_sprite(sprite_t *sprite, double x, double y, double w, double h, int type);
void init_data(world_t *world);
void init_bullet(spaceship_t *spaceship);
void clean_data(world_t *world);
void update_background(world_t* world);
void update_data(world_t *world);
#endif
\ No newline at end of file
/**
* \file event.h
* \brief Gestion des entrées claviers du joueur
* \author YATIME Marouane - AIT OUALI Marouane
* \date 26 septembre 2021
*/
#ifndef __EVENT_H__
#define __EVENT_H__
#include <stdio.h>
#include <stdlib.h>
#include "sdl2.h"
#include "sdl2-ttf.h"
#include "const.h"
#include "data.h"
void handle_events(SDL_Event *event, world_t *world);
#endif
\ No newline at end of file
/**
* \file graphics.h
* \brief Gestion de l'affichage du jeu
* \author YATIME Marouane - AIT OUALI Marouane
* \date 26 septembre 2021
*/
#ifndef __GRAPHICS_H__
#define __GRAPHICS_H__
#include <stdio.h>
#include <stdlib.h>
#include "sdl2.h"
#include "sdl2-ttf.h"
#include "const.h"
/**
* \brief Représentation pour stocker les textures nécessaires à l'affichage graphique
*/
struct ressources_s{
SDL_Texture* background; /*!< Texture liée à l'image du fond de l'écran. */
SDL_Texture* spaceship; /*!< Texture liée au vaisseau affiché sur l'écran. */
SDL_Texture* finish_line; /*!< Texture liée à la ligne d'arrivée affiché sur l'écran. */
SDL_Texture* meteorite; /*!< Texture liée au météorite sur l'écran. */
SDL_Texture* bullet; /*!< Texture liée à la bullet sur l'écran. */
TTF_Font* font; /*!< Police d'écriture utilisé */
};
/**
* \brief Type qui correspond aux textures du jeu
*/
typedef struct ressources_s ressources_t;
#include "data.h"
void init_textures(SDL_Renderer *renderer, ressources_t *ressources);
void clean_textures(ressources_t *ressources);
void apply_background(SDL_Renderer *renderer, SDL_Texture *texture);
void apply_sprite(SDL_Renderer *renderer, SDL_Texture *texture, sprite_t* sprite);
void apply_bullets(SDL_Renderer *renderer, SDL_Texture *texture, bullets_t *bullets);
void print_all_text(SDL_Renderer *renderer, ressources_t *ressources, world_t *world);
void print_menu_debut(SDL_Renderer *renderer, ressources_t *ressources, world_t *world);
void print_menu_fin(SDL_Renderer *renderer, ressources_t *ressources, world_t *world);
void refresh_graphics(SDL_Renderer *renderer, world_t *world,ressources_t *ressources);
#endif
\ No newline at end of file
/**
* \file logic.h
* \brief Gestion de la logique du jeu (physique)
* \author YATIME Marouane - AIT OUALI Marouane
* \date 26 septembre 2021
*/
#ifndef __LOGIC_H__
#define __LOGIC_H__
#include <stdio.h>
#include <stdlib.h>
#include "sdl2.h"
#include "sdl2-ttf.h"
#include "const.h"
#include "data.h"
void screen_collide(sprite_t* s);
int sprites_collide(sprite_t *sp1, sprite_t *sp2);
void handle_sprites_collision(sprite_t *sp1, sprite_t *sp2, world_t *world);
#endif
\ No newline at end of file
/**
* \file sdl2-ttf.h
* \brief
* \author YATIME Marouane - AIT OUALI Marouane
* \date 26 septembre 2021
*/
#ifndef __SDL2_TTF_H
#define __SDL2_TTF_H
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
/**
* \brief La fonction initialise l'environnement TTF
*/
void init_ttf();
/**
* \brief La fonction charge une police
* \param path le chemin du fichier correpondant à la police
* \param font_size la taille de la police
* \return la police chargée
*/
TTF_Font * load_font(const char* path, int font_size);
/**
* \brief La fonction applique un texte dans une certaine police sur le renderer à une certaine position et avec une certaine dimension
* \param renderer le renderer
* \param x abscisse du coin en haut à gauche du texte
* \param y son abscisse
* \param w la largeur du message
* \param h sa hauteur
* \param text le texte à afficher
* \param font la police
*/
void apply_text(SDL_Renderer *renderer, int x, int y, int w, int h, const char *text, TTF_Font *font, SDL_Color color);
/**
* \brief La fonction nettoie une police en mémoire
* \param font la police
*/
void clean_font(TTF_Font * font);
/**
* \brief La fonction ferme et nettoie l'environnement TTF
*/
void clean_ttf();
#endif
/**
* \file sdl2.h
* \brief en-tête du module correspondant à une sur-couche de SDL2 pour simplifier son utilisation pour le projet
* \author YATIME Marouane - AIT OUALI Marouane
* \date 26 septembre 2021
*/
#ifndef __SDL2__H__
#define __SDL2__H__
#include <SDL2/SDL.h>
/**
* \brief La fonction nettoie le renderer et la fenêtre du jeu en mémoire
* \param renderer le renderer à nettoyer
* \param window la fenêtre à nettoyer
*/
void clean_sdl(SDL_Renderer *renderer,SDL_Window *window);
/**
* \brief La fonction charge une image et renvoie la texture correspondante où la couleur RGB (255, 0, 255) est rendue transparente.
* \param path est le chemin du fichier image. Le fichier doit être obligatoirement du BMP.
* \param renderer le renderer
* \return la surface SDL contenant l'image avec la couleur RGB (255,0,255) rendue transparente. Elle renvoie NULL si le chargement a échoué
* (ex. le fichier path n'existe pas)
*/
SDL_Texture *load_image(const char path[], SDL_Renderer *renderer);
/**
* \brief La fonction initialise la SDL.
* Elle crée la fenêtre du jeu ainsi que le renderer
* \param window la fenêtre du jeu
* \param renderer le renderer
* \param width largeur de l'écran de jeu
* \param height hauteur de l'écran de jeu
* \return -1 en cas d'erreur, 0 sinon
*/
int init_sdl(SDL_Window **window, SDL_Renderer **renderer, int width, int height);
/**
* \brief La fonction nettoie une texture en mémoire
* \param texture la texture à nettoyer
*/
void clean_texture(SDL_Texture *texture);
/**
* \brief La fonction permet d'appliquer une texture sur le renderer à une position donnée. La hauteur et la largeur est la même que celle de la texture.
* \param texture la texture que l'on va appliquer
* \param renderer le renderer qui va recevoir la texture
* \param x l'abscisse sur le renderer de l'endroit où est appliquée texture (point en haut à gauche de la surface)
* \param y l'ordonnée sur le renderer de l'endroit où est appliquée texture (point en haut à gauche de la surface)
*/
void apply_texture(SDL_Texture *texture,SDL_Renderer *renderer,int x, int y);
/**
* \brief La fonction vide le contenu graphique du renderer lié à l'écran de jeu
* \param renderer le renderer de l'écran
*/
void clear_renderer(SDL_Renderer *renderer);
/**
* \brief La fonction met à jour l'écran avec le contenu du renderer
* \param renderer le renderer de l'écran
*/
void update_screen(SDL_Renderer *renderer);
/**
* \brief La fonction met le programme en pause pendant un laps de temps
* \param time ce laps de temps en milliseconde
*/
void pause(int time);
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment