diff --git a/SDL#1/exe b/SDL#1/exe new file mode 100755 index 0000000..a337d2f Binary files /dev/null and b/SDL#1/exe differ diff --git a/SDL#1/main.cpp b/SDL#1/main.cpp new file mode 100644 index 0000000..e72a87e --- /dev/null +++ b/SDL#1/main.cpp @@ -0,0 +1,48 @@ +#include "main.h" + +// On cree un sdl-toplevel statique +static sdltl *mgr; + + + +int main(int argc, char* argv[]) { + + /* [0] Initialisation de SDL + =========================================================*/ + mgr = new sdltl("Ma fenetre SDL", WIN_WIDTH, WIN_HEIGHT); + + /* [1] Creation de la fenetre + =========================================================*/ + if( !mgr->status() ) + cout << "Erreur: " << SDL_GetError() << endl; + + + /* [3] On definit le background color + =========================================================*/ + // mgr->setBackground(255, 0, 255); + mgr->setBackground(255, 0, 0); + bool imageLoaded = mgr->setImage( "src/1.bmp" ); + mgr->update(); + + + + /* [n-1] Boucle infinie + =========================================================*/ + // while(1){ + mgr->waitEvent(SDL_QUIT, &eventHandler); + // } + // SDL_Delay(5000); + + + + /* [n] Fin d'execution + =========================================================*/ + delete mgr; + return 0; +} + + +void eventHandler(SDL_Event *e){ + cout << "Ferme" << endl; + delete mgr; +} \ No newline at end of file diff --git a/SDL#1/main.h b/SDL#1/main.h new file mode 100644 index 0000000..e2a507d --- /dev/null +++ b/SDL#1/main.h @@ -0,0 +1,27 @@ +#ifndef DEF_MAIN_H + + #define DEF_MAIN_H + + /* [LIB] Internes + =========================================================*/ + #include + + /* [LIB] Externes + =========================================================*/ + #include "sdltl.h" // gestion de la fenetre et SDL + #include "sprite.h" // gestion des sprites + + /* [NS] Namespace + =========================================================*/ + using namespace std; + + /* [CONST] Constantes et enumerations + =========================================================*/ + #define WIN_WIDTH 600 + #define WIN_HEIGHT 400 + + /* [FONCTIONS] Fonctions du corps + =========================================================*/ + void eventHandler(SDL_Event *e); + +#endif \ No newline at end of file diff --git a/SDL#1/main.o b/SDL#1/main.o new file mode 100644 index 0000000..8a70f35 Binary files /dev/null and b/SDL#1/main.o differ diff --git a/SDL#1/makefile b/SDL#1/makefile new file mode 100644 index 0000000..40512e5 --- /dev/null +++ b/SDL#1/makefile @@ -0,0 +1,41 @@ +.PHONY: init, clean, mrproper +CC=g++ +FLAGS=`pkg-config sdl2 --cflags --libs` + +# INIT > STRUCTURE DE FICHIERS POUR LES EXECUTABLES +init: clean + mkdir dep.o + + + + + + + + + + +# EXECUTABLE > DEPENDANCES DE L'EXECUTABLE +all: init main.o clean + rm -r dep.o + $(CC) main.o -o exe $(FLAGS) + +# AMORCE > PROGRAMME PRINCIPAL +main.o: main.cpp + $(CC) -c $< -o main.o $(FLAGS) + + + + + + + + +# RESET > SUPPRESSION DES FICHIERS +clean: + touch init.o + rm -r *.o + +# RESET FOR REBUILD > SUPPRESSION DE L'EXECUTABLE +mrproper: + rm exe diff --git a/SDL#1/sdltl.cpp b/SDL#1/sdltl.cpp new file mode 100644 index 0000000..5290f44 --- /dev/null +++ b/SDL#1/sdltl.cpp @@ -0,0 +1,103 @@ +/* [CONSTRUCTOR] Constructeur de la classe +=========================================================*/ +sdltl::sdltl(const char *t, int w, int h){ + SDL_Init( SDL_INIT_EVERYTHING ); + + _window = NULL; + _screen = NULL; + + // Creation de la fenetre + _window = SDL_CreateWindow( + t, + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + w, + h, + SDL_WINDOW_SHOWN + ); + + // Gestion erreur + if( _window == NULL ) + _status = false; + + // On recupere la surface + _screen = SDL_GetWindowSurface( _window ); + + // On retourne que tout s'est bien passe + _status = true; +} + +/* [DESTROYER] Destructeur de la classe +=========================================================*/ +sdltl::~sdltl(){ + SDL_DestroyWindow( _window ); + SDL_Quit(); +} + +/* [STATUS] Retourne le status +=========================================================*/ +bool sdltl::status(){ return _status; } + + +/* [WINDOW] Retourne la fenetre +=========================================================*/ +SDL_Window* sdltl::window(){ return _window; } + + +/* [SCREEN] Retourne la fenetre +=========================================================*/ +SDL_Surface* sdltl::screen(){ return _screen; } + + +/* [SETBACKGROUND] Modifie la couleur de fond +=========================================================*/ +void sdltl::setBackground(int r, int g, int b){ + Uint32 color = SDL_MapRGB( _screen->format, r, g, b ); + + SDL_FillRect( _screen, NULL, color ); +} + +/* [SETIMAGE] Met une image en fond +=========================================================*/ +bool sdltl::setImage(const char *url){ + SDL_Surface *image = NULL; + image = SDL_LoadBMP( url ); + + // Si erreur de chargement image + if( image == NULL ) + return false; + + SDL_Rect dimensions; + dimensions.x = 0; + dimensions.y = 0; + SDL_GetWindowSize(_window, &dimensions.w, &dimensions.h); + + SDL_BlitSurface( image, NULL, _screen, &dimensions); + + // On libere la surface pour l'image + SDL_FreeSurface(image); + image = NULL; + + return true; +} + +/* [UPDATE] Mise a jour du rendu +=========================================================*/ +void sdltl::update(){ + SDL_UpdateWindowSurface( _window ); +} + +/* [WAITEVENT] Attends un evenement pour executer +=========================================================*/ +void sdltl::waitEvent(SDL_EventType t, void(*handler)(SDL_Event*)){ + SDL_Event event; + + // On attends un evenement + while( SDL_PollEvent(&event) ){ + + // quand evenement, si type = t + if( event.type == t ) + (*handler)(&event); + + } +} \ No newline at end of file diff --git a/SDL#1/sdltl.h b/SDL#1/sdltl.h new file mode 100644 index 0000000..2aa0bab --- /dev/null +++ b/SDL#1/sdltl.h @@ -0,0 +1,45 @@ +#ifndef DEF_SDLTL_H + + #define DEF_SDLTL_H + + /* [LIBS] Internes + =========================================================*/ + #include "SDL.h" + + /* [LIBS] Externes + =========================================================*/ + + + /* [NS] Namespaces + =========================================================*/ + using namespace std; + + + class sdltl{ + + public: + sdltl(const char *t, int w, int h); + ~sdltl(); + SDL_Window *window(); + SDL_Surface *screen(); + bool status(); + void setBackground(int r, int g, int b); + bool setImage(const char *url); + void waitEvent(SDL_EventType t, void(*handler)(SDL_Event*) ); + + void update(); + + private: + bool _status; + SDL_Window *_window; + SDL_Surface *_screen; + + }; + + + /* [BODY] Inclusion du corps + =========================================================*/ + #include "sdltl.cpp" + + +#endif \ No newline at end of file diff --git a/SDL#1/sprite.h b/SDL#1/sprite.h new file mode 100644 index 0000000..917b221 --- /dev/null +++ b/SDL#1/sprite.h @@ -0,0 +1,34 @@ +#ifndef DEF_SPRITE_H + + #define DEF_SPRITE_H + + /* [LIBS] Internes + =========================================================*/ + #include "SDL.h" + + /* [LIBS] Externes + =========================================================*/ + + + /* [NS] Namespaces + =========================================================*/ + using namespace std; + + + class Sprite{ + + public: + Sprite(); + ~Sprite(); + + private: + + }; + + + /* [BODY] Inclusion du corps + =========================================================*/ + // #include "sprite.cpp" + + +#endif \ No newline at end of file diff --git a/SDL#1/src/01.jpg b/SDL#1/src/01.jpg new file mode 100644 index 0000000..a286e6c Binary files /dev/null and b/SDL#1/src/01.jpg differ diff --git a/SDL#1/src/1.bmp b/SDL#1/src/1.bmp new file mode 100644 index 0000000..5641e75 Binary files /dev/null and b/SDL#1/src/1.bmp differ