Horloge numérique en sdl

Description

Salut! Ben voila mon premier code posté :-)
L'idée de base était de faire une horloge numérique avec la bibliothèque SDL.h
Toute critique sera la bienvenue.
Merci d'avance
Ah le tout a été réalisé avec DEV-C++

Source / Exemple :


#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <SDL\SDL.h>

  
int main(int argc, char *argv[])
{
    SDL_Event event;
    SDL_Surface *ecran = NULL, *num[10],*point = NULL;
    SDL_Rect position[8]; int i=0,j=0,k=0,l=0,m=0,n=0,a=1;

    position[0].x = 200;
    position[0].y = 100;

    SDL_Init(SDL_INIT_VIDEO);
    
     ecran = SDL_SetVideoMode(800, 300, 32, SDL_HWSURFACE);
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
    
    num[0]=SDL_LoadBMP("digit-0.bmp");
    num[1]=SDL_LoadBMP("digit-1.bmp");
    num[2]=SDL_LoadBMP("digit-2.bmp");
    num[3]=SDL_LoadBMP("digit-3.bmp");
    num[4]=SDL_LoadBMP("digit-4.bmp");
    num[5]=SDL_LoadBMP("digit-5.bmp");
    num[6]=SDL_LoadBMP("digit-6.bmp");
    num[7]=SDL_LoadBMP("digit-7.bmp");
    num[8]=SDL_LoadBMP("digit-8.bmp");
    num[9]=SDL_LoadBMP("digit-9.bmp");
    point=SDL_LoadBMP("Deux_points.bmp");

/*Blitte les zéros de départ*/
SDL_BlitSurface(num[0],NULL,ecran,&position[0]);
position[1].x = 262 ; position[1].y = 100;
SDL_BlitSurface(num[0],NULL,ecran,&position[1]);
position[2].x = 339 ; position[2].y = 100;
SDL_BlitSurface(point,NULL,ecran,&position[2]);
position[3].x = 371 ; position[3].y = 100;
SDL_BlitSurface(num[0],NULL,ecran,&position[3]);
position[4].x = 433 ; position[4].y = 100;
SDL_BlitSurface(num[0],NULL,ecran,&position[4]);
position[5].x = 510 ; position[5].y = 100;
SDL_BlitSurface(point,NULL,ecran,&position[5]);
position[6].x = 542 ; position[6].y = 100;
SDL_BlitSurface(num[0],NULL,ecran,&position[6]);
position[7].x = 604 ; position[7].y = 100;
SDL_BlitSurface(num[0],NULL,ecran,&position[7]);

SDL_Flip(ecran);

while(i<2 && j<4)
{
  if(i<1)
  {SDL_BlitSurface(num[i],NULL,ecran,&position[0]);SDL_BlitSurface(num[j],NULL,ecran,&position[1]);SDL_Flip(ecran);}
  else
  {SDL_BlitSurface(num[i],NULL,ecran,&position[0]);SDL_BlitSurface(num[j],NULL,ecran,&position[1]);SDL_Flip(ecran);}
    
  if(k<1)
  {SDL_BlitSurface(num[k],NULL,ecran,&position[3]);SDL_BlitSurface(num[l],NULL,ecran,&position[4]);SDL_Flip(ecran);}
  else
  {SDL_BlitSurface(num[k],NULL,ecran,&position[3]);SDL_BlitSurface(num[l],NULL,ecran,&position[4]);SDL_Flip(ecran);}
  
  if(m<1)
  {SDL_BlitSurface(num[m],NULL,ecran,&position[6]);SDL_BlitSurface(num[n],NULL,ecran,&position[7]);SDL_Flip(ecran);}
  else
  {SDL_BlitSurface(num[m],NULL,ecran,&position[6]);SDL_BlitSurface(num[n],NULL,ecran,&position[7]);SDL_Flip(ecran);}
       

n++;Sleep(1000);
if(n==10)
{n=0; m++;}
if(m==6)
{m=0;n=0; l++;}
if(l==10)
{l=0;k++;}
if(k==6)
{k=0;l=0;j++;}
if(j==10)
{j=0;i++;}

}      
       
       
  while(a==1)
    {SDL_WaitEvent(&event);
     switch(event.type)
     {case SDL_QUIT: a=0;break;}
    }
   
   for(i=0;i<10;i++)
   {SDL_FreeSurface(num[i]);}
    SDL_FreeSurface(point); 
    
    SDL_Quit();

    return EXIT_SUCCESS;
}

Conclusion :


Un des gros problèmes que j'ai eu est relatif à la gestion d'évènements par la SDL. En effet la condition d'arrêt que j'ai mise entre les lignes 85 et 89 :
while(a==1)
{SDL_WaitEvent(&event);
switch(event.type)
{case SDL_QUIT: a=0;break;}
}
ne marche pas correctement. A chaque fois le système n'arrive pas à terminer correctement l'application.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.