begin process at 2013 05 24 03:58:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

[SDL] Affichage + Timer


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[SDL] Affichage + Timer

vendredi 24 août 2012 à 13:24:11 | [SDL] Affichage + Timer

adel1433

bonjour
je suis débutant au domaine de programmation
et je doit réaliser un projet d'été constitué de 3 partie
1-afficher l'heure dans une fenêtre graphique
2-crée une zone de texte qui permet a l'utilisateur de faire entrer un temps pour l'alarme
3-bip sonore qui se déclenche au temps entrée par l'utilisateur
j'ai arrivé a réaliser la première partie en utilisant la bibliothèque SDL

Code c :
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
#include <SDL_ttf.h>
#include <time.h>


int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL;
    SDL_Surface *texte = NULL;
    SDL_Rect position;
    SDL_Event event;
    TTF_Font *police = NULL;
    SDL_Color ecranCouleur = {0, 0, 0}, fontColor = {0, 255, 0};
    int continuer = 1;
    int tempsActuel = 0, tempsPrecedent = 0, compteur = 0;
    char temps[20] ;

    SDL_Init(SDL_INIT_VIDEO);
    TTF_Init();

    ecran = SDL_SetVideoMode(160, 80, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("timer", NULL);


    // Chargement de la police
    police = TTF_OpenFont("font.ttf", 23);

    // Initialisation du temps et du texte
    tempsActuel = SDL_GetTicks();
    time_t timestamp = time(NULL);
    strftime(temps, sizeof(temps), "%X", localtime(&timestamp));
    texte = TTF_RenderText_Shaded(police, temps, fontColor, ecranCouleur);

    while (continuer)
    {
        SDL_PollEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
        }
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
        tempsActuel = SDL_GetTicks();
        if (tempsActuel - tempsPrecedent >= 1000) // Si 1000ms au moins se sont écoulées
        {
            compteur += 1000; // On rajoute 1000ms au compteur
            time_t timestamp = time(NULL);
            strftime(temps, sizeof(temps), "%X", localtime(&timestamp)); // On écrit dans la chaîne "temps" le nouveau temps
            SDL_FreeSurface(texte); // On supprime la surface précédente de la mémoire avant d'en charger une nouvelle (IMPORTANT)
            texte = TTF_RenderText_Shaded(police, temps, fontColor, ecranCouleur); // On écrit la chaine temps dans la SDL_Surface
            tempsPrecedent = tempsActuel; // On met à jour le tempsPrecedent

        }

        position.x = 40;
        position.y = 10;
        SDL_BlitSurface(texte, NULL, ecran, &position); // Blit du texte contenant le temps
        SDL_Flip(ecran);

    }

    TTF_CloseFont(police);
    TTF_Quit();
    SDL_FreeSurface(texte);
    SDL_Quit();
  
    return 1 ;
}


et j'ai trouver des problème dans la deuxième partie

Code c :
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
#include <SDL_ttf.h>
#include <time.h>


int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL;
    SDL_Surface *texte = NULL;
    SDL_Surface *reveille =NULL;
    SDL_Rect position;
    SDL_Rect position1;
    SDL_Event event;
    TTF_Font *police = NULL;
    SDL_Color ecranCouleur = {0, 0, 0}, fontColor = {0, 255, 0};
    int continuer = 1;
    int tempsActuel = 0, tempsPrecedent = 0, compteur = 0;
    char temps[20] ;
    int i ;
    char y1 [20];
    char indice[5];

    SDL_Init(SDL_INIT_VIDEO);
    TTF_Init();

    ecran = SDL_SetVideoMode(160, 80, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("timer", NULL);


    // Chargement de la police
    police = TTF_OpenFont("font.ttf", 23);

    // Initialisation du temps et du texte
    tempsActuel = SDL_GetTicks();
    time_t timestamp = time(NULL);
    strftime(temps, sizeof(temps), "%X", localtime(&timestamp));
    texte = TTF_RenderText_Shaded(police, temps, fontColor, ecranCouleur);

    while (continuer)
    {
        SDL_PollEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN :

for(i=1;i<7;i++){

              if (event.key.keysym.sym==SDLK_0){
                    indice[i]=0;

                }
                if (event.key.keysym.sym==SDLK_1){
                    indice[i]=1;

                }
                if (event.key.keysym.sym==SDLK_2){
                    indice[i]=2;

                }
                if (event.key.keysym.sym==SDLK_3){
                    indice[i]=3;

                }
                if (event.key.keysym.sym==SDLK_4){
                    indice[i]=4;

                }
                if (event.key.keysym.sym==SDLK_5){
                    indice[i]=5;

                }
                if (event.key.keysym.sym==SDLK_6){
                    indice[i]=6;

                }
                if (event.key.keysym.sym==SDLK_7){
                    indice[i]=7;

                }
                if (event.key.keysym.sym==SDLK_8){
                    indice[i]=8;

                }
                if (event.key.keysym.sym==SDLK_9){
                    indice[i]=9;

                }
position1.x += 5 ;
sprintf (y1,"%d", indice[i]);
reveille = TTF_RenderText_Shaded(police, y1, fontColor, ecranCouleur);
}


        }
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
        tempsActuel = SDL_GetTicks();
        if (tempsActuel - tempsPrecedent >= 1000) // Si 1000ms au moins se sont écoulées
        {
            compteur += 1000; // On rajoute 1000ms au compteur
            time_t timestamp = time(NULL);
            strftime(temps, sizeof(temps), "%X", localtime(&timestamp)); // On écrit dans la chaîne "temps" le nouveau temps
            SDL_FreeSurface(texte); // On supprime la surface précédente de la mémoire avant d'en charger une nouvelle (IMPORTANT)
            texte = TTF_RenderText_Shaded(police, temps, fontColor, ecranCouleur); // On écrit la chaine temps dans la SDL_Surface
            tempsPrecedent = tempsActuel; // On met à jour le tempsPrecedent

        }

        position.x = 40;
        position.y = 10;

        position1.x = 40;
        position1.y = 40;

        SDL_BlitSurface(reveille, NULL, ecran, &position1);
        SDL_BlitSurface(texte, NULL, ecran, &position); // Blit du texte contenant le temps
        SDL_Flip(ecran);

    }

    TTF_CloseFont(police);
    TTF_Quit();

    SDL_FreeSurface(reveille);
    SDL_FreeSurface(texte);
    SDL_Quit();

    return 1 ;
}



j ai besoin d'aide et merci
vendredi 24 août 2012 à 15:14:13 | Re : [SDL] Affichage + Timer

buno

Administrateur CodeS-SourceS
Yop,
J'ai renommé ta demande de manière plus explicite.
Je ne connais pas SDL, mais j'ai trouvé ceci pour jouer avec les TTF


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
vendredi 24 août 2012 à 15:17:28 | Re : [SDL] Affichage + Timer

buno

Administrateur CodeS-SourceS
Pour la zone de texte, SDL n'étant pas fait pour ça, il faut plutôt chercher du côté de la communauté, genre ici par exemple


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
vendredi 24 août 2012 à 16:11:51 | Re : [SDL] Affichage + Timer

adel1433

en utilisant gtk j'ai rencontré un problème dans la 1er partie:
j'ai réussi a afficher le temps mais il reste constant (le temps qui s'affiche est le temps de l&#8217;exécution du programme)



et en utilisant la fonction g_timeout_add_seconds() voila mon code
le temps s'actualise mais j'avais un problème que le temps ne s'affiche pas dans la fenêtre

Code c :
#include <stdlib.h>
#include <gtk/gtk.h>
#include <time.h>



void affiche(    GtkWidget* Fenetre  ,GtkWidget* Label){
char temps[256];
gchar* TexteConverti = NULL;


time_t timestamp = time(NULL);
strftime(temps, sizeof(temps), "%X", localtime(&timestamp));



printf(temps);//pour vérifier si le temps s'actualise

    TexteConverti = g_locale_to_utf8(temps,-1, NULL, NULL, NULL);  //Convertion du texte avec les balises
    Label=gtk_label_new(TexteConverti); // Application de la convertion à notre label
    g_free(TexteConverti); // Libération de la mémoire
   gtk_container_add(GTK_CONTAINER(Fenetre), Label);//je crois que c'est ici le problème:quand j&#8217;exécute il s'affiche en ecran noir le message:gtk_container_add: assertion 'gtk_is_container' <container> ' failed
   gtk_widget_show(Label); // On affiche 'Fenetre' et tout ce qu'il contient

}


int main(int argc,char **argv)
{
    GtkWidget* Fenetre = NULL;
    GtkWidget* Label = NULL;

    gtk_init(&argc, &argv);


    Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // Définition de la fenêtre
    gtk_window_set_title(GTK_WINDOW(Fenetre), "Le texte avec les labels"); // Titre de la fenêtre


gtk_window_set_default_size(GTK_WINDOW(Fenetre), 300, 100); // Taille de la fenêtre


    gtk_widget_show(Fenetre); // On affiche 'Fenetre' et tout ce qu'il contient




g_timeout_add_seconds  (1,affiche,Label);




    gtk_main();

    return EXIT_SUCCESS;
}

dimanche 26 août 2012 à 04:54:46 | Re : [SDL] Affichage + Timer

adel1433

ya t'il quelqu'un qui peut m'aider a corriger le dernier code ou j'ai utiliser la bibliothèque GTK


Cette discussion est classée dans : texte, temps, police, sdl, ttf


Répondre à ce message

Sujets en rapport avec ce message

Affichage de texte avec OpenGL et SDL sans SDL_ttf [ par asmanur ] Voilà je cherche à faire un code le plus portable possible e j'aimerais afficher du texte dans une fenetre SDL & OpenGL seulement voila SD_ttf ne fonc PB de pointeur et SDL et TTF [ par blinix123 ] Hello all,Voilou le sujet, un jeu de tir, quand la souris se trouve en haut a gauche et que l'on tire(clic gauche), c'est a dire if (event.motion.x < problème avec SDL_ttf [ par fivel ] Bonjour, Je dois  réaliser un mini jeu du bataille navale avec la SDL. J'ai installé la bibliothèque SDL_ttf, afin d'écrire du texte à l'écran .ex: "V Afficher du Texte avec SDL [ par Arnauti ] Bonjour a tous,Je voudrais savoir comment faire pour afficher du texte en SDL.Pouvez vous m'aider ?A++Si un des membres a posté une r Fichier Texte, Affichage et TEMPS RÉEL [ par proggen ] Bonjour, je veut coder un prog en temps réel. Celui-ci doit traiter des informations arrivant à chaque 0.25 secondes dans un fichier texte et ensuite Bibliothèque SDL [ par haarp6 ] Bonsoir à tous, je bosse en ce moment sur un petit démineur en SDL, donc je viens de commencer dessus, et mon code me génère une exception non gérée. choix de la taille de la police [ par mogwai93 ] Bonjour J'ai un static d'une largeur définie A l'intérieur de celui-ci, je place un texte dans une police de mon choix (on va faire simple, on va dir Affichage du texte avec SDL [ par thomas3347 ] Bonjour,Je cherche à afficher un nombre (à l'aide de SDL) à chaque fois qu'une condition est vérifiée : dans mon programme :1) J'affiche la fenêtre et comment recuperer et afficher d'un texte lu en sdl [ par cherif2009 ] bonsoir je developpe actuellement une application en sdl et j'ai besoin d'aide à propos de comment recuperer et afficher un texte en sdl. merci pour v Taille de la Police [ par victorcoasne ] Bonjour,Je veux écrire sur une image un texte.Je me sert de la librairie GD.J'ai par exemple un carré de 50px sur 100px et je veux écrire un texte ("L


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,554 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales