Horloge numérique en sdl

Soyez le premier à donner votre avis sur cette source.

Vue 12 240 fois - Téléchargée 844 fois

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

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
12 septembre 2008

Osef que tu préfère le jaune, les gouts et les couleurs ne se discute pas ici, c'est surtout le code qui dois être jugé..

Puis le vert est la couleur qui fait référence aux radio-réveil dont l'affichage est généralement de cette couleur là, alors pour ton histoire de jaune....
Messages postés
3
Date d'inscription
vendredi 8 février 2008
Statut
Membre
Dernière intervention
14 février 2008

j'aurai preferé que tu mettes les digits en jaune et mets le son d jack bauer: ces evenements se deroulent entre 25h et 26h.....
Messages postés
9
Date d'inscription
jeudi 1 septembre 2005
Statut
Membre
Dernière intervention
21 juin 2008

ACXO1B c'est génial. Effectivement c'est bien plus stable.
Mais c'est quoi la différence fondamentale entre PollEvent et Waitevent?

Pour le son c'est vrai ce serait plus cool, je m'y mets le plus tôt possible

Merci
Messages postés
18
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
5 février 2008

Ma question s'adressait a ISOHELIX, comme celle-ci:
Peut être tu n'es pas sous le bon OS, t'as quel windows ?

Effectivement acx01b, ton code est plus stable ;)

@++
Messages postés
18
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
5 février 2008

T'as pensé a ajouter des images ?
Afficher les 8 commentaires

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.