________________________________________________ L1 -- IIG -- GTK : TP 'Mastermind' Premier TP : vue #1 ________________________________________________ ____ Objectif du TP ____ Le but est de concevoir une interface graphique pour le jeu de mastermind, soit de definir les composants graphiques qui vont permettre de representer le jeu de mastermind et interagir avec l'utilisateur. ____ TP 1, premiere partie : s'initier à gtk ____ 0) Que se passe-t-il, lorsque l'on execute le programme suivant : #include #include /* Fonction main */ int main() { /* Initialisation de l'environnement Gtk */ gtk_init(NULL, NULL); /* Lancement de la boucle événementielle */ gtk_main(); return EXIT_SUCCESS; } 1) Que se passe-t-il, lorsque l'on execute le programme suivant : #include #include /* Fonction main */ int main(int argc,char **argv) { /* Declaration de la fenetre */ GtkWidget *fenetre; /* Initialisation de l'environnement Gtk */ gtk_init(&argc, &argv); /* Creation de la fenetre */ fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Affichage de la fenetre */ gtk_widget_show(fenetre); /* Lancement de la boucle événementielle */ gtk_main(); return EXIT_SUCCESS; } En particulier, que se passe-t-il lorsqu'en cours d'execution de ce programme, l'utilisateur clique sur le coin nord-est de la fenetre ? 2) Que se passe-t-il, lorsque l'on execute le programme suivant : #include #include /* Déclaration de la fonction qui sera associée au signal de destruction de la fenêtre */ void cb_quitter(GtkWidget* fenetre, gpointer param); /* Fonction main */ int main(int argc,char **argv) { /* Declaration de la fenetre */ GtkWidget *fenetre; /* Initialisation de l'environnement Gtk */ gtk_init(&argc, &argv); /* Creation de la fenetre */ fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Affichage de la fenetre */ gtk_widget_show(fenetre); /* On associe la fonction cb_quitter au signal de fermeture de la fenêtre */ gtk_signal_connect(GTK_OBJECT(fenetre), "destroy", G_CALLBACK(cb_quitter), NULL); /* Lancement de la boucle événementielle */ gtk_main(); return EXIT_SUCCESS; } /* Définition de la fonction qui sera associée au signal de destruction de la fenêtre */ void cb_quitter(GtkWidget* fenetre, gpointer param); { /* On quitte la boucle événementielle */ gtk_main_quit(); } En particulier, que se passe-t-il lorsqu'en cours d'execution de ce programme, l'utilisateur clique sur le coin nord-est de la fenetre ? 3) Que se passe-t-il, lorsque l'on execute le programme suivant : #include #include #include /* Déclaration de la fonction qui sera associée au signal de destruction de la fenêtre */ void cb_quitter(GtkWidget* fenetre, gpointer param); /* Fonction main */ int main(int argc,char **argv) { /* Declaration de la fenetre */ GtkWidget *fenetre; /* Initialisation de l'environnement Gtk */ gtk_init(&argc, &argv); /* Creation de la fenetre */ fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Affecter un titre à la fenêtre */ gtk_window_set_title(GTK_WINDOW(fenetre), "Jeu de mastermind"); /* Dimensionnement de la fenetre */ gtk_window_set_default_size(GTK_WINDOW(fenetre), 1000, 200); /* On associe la fonction cb_quitter au signal de fermeture de la fenêtre */ gtk_signal_connect(GTK_OBJECT(fenetre), "destroy", G_CALLBACK(cb_quitter), NULL); /* Affichage de la fenetre */ gtk_widget_show(fenetre); /* Lancement de la boucle événementielle */ gtk_main(); return EXIT_SUCCESS; } /* Définition de la fonction qui sera associée au signal de destruction de la fenêtre */ void cb_quitter(GtkWidget* fenetre, gpointer param) { printf("Au secours, on a detruit la fenetre !\n"); } En particulier, que se passe-t-il lorsqu'en cours d'execution de ce programme, l'utilisateur clique sur le coin nord-est de la fenetre ? ____ TP 1, deuxieme partie ____ Pour repesenter le jeu de mastermind, on peut imaginer utiliser (entre-autres) un libelle "nombre d'essais restants", suivi d'un libelle indiquant ce nombre. 1) Construire un libelle pour le libelle "nombre d'essais restants", l'inclure dans la fenetre et le rendre visible dans l'interface. 2) Construire un libelle pour representer ce nombre, l'inclure dans la fenetre et le rendre visible dans l'interface. Que se passe-t-il a l'execution ? Pour repesenter le jeu de mastermind, on peut imaginer utiliser un bouton permettant de quitter l'application. 3) Construire ce bouton, l'inclure dans la fenetre et le rendre visible dans l'interface. Faire en sorte, qu'il permette effectivement de quitter l'application lorsque l'on clique dessus ! Avez-vous songe au raccourci clavier ? Multilinguisme. Et si l'interface comportait un bouton qui permet de passer de franais a l'anglais, et vice-versa ? 4) Il faut evidemment ajouter ce bouton a l'interface. Le libelle du bouton doit indiquer "francais" pour passer au francais lorsque l'interface est en anglais et "english" pour passer a l'anglais lorsque l'interface est en francais. Dans un premier temps : faire en sorte que, lorsque l'on clique sur le bouton, son libelle change. 5) Dans un second temps : lorsque l'on clique sur le bouton, son libelle mais aussi le titre de la fenetre, changent.