mais en général, c'est du à quoi?
C'est fréquent?
Bon, voilà le code: Title
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <FMOD/fmod.h>
#include "title.h"
#ifndef TITLE
#define TITLE 1
long choixValid = 0;
long degreChoixTitle = 0;
#endif
void pause(){
int continuer = 1;
SDL_Event event;
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}
}
int main(int argc, char *argv[])
{
int depCase = 0;//Variable pour les déplacements de la picture pour les choix
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_AUDIO); // Charge la lib SDL
SDL_WM_SetCaption("Goneh", NULL); //Nom de la fenêtre
SDL_Surface *ecran = NULL, *pctFondTitle = NULL, *pctFntHaut = NULL, *pctFntMilieux = NULL, *pctFntBas = NULL, *pctChoix = NULL;//Variables de surface
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_AUDIO) == -1) // Démarrage de la SDL. Si erreur alors...
{
fprintf(stderr, "Erreur au niveau du chargement de la SDL : %s\n", SDL_GetError()); // Ecriture de l'erreur
exit(EXIT_FAILURE); // On quitte le programme
} // La SDL est alors chargée si le programme n'a pas été intérrompu par la condition.
ecran = SDL_SetVideoMode(320, 240, 32, SDL_DOUBLEBUF | SDL_HWSURFACE);//640x 480y
/* * SDL_HWSURFACE : les données seront chargées dans la mémoire vidéo, c'est-à-dire dans la mémoire de votre carte 3D. Avantage : cette mémoire est plus rapide. Défaut : il y a en général moins d'espace dans cette mémoire que dans l'autre (SDL_SWSURFACE).
* SDL_SWSURFACE : les données seront chargées dans la mémoire système (c'est-à-dire la RAM à priori). Avantage : il y a plein de place dans cette mémoire. Défaut : c'est moins rapide et moins optimisé.
* SDL_RESIZABLE : la fenêtre sera redimensionnable. Par défaut elle ne l'est pas.
* SDL_NOFRAME : la fenêtre n'aura pas de barre de titre ni de bordure.
* SDL_FULLSCREEN : mode plein écran. Dans ce mode, aucune fenêtre n'est ouverte. Votre programme prendra toute la place à l'écran, en changeant automatiquement la résolution de votre écran au besoin.
* SDL_DOUBLEBUF : mode double buffering. C'est une technique très utilisée dans les jeux 2D qui permet de faire en sorte que les déplacements des objets à l'écran soient fluides (sinon ça scintille et c'est moche). Je vous expliquerai les détails de cette technique très intéressante plus loin.
*/
SDL_Rect pstPct; //Position des pictures
pstPct.x = 0;
pstPct.y = 0;
pctFondTitle = SDL_LoadBMP("FondTitle.bmp" );//Charge La PIcture du Fond d' écran
SDL_BlitSurface(pctFondTitle, NULL, ecran, &pstPct); //Prépare la surface de la picture de fond
pctFntHaut = SDL_LoadBMP("HautFnt.bmp" ); //Charge La partie haut de la fenêtre de choix
pstPct.x = ecran->w/2 - pctFntHaut->w;
pstPct.y = ecran->h/2 - pctFntHaut->h;
SDL_SetColorKey(pctFntHaut, SDL_SRCCOLORKEY, SDL_MapRGB(pctFntHaut->format, 0, 235, 0));
SDL_BlitSurface(pctFntHaut, NULL, ecran, &pstPct); //Prépare la surface de la picture
pctFntMilieux = SDL_LoadBMP("MilieuxFnt.bmp" ); //Charge La partie milieux de la fenêtre de choix
pstPct.x = ecran->w/2 - pctFntMilieux->w;
pstPct.y = ecran->h/2 ;
SDL_SetColorKey(pctFntMilieux, SDL_SRCCOLORKEY, SDL_MapRGB(pctFntMilieux->format, 0, 235, 0));
SDL_BlitSurface(pctFntMilieux, NULL, ecran, &pstPct); //Prépare la surface de la picture
pctFntBas = SDL_LoadBMP("BasFnt.bmp" ); //Charge La partie bas de la fenêtre de choix
pstPct.x = ecran->w/2 - pctFntBas->w;
pstPct.y = ecran->h/2 + pctFntMilieux->h;
SDL_SetColorKey(pctFntBas, SDL_SRCCOLORKEY, SDL_MapRGB(pctFntBas->format, 0, 235, 0));
SDL_BlitSurface(pctFntBas, NULL, ecran, &pstPct); //Prépare la surface de la picture
pctChoix = SDL_LoadBMP("Barre de choix2.bmp" ); //Charge La barre de choix de la fenêtre de choix
//C:\Documents and Settings\admin\Bureau\Artémis\L' hymne aux esprits\Ressources\Graphique\Picture\Title\
pstPct.x = ecran->w/2 - pctFntMilieux->w;
pstPct.y = ecran->h/2 ;
SDL_SetColorKey(pctChoix, SDL_SRCCOLORKEY, SDL_MapRGB(pctChoix->format, 0, 235, 0));
SDL_BlitSurface(pctChoix, NULL, ecran, &pstPct); //Prépare la surface de la picture
SDL_Flip(ecran); //Colle les pictures à l' écran.
SDL_Delay(10000);//Attend une seconde soit 10000ms
long crtlTchsTitle();//Permet de contrôler les choix
/*Graphismes*/
choixValid = 0;
while(choixValid){
switch(degreChoixTitle)
{
case 0:
pstPct.x = ecran->w/2 - pctFntMilieux->w;
pstPct.y = ecran->h/2 ;
SDL_SetColorKey(pctChoix, SDL_SRCCOLORKEY, SDL_MapRGB(pctChoix->format, 0, 235, 0));
SDL_BlitSurface(pctChoix, NULL, ecran, &pstPct); //Prépare la surface de la picture
break;
case 1:
pstPct.x = ecran->w/2 - pctFntMilieux->w;
pstPct.y = ecran->h/2 + depCase ;
SDL_SetColorKey(pctChoix, SDL_SRCCOLORKEY, SDL_MapRGB(pctChoix->format, 0, 235, 0));
SDL_BlitSurface(pctChoix, NULL, ecran, &pstPct); //Prépare la surface de la picture
break;
case 2:
pstPct.x = ecran->w/2 - pctFntMilieux->w;
pstPct.y = ecran->h/2 + depCase * 2 ;
SDL_SetColorKey(pctChoix, SDL_SRCCOLORKEY, SDL_MapRGB(pctChoix->format, 0, 235, 0));
SDL_BlitSurface(pctChoix, NULL, ecran, &pstPct); //Prépare la surface de la picture
break;
//etc...
{//condition
SDL_Flip(ecran);
}
pause();//mets en pause le programme
//Option quitter:
SDL_FreeSurface(pctFondTitle);
SDL_FreeSurface(pctFntHaut);
SDL_FreeSurface(pctFntMilieux);
SDL_FreeSurface(pctFntBas);
SDL_Quit();
return EXIT_SUCCESS;
}
}
}
Contrôle des touches:
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <FMOD/fmod.h>
void ctrlTchsTitle()
{
int exitTitle = 0;
long degreChoixTitle = 0;
degreChoixTitle = 0;
int validation = 0;
while(!(exitTitle))
{
SDL_Event event;
SDL_PollEvent(&event);
switch(event.type)
{
case SDL_QUIT:
exit(EXIT_SUCCESS);
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym){
case SDLK_UP:
degreChoixTitle--;
break;
case SDLK_DOWN:
degreChoixTitle++;
break;
case SDLK_c:
validation = 1;
break;
}
}
}//Boucle
}
HEADER:
void pause();
long ctrlTchsTitle();
int main(int argc, char *argv[]);