Un nombre à calculer

Contenu du snippet

Voici un petit programme très simple, mettant en oeuvre les principes de base de GTK+ (2.4 au moins).
Avec une fonction Callback associée au bouton de validation du calcul.
Attention, j'ai mis tous les widgets en variables globales, c'est plus simple
dans un premier temps pour les débutants...

(Bientôt, je mettrais aussi sur ce site une calculatrice complète et fonctionnelle
en GTK+ 2.4).
Bonne étude...

Source / Exemple :


#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>

// ligne à utiliser pour la compilation sous Linux :
// gcc nombre_a_calc.c -o nombre_a_calc.exe `pkg-config --cflags --libs gtk+-2.0`

  GtkWidget *fenetre;
  GtkWidget *vbox;
  GtkWidget *lab_calcul_a_faire;
  GtkWidget *entry_resultat;
  GtkWidget *bout_valider;
  GtkWidget *lab_infos;

gint a, b, c;

void preparer_un_nouveau_calcul(void);
void verification(GtkWidget *widget, gpointer data);

int main(int argc, char **argv)
{
  gtk_init(&argc, &argv);

  fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_size_request (fenetre, 300, 200);
  gtk_window_set_title (GTK_WINDOW (fenetre), "Trouver la valeur");
  g_signal_connect(G_OBJECT(fenetre),"destroy",G_CALLBACK(gtk_main_quit), NULL);

  vbox = gtk_vbox_new (TRUE, 10);
  gtk_container_add (GTK_CONTAINER (fenetre), vbox);
  gtk_container_set_border_width (GTK_CONTAINER (vbox), 20);

  lab_calcul_a_faire = gtk_label_new ( "un calcul" );
  gtk_box_pack_start (GTK_BOX (vbox), lab_calcul_a_faire, FALSE, FALSE, 0);
  preparer_un_nouveau_calcul();

  entry_resultat = gtk_entry_new ();
  gtk_box_pack_start (GTK_BOX (vbox), entry_resultat, FALSE, FALSE, 0);

  bout_valider = gtk_button_new_with_label("Valider votre réponse");
  gtk_box_pack_start (GTK_BOX (vbox), bout_valider, FALSE, FALSE, 0);
  g_signal_connect(G_OBJECT(bout_valider),"clicked",G_CALLBACK(verification), NULL);

  lab_infos = gtk_label_new("Tentez une réponse !");
  gtk_box_pack_start (GTK_BOX (vbox), lab_infos, FALSE, FALSE, 0);

  gtk_widget_show_all(fenetre);
  gtk_main();

  return EXIT_SUCCESS;
}

void preparer_un_nouveau_calcul(void)
{
  srand(time(NULL));
  a = rand() % 5;
  b = rand() % 5;
  c = a*b;

gtk_label_set_text(GTK_LABEL(lab_calcul_a_faire),
                   g_strdup_printf ("Calculez %d x %d =", a, b) );
}

void verification(GtkWidget *widget, gpointer data)
{
const gchar *result_recupere;
gint resultat;

result_recupere = gtk_entry_get_text(GTK_ENTRY(entry_resultat));

resultat=atoi(result_recupere);

if(resultat==c)
     {
     gtk_label_set_text(GTK_LABEL(lab_infos),"Bonne réponse ! Recommencez...");
     }
else {
     gtk_label_set_text(GTK_LABEL(lab_infos),"Mauvaise réponse ! Ré-essayez...");
     }

preparer_un_nouveau_calcul();

gtk_entry_set_text(GTK_ENTRY(entry_resultat),"");
}

Conclusion :


Voilà, en espérant que cela serve aux débutants...

Calogero GIGANTE

http://www.gigante.be/

A voir également

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.