1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| #include <stdlib.h> //En-tête nécessaire pour l'utilisation de exit() et atexit()
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <time.h>
#include <SDL\SDL.h> //En-tête nécessaire pour l'utilisation de la sdl
////////////////////////////////////////////////////////////////////////////////////////
SDL_Surface *screen = NULL; //SDL_Surface est utilisé pour une surface d'écran
SDL_Surface *fruit = NULL;
SDL_Surface *fruiti = NULL;
SDL_Surface *background = NULL;
//Les attributs de notre écran
const int SCREEN_WIDTH = 600;
const int SCREEN_HEIGHT = 521;
const int SCREEN_BPP = 32;
//Fonction de chargement d'image
SDL_Surface *load_image(std::string filename)
{
SDL_Surface* loadedImage = NULL; //Surface tampon qui nous servira pour charger l'image
SDL_Surface* optimizedImage = NULL;//L'image optimisée qu'on va utiliser
loadedImage = SDL_LoadBMP(filename.c_str());//Charge l'image au format bitmap et la met dans la variable tampon
if (loadedImage != NULL) //Si le chargement se passe bien
{
optimizedImage = SDL_DisplayFormat( loadedImage ); //Création de l'image optimisée dans le même format que l'écran
SDL_FreeSurface(loadedImage); //Libération de l'ancienne surface
}
return optimizedImage; //On retourne l'image optimisée
}
////////////////////////////////////////////////////////////////////////////
//Fonction de blitting
void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
SDL_Rect offset;//SDL_BlitSurface() accepte seulement les offsets dans un SDL_RECT
offset.x = x;
offset.y = y;
SDL_BlitSurface(source, NULL, destination, &offset); //On blitte la surface
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
int main (int argc, char* args[])
{
if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) //Initialisation de tous les sous-systèmes de SDL
//Si SDL ne peut pas initialiser il retourne -1
{
return EXIT_FAILURE; //EXIT_FAILURE termine le programme si erreur
}
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE ); //Mise en place de l'écran
//SDL_SWSURFACE crée la surface écran dans la mémoire système
if( screen == NULL ) //Si il y a une erreur dans la création de l'écran
{
return EXIT_FAILURE;
}
SDL_WM_SetCaption( "Hello World", NULL ); //Mise en place de la barre caption (légende sur le haut de la fenêtre)
//Chargement des images
fruit = load_image("fruita.bmp"); //On utilise la fonction load_image
fruiti = load_image("fruitb.bmp");
background = load_image("background.bmp");
apply_surface(0, 0, background, screen); //On applique le fond sur l'écran
time_t time_depart; //On crée la variable e qui contient le temps de départ
time(&time_depart); //On récupère le temps
srand(time(NULL));//Amorçage de rand() //(rdtsc())
int nbcase = 2;
int nbrand[nbcase];
int i; //Je déclare ma variable i
for(i=0; i<nbcase; i++)//Pour i allant de 0 à 2 en croissant
{
nbrand[i] = ((rand()%10)+(i*20));//Je crée un tableau de taille i contenant les valeurs aléatoires
std::cout << nbrand[i] << std::endl;
}
while(true)
{
time_t time_actuel; //On crée une 2ème variable qui contient du temps
time(&time_actuel); //On récupère le temps de la boucle en cours
int d = time_actuel - time_depart; //La différence entre le temps actuel et le temps de départ
if (d == nbrand[0])
{
apply_surface(0, 1, fruit, screen); //On applique le message sur l'écran
}
if (d == nbrand[1])
{
apply_surface(100, 100, fruiti, screen);
//Pour effacer on utilise SDL_FillRect
}
if(d == 40) break;
if(SDL_Flip(screen) == -1 )//Mise à jour de l'écran
{
return EXIT_FAILURE;
}
Sleep(100);//Fais une pause dans la boucle (1000 millisecondes)
}
SDL_Delay (5000);//On attends 5s
//Libération des surfaces
SDL_FreeSurface (fruit);
SDL_FreeSurface (fruiti);
SDL_FreeSurface (background);
//On quitte SDL
SDL_Quit();
} |
Partager