
Qu'est ce que Pays-Froid.Net


/*
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
*/


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