Pays-Froid.Net

Qu'est ce que Pays-Froid.Net

C - Horloge

Posez vos problèmes à propos du C et C++

Messagede yoyo86 le 25 Jan 2007 18:55

Et bien moi faudrait vraiment que je me mette à bosser un peu plus le SDL !!! Ca a l'air vraiment terrible !!! :D
Image
yoyo86
Pinguin
Pinguin
 
Messages: 193
Inscription: 30 Nov 2006 0:54

Messagede Geoffroy le 25 Jan 2007 19:08

c'est vrai que c'est pas mal!

je vous passe mon écran de vielle quand il est fini, mais il faudra juste que je vois pour le mettre comme écran de veille (qu'il soit reconnu pas l'os comme telle) ca sera mieux.
et que je mette un truc pour gérer l'heure a chaque fois, parce que la si tu l'éteint ca marche pas a pile comme celle d'en bas donc l'heure se remet a zéro.

un petit peu de boulot quoi!

mais en tous cas c'est chiant de changer quelque chose quand tu fais un film image par image, car tu dois changer ce truc sur toute les images (50 ici)


Le je suis en train de coder une fonction en plus, avant tous était dans le main, et c'est pas que c'étais pas clair, mais je ne pouvais pas utiliser les truc que je voulais tous le temps au bon moment avec la remise a jour que j'ai faite du programme.
La j'ai juste a appelé la fonction a chaque fois, qui même si le film bugera, le temps continuera a tourner.
Bon, la fonction elle prend 7 paramètre pour le moment, ca fait deja beaucoup!
mais je dois pouvoir en supprimer 3 normalement bientot.
TIMTOWTDI
Avatar de l’utilisateur
Geoffroy
Crazy Pinguin
Crazy Pinguin
 
Messages: 1332
Inscription: 20 Jan 2007 23:11

Messagede Geoffroy le 25 Jan 2007 22:28

Bon, j'ai un peu refait le code, mais il faut encore que je mette les appeles aux fonctions a chaque image.
Code: Tout sélectionner
/*
Ecran de veille horloge + film terragen
main.c
------

tous le programme
*/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <FMOD/fmod.h>

long secondeTexte(seconde, texte1, texte2, texte3);

int main(int argc, char *argv[])
{
//initialisations
    SDL_Init(SDL_INIT_VIDEO| SDL_INIT_TIMER);
    TTF_Init();
//variables
    int continuer = 1;

    char houre[100]={0}, date[100]={0};
    char nomMois[100]={0}, nomJour[100]={0};

    TTF_Font *police = NULL;

    SDL_Color blanc = {0, 0, 0};
    SDL_Event event;
    SDL_Surface *ecran = NULL, *texte1=NULL, *texte2=NULL, *texte3=NULL, *image=NULL;
//position des surfaces
    SDL_Rect positionImage, positionTexte1, positionTexte2, positoinTexte3;
    positionImage.x = 0;
    positionImage.y = 0;

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

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

    positionTexte3.x=ecran->w/2-texte3->w/2;
    positionTexte3.y=70;
//définition de la police de caractère
    police = TTF_OpenFont("3_traits.ttf", 15);
//mis en place de la police
    TTF_SetFontStyle(police, TTF_STYLE_BOLD);
//fond de l'image
    ecran = SDL_SetVideoMode(1000, 750, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN);
//titre de la fenêtre
    SDL_WM_SetCaption("Ecran de veille", NULL);
//boucle principal
    while (continuer)
    {
//cache le curseur
        SDL_ShowCursor(SDL_DISABLE);

        SDL_PollEvent(&event);
//attente d'un évènement
        switch(event.type)
        {
//définition des moyens de fermer le programme
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE:
                            continuer = 0;
                            break;
                        case SDLK_SPACE:
                            continuer = 0;
                            break;
                        case SDLK_BACKSPACE:
                            continuer = 0;
                            break;
                    }
                break;
            case SDL_MOUSEMOTION:
                continuer = 0;
                break;

        }
/*ici commence le film terragen
je n'explique qu'une seul fois, les 49 qui suivents c'est la meme chose


*/
//chargement de l'image principal
    image= SDL_LoadBMP("90.bmp");
//nettoyage de l'écran
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
//blittage
        SDL_BlitSurface(image, NULL, ecran, &positionImage);
        SDL_BlitSurface(texte1, NULL, ecran, &positionTexte1);
        SDL_BlitSurface(texte2, NULL, ecran, &positionTexte2);
        SDL_BlitSurface(texte3, NULL, ecran, &positionTexte3);
//mis a jour de l'écran
    SDL_Flip(ecran);
//attente de 20 millisecondes avant de passé a la suite
    SDL_Delay(20);
/*
et voila, c'est pas plus compliqué que ca!
*/

/* je vous fait grâce (de rien) des 49 lignes qui suivent, c'est vraiment tous le tmeps la meme chose, seul le nom de l'image change (en fait sa la position du soleil dans le ciel, je m'en suis servit pour donner le nom
*/

//on sort de la boucle principal
    }
//nettoyage des surfaces
    SDL_FreeSurface(image);
    SDL_FreeSurface(texte1);
    SDL_FreeSurface(texte2);
    SDL_FreeSurface(texte3);
//on quitte la SDL
    SDL_Quit();
//nettoyage de la police
    TTF_CloseFont(police);
//on quite TTF
    TTF_Quit();
//et on fait un jolie return
    return EXIT_SUCCESS;
}
/*passage a la fonction secondeTexte, un nmo un peu au n'imp, mais je ne savias pas trop quoi mettre.





*/
long secondeTexte(seconde, texte1, texte2, texte3)
{
//variables
    long seconde=0, minute=39, heure=4, jour=24, mois=1, an=2007, jourAn=24, semaine=0, jourSemaine=1;

    char nomMois[100]={0}, nomJour[100]={0};
    char Texte1[100]={0}, Texte2[100]={0}, Texte3[100]={0};

    SDL_Color blanc = {0, 0, 0};
//définition des variables propre au temps
    int tempsPrecedent = 0, tempsActuel = 0;
//le "tempsActule" est égal au temps écoulé
    tempsActuel = SDL_GetTicks();
//si 1 seconde c'est écoulé
    if (tempsActuel - tempsPrecedent > 1000)
    {
        seconde++;
//on change "tempsPrecedent" pour que sa valeur soit égale a "tempsActuel", afin que l'action se repète bien toutes les secondes et pas de manière logarithmyque
        tempsPrecedent = tempsActuel;
    }
//la base, jour heure minute seconde
    if (seconde>=60)
    {
        seconde=0;
        minute++;
    }
    if (minute>=60)
    {
        minute=0;
        heure++;
    }
    if (heure>=24)
    {
        heure=0;
        jour++;
        jourAn++;
    }
//les mois
    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++;
    }
//définition des noms des mois
    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;
    }
//définition de la semaine dans l'année
    semaine=(jourAn/7)+1;
//définition du jour de la semaine
    jourSemaine=jourAn%7;
//définition du nom du jour de la semaine
    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;
    }
//mise en place des chaines contenant les infos
        sprintf(Texte1, "%ld : %ld : %ld", heure, minute, seconde);
        sprintf(Texte3, "%s %ld %s %ld", nomJour, jour, nomMois, an);
//le contenu des chaines est placé dans les pointeurs
        texte1 = TTF_RenderText_Solid(police, Texte1, blanc);
        texte2 = TTF_RenderText_Blended(police, "heure minute seconde", blanc);
        texte3 = TTF_RenderText_Blended(police, Texte3, blanc);
//et on retourne seconde
    return seconde;
}

/*
Merci a M@theo21
http://www.siteduzero.com
*/
Dernière édition par Geoffroy le 20 Aoû 2007 0:56, édité 1 fois.
TIMTOWTDI
Avatar de l’utilisateur
Geoffroy
Crazy Pinguin
Crazy Pinguin
 
Messages: 1332
Inscription: 20 Jan 2007 23:11

Messagede Geoffroy le 25 Jan 2007 22:49

désolé pour les bigs erreur (j'ai oublié de spécifier le type des para de la fonctions)

je corrige demain, j'ai plus le temps a+
TIMTOWTDI
Avatar de l’utilisateur
Geoffroy
Crazy Pinguin
Crazy Pinguin
 
Messages: 1332
Inscription: 20 Jan 2007 23:11

Messagede Geoffroy le 02 Mai 2007 17:58

je ferme aussi, pour refaire ça, il faut que je trouve le moyen de prendre l'heure de l'horloge de l'ordi
TIMTOWTDI
Avatar de l’utilisateur
Geoffroy
Crazy Pinguin
Crazy Pinguin
 
Messages: 1332
Inscription: 20 Jan 2007 23:11

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron

Copyright © Pays-Froid.Net

Nous contacter | Notre Histoire | Plan du site | Nos partenaires | Mentions légales | Fil RSS | XHTML 1.0 | CSS 2.0

Partenaire : Waliwaloo - Darklg - Yagoort - Meilleur du Web - Hit Parade