summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorOlivier Gayot <duskcoder@gmail.com>2015-01-10 19:47:32 +0100
committerOlivier Gayot <duskcoder@gmail.com>2015-01-10 20:01:52 +0100
commitf508e7191bd2f3eb7616e315e7e0d4a4b94c7914 (patch)
tree7bc1ed6498b3e2b7393ce791667bb9b50037e5fd /main.c
parent5ab5f72ba931e1d29a18a6b42e2cc2d73e291c4e (diff)
cleaned the initialization / shutdown a little
The initialized surfaces are converted to display format so that they are ready for fastblit. Signed-off-by: Olivier Gayot <duskcoder@gmail.com>
Diffstat (limited to 'main.c')
-rw-r--r--main.c415
1 files changed, 0 insertions, 415 deletions
diff --git a/main.c b/main.c
deleted file mode 100644
index 9fb8150..0000000
--- a/main.c
+++ /dev/null
@@ -1,415 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <SDL/SDL.h>
-#include "structures.h"
-#include "constantes.h"
-#include <SDL/SDL_image.h>
-#include <SDL/SDL_ttf.h>
-#include "prototypes.h"
-#include <time.h>
-
-int main (int argc, char *argv[])
-{
- srand (time(NULL));
- SURFACES surfaces;
- POSITIONS positions;
-
- /* XXX argc and argv are required in some implementations of the SDL library */
- (void) argc;
- (void) argv;
-
- Finitialisersurfaces (&surfaces);
- if (SDL_Init (SDL_INIT_VIDEO) == -1)
- {
- fprintf(stderr, "Erreur lors de l'ouverture de la SDL : %s", SDL_GetError());
- exit (EXIT_FAILURE);
- }
- surfaces.screen = surfaces.Pecran = SDL_SetVideoMode (XWIN,YWIN,32, SDL_HWSURFACE|SDL_DOUBLEBUF);
- if (surfaces.Pecran == NULL)
- {
- fprintf(stderr,"Impossible de charger la mémoire vidéo : %s", SDL_GetError());
- exit (EXIT_FAILURE);
- }
- SDL_EnableUNICODE (1);
- TTF_Init();
- SDL_WM_SetCaption ("WARCRAFT BATTLE",NULL);
- SDL_ShowCursor(SDL_DISABLE);
- if (Fchargerimages (&surfaces) < 0) {
- TTF_Quit();
- SDL_Quit();
- return -1;
- }
-
- Finitialiserpositions (&positions,&surfaces);
- Fmenuprincipal (&surfaces, &positions);
-
-
- //une fois le jeu quitté
- Fdechargerimages (&surfaces);
- SDL_EnableUNICODE (0);
- TTF_Quit();
- SDL_Quit();
-
-
- return 0;
-}
-
-void Finitialisersurfaces (SURFACES *surfaces)
-{
- int i;
- surfaces->Pcurseurennemis=NULL;
- surfaces->Pcurseurallies=NULL;
- surfaces->Pchoixvoleur=NULL;
- surfaces->Pchoixpretre=NULL;
- surfaces->Pchoixpaladin=NULL;
- surfaces->Pecran=NULL;
- surfaces->Pgobelin=NULL;
- surfaces->Ppaladin=NULL;
- surfaces->Ppretre=NULL;
- surfaces->Pvoleur=NULL;
- surfaces->Pmenujouer=NULL;
- surfaces->Pmenuoptions=NULL;
- surfaces->Pmenuquitter=NULL;
- surfaces->Pfondjeu=NULL;
- surfaces->Ppvpersos=NULL;
- surfaces->Ppmpersos=NULL;
- for (i=0;i<3;i++)
- surfaces->Tperso[i]=NULL;
- for (i=0;i<5;i++)
- surfaces->Tennemi[i]=NULL;
- for (i=0;i<3;i++)
- surfaces->Pnomactions[i]=NULL;
- surfaces->Ptextechoixmenu=NULL;
- surfaces->Pnbdegats=NULL;
- surfaces->Pcadrecible=NULL;
- surfaces->Pnomcible=NULL;
- surfaces->Pactive=NULL;
- surfaces->Pdesactive=NULL;
- surfaces->Ppvcible=NULL;
- surfaces->Ppmcible=NULL;
- surfaces->Pcadreactions=NULL;
- surfaces->Pactionselectionnee=NULL;
- surfaces->Pactiondesactivee=NULL;
- surfaces->Pmort=NULL;
- for (i=0;i<3;i++)
- surfaces->Pquantite[i]=NULL;
-}
-
-void Finitialiserpositions (POSITIONS *positions, SURFACES *surfaces)
-{
- int i,y=0,z=0;
- positions->Vpositionmenu.x = 0;
- positions->Vpositionmenu.y = 0;
- positions->Vpositionmenupretre.x = XWIN/2 - surfaces->Ppretre->w/2;
- positions->Vpositionmenupretre.y = YWIN - 20 - surfaces->Ppretre->h;
- positions->Vpositionmenupaladin.x = positions->Vpositionmenupretre.x/2 - surfaces->Ppaladin->w/2;
- positions->Vpositionmenupaladin.y = YWIN - 20 - surfaces->Ppaladin->h;
- positions->Vpositionmenuvoleur.x = XWIN/4*3 - surfaces->Pvoleur->w/2;
- positions->Vpositionmenuvoleur.y = YWIN - 20 - surfaces->Pvoleur->h;
- positions->Vpositiontextemenu.y = 362;
- positions->Vpositioncurseurennemis.x=1024;
- positions->Vpositioncurseurennemis.y=768;
- positions->Vpositioncurseurallies.x=1024;
- positions->Vpositioncurseurallies.y=768;
- positions->Vpositioncurseurennemis.w = surfaces->Pcurseurennemis->w;
- positions->Vpositioncurseurennemis.h = surfaces->Pcurseurennemis->h;
- positions->Vpositioncadrecible.y = 15;
- positions->Vpositioncadrecible.x = XWIN/2-50-surfaces->Pcadrecible->w/2;
- positions->Vpositioncadrecible.w = surfaces->Pcadrecible->w;
- positions->Vpositioncadrecible.h = surfaces->Pcadrecible->h;
- positions->Vpositioncadreactions.y = YWIN-surfaces->Pcadreactions->h;
- positions->Vpositioncadreactions.x = XWIN/2-50-surfaces->Pcadreactions->w/2;
- positions->Vpositioncadreactions.w = surfaces->Pcadreactions->w;
- positions->Vpositioncadreactions.h = surfaces->Pcadreactions->h;
- positions->Vpositionpvcible.x = 380;
- positions->Vpositionpvcible.y = 185;
- positions->Vpositionpmcible.x = 545;
- positions->Vpositionpmcible.y = 185;
- positions->Vpositiondegats.x=1024;
- positions->Vpositiondegats.y=768;
- for(i=0;i<3;i++)
- {
- positions->Vpositionactionselectionnee[i].x=positions->Vpositioncadreactions.x+5;
- positions->Vpositionactionselectionnee[i].y=positions->Vpositioncadreactions.y+5+44*i;
- positions->Vpositionnomactions[i].x=positions->Vpositioncadreactions.x+15;
- positions->Vpositionnomactions[i].y=positions->Vpositioncadreactions.y+12+44*i;
- positions->Vpositionquantite[i].y=positions->Vpositionnomactions[i].y;
- positions->Vpositionquantite[i].x=positions->Vpositioncadreactions.x+surfaces->Pcadreactions->w-45;
- }
- for (i=0;i < 16;i++)
- {
- positions->Vpositionactivedesactive[i].x = 471+51*y;
- positions->Vpositionactivedesactive[i].y = 101+19*z;
- if (y < 3)
- y++;
- else
- {
- y=0;
- z++;
- }
- }
-
- positions->last_cursor = (SDL_Rect){0, 0, 0, 0};
-}
-
-static void colorize_surface(SDL_Surface *surf, const SDL_PixelFormat *fmt, Uint32 incr)
-{
- int buffer = 0;
- Uint8 r, g, b;
- Uint8 rincr, gincr, bincr; /* delta */
-
- SDL_GetRGB(incr, fmt, &rincr, &gincr, &bincr);
-
- SDL_LockSurface(surf);
-
- for (int y = 0; y < surf->h; ++y) {
- for (int x = 0; x < surf->w; ++x) {
- Uint32 pixel = obtenirPixel(surf, x, y);
-
- SDL_GetRGB(pixel, fmt, &r, &g, &b);
-
- /* red increment */
- buffer = (int)r + rincr;
- if (buffer > 0xff) buffer = 0xff;
- else if (buffer < 0x0) buffer = 0;
- r = buffer;
-
- /* green increment */
- buffer = (int)g + gincr;
- if (buffer > 0xff) buffer = 0xff;
- else if (buffer < 0x0) buffer = 0;
- g = buffer;
-
- /* blue increment */
- buffer = (int)b + bincr;
- if (buffer > 0xff) buffer = 0xff;
- else if (buffer < 0x0) buffer = 0;
- b = buffer;
-
- pixel = SDL_MapRGB(fmt, r, g, b);
- definirPixel(surf, x, y, pixel);
- }
- }
-
- SDL_UnlockSurface(surf);
- SDL_SetColorKey(surf, SDL_SRCCOLORKEY, SDL_MapRGB(fmt, r, g, b));
-}
-
-static void colorize_every_red_surface(SURFACES *surfaces)
-{
- const SDL_PixelFormat *fmt = surfaces->Pecran->format;
- Uint32 red = SDL_MapRGB(fmt, 30, 0, 0);
-
- colorize_surface(surfaces->red_paladin, fmt, red);
- colorize_surface(surfaces->red_priest, fmt, red);
- colorize_surface(surfaces->red_thief, fmt, red);
-
- colorize_surface(surfaces->red_warrior_gobelin, fmt, red);
-}
-
-int Fchargerimages (SURFACES *surfaces)
-{
-#define LOAD_IMAGE(_name, _path) \
- if ((surfaces->_name = IMG_Load(_path)) == NULL) { \
- fprintf(stderr, "Impossible d'ouvrir " _path); \
- return -1; \
- }
-
- int i;
-
- LOAD_IMAGE(Pgobelin, "images/gobelin.bmp");
- LOAD_IMAGE(red_warrior_gobelin, "images/gobelin.bmp");
- LOAD_IMAGE(Ppaladin, "images/paladin.bmp");
- LOAD_IMAGE(Ppretre, "images/pretre.bmp");
- LOAD_IMAGE(Pvoleur, "images/voleur.bmp");
- LOAD_IMAGE(red_thief, "images/voleur.bmp");
- LOAD_IMAGE(red_paladin, "images/paladin.bmp");
- LOAD_IMAGE(red_priest, "images/pretre.bmp");
- LOAD_IMAGE(Pmenujouer, "images/menu_principal/jouer.bmp");
- LOAD_IMAGE(Pmenuoptions, "images/menu_principal/options.bmp");
- LOAD_IMAGE(Pmenuquitter, "images/menu_principal/quitter.bmp");
- LOAD_IMAGE(Pchoixvoleur, "images/menu_choix_classe/voleur.bmp");
- LOAD_IMAGE(Pchoixpretre, "images/menu_choix_classe/pretre.bmp");
- LOAD_IMAGE(Pchoixpaladin, "images/menu_choix_classe/paladin.bmp");
- LOAD_IMAGE(Pcurseurennemis, "images/jeu/curseur.bmp");
- LOAD_IMAGE(Pcurseurallies, "images/jeu/curseurpersos.bmp");
- LOAD_IMAGE(Pcadrecible, "images/jeu/cadre_cible.bmp");
- LOAD_IMAGE(Pactive, "images/jeu/active.bmp");
- LOAD_IMAGE(Pdesactive, "images/jeu/desactive.bmp");
- LOAD_IMAGE(Pcadreactions, "images/jeu/cadre_actions.bmp");
- LOAD_IMAGE(Pactionselectionnee, "images/jeu/cadre_actions_select.bmp");
- LOAD_IMAGE(Pactiondesactivee, "images/jeu/cadre_actions_unactive.bmp");
- LOAD_IMAGE(Pmort, "images/jeu/mort.bmp");
- for (i = 0;i < 5;i++)
- surfaces->Tennemi[i] = surfaces->Pgobelin;
-
- LOAD_IMAGE(background, "images/jeu/textures/background.jpg");
- surfaces->Pfondjeu = surfaces->background;
-
-#undef LOAD_IMAGE
-
- //définition de la transparence alpha dans les surfaces
- SDL_SetColorKey(surfaces->Pgobelin,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,0,255,18));
- SDL_SetColorKey(surfaces->red_warrior_gobelin, SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,0,255,18));
-
- SDL_SetColorKey(surfaces->Ppretre,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,39,189,31));
- SDL_SetColorKey(surfaces->Ppaladin,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,189,31,31));
- SDL_SetColorKey(surfaces->Pvoleur,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,39,189,31));
- SDL_SetColorKey(surfaces->red_priest,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,39,189,31));
- SDL_SetColorKey(surfaces->red_paladin,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,189,31,31));
- SDL_SetColorKey(surfaces->red_thief,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,39,189,31));
-
- SDL_SetColorKey(surfaces->Pcurseurennemis,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
- SDL_SetColorKey(surfaces->Pcurseurallies,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
- SDL_SetColorKey(surfaces->Pactive,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
- SDL_SetColorKey(surfaces->Pdesactive,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
- SDL_SetColorKey(surfaces->Pmort,SDL_SRCCOLORKEY,SDL_MapRGB(surfaces->Pecran->format,255,255,255));
-
- colorize_every_red_surface(surfaces);
-
- return 0;
-}
-
-void Fdechargerimages (SURFACES *surfaces)//dechargement des surfaces alouées
-{
- int i;
-
- SDL_FreeSurface (surfaces->Pgobelin);
- SDL_FreeSurface(surfaces->red_warrior_gobelin);
-
- SDL_FreeSurface (surfaces->Ppaladin);
- SDL_FreeSurface (surfaces->Ppretre);
- SDL_FreeSurface (surfaces->Pvoleur);
-
- SDL_FreeSurface(surfaces->red_paladin);
- SDL_FreeSurface(surfaces->red_priest);
- SDL_FreeSurface(surfaces->red_thief);
-
- SDL_FreeSurface (surfaces->Pmenujouer);
- SDL_FreeSurface (surfaces->Pmenuoptions);
- SDL_FreeSurface (surfaces->Pmenuquitter);
- SDL_FreeSurface (surfaces->Pchoixpretre);
- SDL_FreeSurface (surfaces->Pchoixpaladin);
- SDL_FreeSurface (surfaces->Pchoixvoleur);
- SDL_FreeSurface (surfaces->Pcurseurennemis);
- SDL_FreeSurface (surfaces->Pcurseurallies);
- SDL_FreeSurface (surfaces->Pcadrecible);
- SDL_FreeSurface (surfaces->Pactive);
- SDL_FreeSurface (surfaces->Pdesactive);
- SDL_FreeSurface (surfaces->Pcadreactions);
- SDL_FreeSurface (surfaces->Pactionselectionnee);
- SDL_FreeSurface (surfaces->Pactiondesactivee);
- SDL_FreeSurface (surfaces->Pmort);
- SDL_FreeSurface (surfaces->Pfondjeu);
- SDL_FreeSurface(surfaces->Ptextechoixmenu);
- SDL_FreeSurface(surfaces->Pnbdegats);
- SDL_FreeSurface(surfaces->Pnomcible);
- SDL_FreeSurface(surfaces->Ppvcible);
- SDL_FreeSurface(surfaces->Ppmcible);
- SDL_FreeSurface(surfaces->Ppvpersos);
- SDL_FreeSurface(surfaces->Ppmpersos);
-
- for(i=0;i<3;i++)
- {
- SDL_FreeSurface (surfaces->Pnomactions[i]);
- }
- for(i=0;i<3;i++)
- {
- SDL_FreeSurface (surfaces->Pquantite[i]);
- }
-}
-
-/* ********************************************************************* */
-/*obtenirPixel : permet de récupérer la couleur d'un pixel
-Paramètres d'entrée/sortie :
-SDL_Surface *surface : la surface sur laquelle on va récupérer la couleur d'un pixel
-int x : la coordonnée en x du pixel à récupérer
-int y : la coordonnée en y du pixel à récupérer
-
-Uint32 resultat : la fonction renvoie le pixel aux coordonnées (x,y) dans la surface
-*/
-Uint32 obtenirPixel(SDL_Surface *surface, int x, int y)
-{
- /*nbOctetsParPixel représente le nombre d'octets utilisés pour stocker un pixel.
- En multipliant ce nombre d'octets par 8 (un octet = 8 bits), on obtient la profondeur de couleur
- de l'image : 8, 16, 24 ou 32 bits.*/
- int nbOctetsParPixel = surface->format->BytesPerPixel;
- /* Ici p est l'adresse du pixel que l'on veut connaitre */
- /*surface->pixels contient l'adresse du premier pixel de l'image*/
- Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * nbOctetsParPixel;
-
- /*Gestion différente suivant le nombre d'octets par pixel de l'image*/
- switch(nbOctetsParPixel)
- {
- case 1:
- return *p;
-
- case 2:
- return *(Uint16 *)p;
-
- case 3:
- /*Suivant l'architecture de la machine*/
- if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
- return p[0] << 16 | p[1] << 8 | p[2];
- else
- return p[0] | p[1] << 8 | p[2] << 16;
-
- case 4:
- return *(Uint32 *)p;
-
- /*Ne devrait pas arriver, mais évite les erreurs*/
- default:
- return 0;
- }
-}
-
-/* ********************************************************************* */
-/*definirPixel : permet de modifier la couleur d'un pixel
-Paramètres d'entrée/sortie :
-SDL_Surface *surface : la surface sur laquelle on va modifier la couleur d'un pixel
-int x : la coordonnée en x du pixel à modifier
-int y : la coordonnée en y du pixel à modifier
-Uint32 pixel : le pixel à insérer
-*/
-void definirPixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
-{
- /*nbOctetsParPixel représente le nombre d'octets utilisés pour stocker un pixel.
- En multipliant ce nombre d'octets par 8 (un octet = 8 bits), on obtient la profondeur de couleur
- de l'image : 8, 16, 24 ou 32 bits.*/
- int nbOctetsParPixel = surface->format->BytesPerPixel;
- /*Ici p est l'adresse du pixel que l'on veut modifier*/
- /*surface->pixels contient l'adresse du premier pixel de l'image*/
- Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * nbOctetsParPixel;
-
- /*Gestion différente suivant le nombre d'octets par pixel de l'image*/
- switch(nbOctetsParPixel)
- {
- case 1:
- *p = pixel;
- break;
-
- case 2:
- *(Uint16 *)p = pixel;
- break;
-
- case 3:
- /*Suivant l'architecture de la machine*/
- if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
- {
- p[0] = (pixel >> 16) & 0xff;
- p[1] = (pixel >> 8) & 0xff;
- p[2] = pixel & 0xff;
- }
- else
- {
- p[0] = pixel & 0xff;
- p[1] = (pixel >> 8) & 0xff;
- p[2] = (pixel >> 16) & 0xff;
- }
- break;
-
- case 4:
- *(Uint32 *)p = pixel;
- break;
- }
-}