Partage
  • Partager sur Facebook
  • Partager sur Twitter

Horloge

SDL

Anonyme
    23 janvier 2007 à 19:31:44

    voici le jolie petit code que j'ai fiat pour mon horloge, mais il y a un problème au niveau de l'affichage dans la fenêtre, pouvez vous m'aidez svp???


    (c'est assez a la fin le truc qui gère l'affichage, juste avant que je blit tous.)

    (la majeur partie du code c'est le calcul des jours en fonction de l'heure etc... donc pas besoin de lire, normalement c'est bon.)


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>

    int main(int argc, char *argv[])
    {
        SDL_Init(SDL_INIT_VIDEO| SDL_INIT_TIMER);
        TTF_Init();
        long seconde=0, minute=0, heure=0, jour=1, mois=1, an=2007, jourAn=1, semaine=0, jourSemaine;
        int continuer = 1;
        SDL_Event event;
        SDL_Surface *ecran = NULL, *texte1=NULL, *texte2=NULL, *texte3=NULL;
        TTF_Font *police = NULL;
        SDL_Color blanc = {255, 255, 255};
        char houre[100]={0}, date[100]={0};
        char nomMois[100]={0}, nomJour[100]={0};

        police = TTF_OpenFont("3_traits.ttf", 15);

        ecran = SDL_SetVideoMode(320, 240, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Horloge", NULL);


        SDL_Rect positionTexte1;
        SDL_Rect positionTexte2;
        SDL_Rect positionTexte3;

        while (continuer)
        {
            SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
            }
            seconde++;
            if (seconde>=60)
            {
                seconde=0;
                minute++;
            }
            if (minute>=60)
            {
                minute=0;
                heure++;
            }
            if (heure>=24)
            {
                heure=0;
                jour++;
                jourAn++;
            }
            if (mois==1 || mois==3 || mois==5 || mois==7 || mois==8 || mois==10 || mois==12)
            {
                if (jour>=31)
                {
                    jour=1;
                    mois++;
                }
            }
            else if (mois==4 || mois==6 || mois==9 || mois==11)
            {
                if (jour>=30)
                {
                    jour=1;
                    mois++;
                }
            }
            else if(mois==2)
            {
                if (an!=2008 || an!=2012 || an!=2016)
                {
                    if(jour>=29)
                    {
                        jour=1;
                        mois++;
                    }
                }
                else
                {
                    if(jour>=28)
                    {
                        jour=1;
                        mois++;
                    }
                }
            }
            if (mois>=12)
            {
                mois=1;
                jourAn=1;
                an++;
            }
            switch(mois)
            {
                case 1:
                    sprintf(nomMois, "Janvier");
                    break;
                case 2:
                    sprintf(nomMois, "Fevrier");
                    break;
                case 3:
                    sprintf(nomMois, "Mars");
                    break;
                case 4:
                    sprintf(nomMois, "Avril");
                    break;
                case 5:
                    sprintf(nomMois, "Mai");
                    break;
                case 6:
                    sprintf(nomMois, "Juin");
                    break;
                case 7:
                    sprintf(nomMois, "Juillet");
                    break;
                case 8:
                    sprintf(nomMois, "Aout");
                    break;
                case 9:
                    sprintf(nomMois, "Septembre");
                    break;
                case 10:
                    sprintf(nomMois, "Octobre");
                    break;
                case 11:
                    sprintf(nomMois, "Novembre");
                    break;
                case 12:
                    sprintf(nomMois, "Decembre");
                    break;
            }
            semaine=(jourAn/7)+1;
            jourSemaine=jourAn%7;
            switch(jourSemaine)
            {
                case 1:
                    sprintf(nomJour, "Lundi");
                    break;
                case 2:
                    sprintf(nomJour, "Mardi");
                    break;
                case 3:
                    sprintf(nomJour, "Mercredi");
                    break;
                case 4:
                    sprintf(nomJour, "Jeudi");
                    break;
                case 5:
                    sprintf(nomJour, "Vendredi");
                    break;
                case 6:
                    sprintf(nomJour, "Samedi");
                    break;
                case 7:
                    sprintf(nomJour, "Dimanche");
                    break;
            }
            sprintf(texte1, "%ld:%ld:%ld", heure, minute, seconde);
            texte1 = TTF_RenderText_Solid(police, "texte1", blanc);
            texte2 = TTF_RenderText_Blended(police, "heure minute seconde", blanc);
            sprintf(texte3, "Nous sommes le %s %ld %s %ld", nomJour, jour, nomMois, an);
            SDL_Delay(1000);


            positionTexte1.x=ecran->w/2-texte1->w/2;
            positionTexte1.y=ecran->h/2-texte1->h/2;

            positionTexte2.x=ecran->w/2-texte2->w/2;
            positionTexte2.y=(ecran->h/2-texte1->h/2)-20;

            positionTexte3.x=ecran->w/2-texte3->w/2;
            positionTexte3.y=50;

            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            SDL_BlitSurface(texte1, NULL, ecran, &positionTexte1);
            SDL_BlitSurface(texte2, NULL, ecran, &positionTexte2);
            SDL_BlitSurface(texte3, NULL, ecran, &positionTexte3);
            SDL_Flip(ecran);
        }

        SDL_FreeSurface(texte1);
        SDL_FreeSurface(texte2);
        SDL_Quit();
        TTF_CloseFont(police);
        TTF_Quit();
        return EXIT_SUCCESS;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      23 janvier 2007 à 19:44:44

      Citation : Geoffroy

      voici le jolie petit code que j'ai fiat pour mon horloge, mais il y a un problème au niveau de l'affichage dans la fenêtre



      Lequel ?
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        23 janvier 2007 à 19:47:20

        ben deja la boucle infinie ne marche pas, puis je n'arrive pas a afficher un seul texte, même le plus simple possible.

        et ensuite je ne sais pas comment il faut faire pour afficher la valeur d'une variante avec SDL_ttf.
        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2007 à 19:55:09

          Citation : Geoffroy

          la boucle infinie ne marche pas


          C'est à dire ? Le prog se coupe ou.... ?

          Citation : Geoffroy

          je ne sais pas comment il faut faire pour afficher la valeur d'une variante avec SDL_ttf


          Il faut que tu mette la valeur de ta variable dans une chaîne de caractères.

          Citation : Geoffroy

          je n'arrive pas a afficher un seul texte, même le plus simple possible.


          Je te conseil de commencer par essayer plus simple alors... ;)

          Tout ça est expliqué dans le tuto de Mateo.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            23 janvier 2007 à 20:43:03

            merci!
            et le programme se coupe une fois qu'il a attendue les 1000 milli secondes (1 sec)
            et il n'afficher rien du tous.


            euh... et je fais comment pour afficher la chaine de caractère?
            • Partager sur Facebook
            • Partager sur Twitter
              23 janvier 2007 à 21:04:57

              De quelle couleur est le fond de ta fenêtre?

              Pour afficher une chaîne de caractères il y a une fonction toute faite dans SDL_ttf.

              Dans le tuto de Mateo il y a un exo sur un compteur je croit.
              Tu devrais aller y jeter un oeil. ;)

              Pour la coupure du prog...
              Tu initialise "continuer" à 1
              Donc a un moment il doit y avoir un passage automatique à 0, mais je n'ai pas trouvé où...

              A moins qu'il ne s'agisse d'une "réelle" coupure. (a savoir ton prog ne se termine pas de manière "normale" mais est fermé par ton OS)
              Et là ça peut venir de n'importe où... Un fichier qu'il n'arrive pas à trouver ou autre...
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                23 janvier 2007 à 21:07:09

                ok merci, je vais voir ca
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  23 janvier 2007 à 21:10:48

                  Vérifie si tes images se chargent bien, ça peut venir de là.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Horloge

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown