[gtk+][win/gnulinux]jeu d'allumettes

Description

J'ai commencé ya pas trop longtemps la prog avec gtk+.
Voici mon premier vrai prog avec, en fait, il s'agit d'un remake de mon jeu "allumettes" que j'avais fait tout d'abord en mode console
Le jeu est un jeu sympa de logique (les règles sont dans la section information du prog)
vous pouvez regler le niveau, etc...

Pour pouvoir utiliser le prog, il faut la lib suivante (pour win) :
http://www.bloodshed.net/dev/packages/bin/gtk-runtime.exe

si vous avez envie de compiler vous-meme ma source, rdv ici pour télécharger les packages developpements necessaires pour dev-c++ :
http://www.bloodshed.net/dev/packages/gtk.html

Source / Exemple :


// début pour vous faire une idée (tout est inclus dans le zip)

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

GtkWidget *win;
GtkWidget *bigbox;
GtkWidget *boxmenu;
GtkWidget *gamebox;
GtkWidget *leftframe;
GtkWidget *rightframe;
GtkWidget *grilledebut;
GtkWidget *menu;
GtkWidget *menu_nouveau, *menu_about, *menu_quitter;
GtkWidget *optionbox;
GtkWidget *jeubox;

GtkWidget *labelniveau;
GtkWidget *labelcommencer;
GtkWidget *boutoncommencer;
GtkWidget *boutonniv1, *boutonniv2, *boutonniv3, *commencerpc, *commencerhumain;

GtkWidget *separateur;

GtkWidget *gamelabel, *selectcaselabel, *selectnblabel;
GtkWidget *bouttonvalider;

GtkWidget *nbentry, *ligneentry;

GtkWidget *boutonvalider;

GtkWidget *infobox, *infolabel;

GtkWidget *fin, *finlabel, *finbouton;
GtkWidget *war, *warbouton, *warlabel;

GtkWidget *scorelabel;

char fintxt[60];

int *etat;
int niveau;
char start;
int mode;
struct _joueur{
int parties;
int points;
}joueur;

void quitter(void);
void nouveau_jeu(void);
void about(void);
void commencer(void);
void jeu (int);
int addition(int tabl[]);
void humainjoue(void);
void actualiseraff(void);
void init_jeu(int, char);
void pcjoue();
void liberer();
void destroy_fin(void);
void warning(void);
void warning_destroy(void);

int main( int   argc, char *argv[] ) {

    joueur.parties=0;
    joueur.points=0;
    mode=0;
    gtk_init (&argc, &argv);
    
    win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_container_set_border_width (GTK_CONTAINER (win), 5);
    gtk_window_set_title (GTK_WINDOW (win), "Gtk Allumettes v1.1");
    gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(win), 300,100);  
    g_signal_connect (win, "destroy", gtk_main_quit, NULL);

    bigbox=gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(bigbox));
    gtk_widget_show(bigbox);
    
    boxmenu=gtk_hbox_new(TRUE, 0);
    gtk_box_pack_start(GTK_BOX(bigbox), GTK_WIDGET(boxmenu), FALSE,FALSE, 0);
    gtk_widget_show(boxmenu);

    menu=gtk_menu_bar_new();
    gtk_box_pack_start(GTK_BOX(boxmenu), GTK_WIDGET(menu), TRUE,TRUE, 0);
    gtk_widget_show(menu);
    
    menu_nouveau=gtk_menu_item_new_with_label("Nouvelle partie ");
    menu_about=gtk_menu_item_new_with_label(" Informations  ");
    menu_quitter=gtk_menu_item_new_with_label(" Quitter !  ");
    
    gtk_menu_bar_append (GTK_MENU_BAR (menu), menu_nouveau);
    gtk_menu_bar_append (GTK_MENU_BAR (menu), menu_about);
    gtk_menu_bar_append (GTK_MENU_BAR (menu), menu_quitter);
    
    gtk_widget_show(menu_nouveau);
    gtk_widget_show(menu_about);
    gtk_widget_show(menu_quitter);
    
    g_signal_connect(G_OBJECT(menu_quitter), "activate", G_CALLBACK(quitter), NULL);
    g_signal_connect(G_OBJECT(menu_about), "activate", G_CALLBACK(about), NULL);
    g_signal_connect(G_OBJECT(menu_nouveau), "activate", G_CALLBACK(nouveau_jeu), NULL);
    
    gtk_widget_show(win);
    gtk_main ();
    return 0;
}

void quitter(void){
liberer();
free(etat);
gtk_main_quit();
}
void nouveau_jeu(void){
liberer();
mode=1;
optionbox=gtk_hbox_new(TRUE, 5);
leftframe=gtk_vbox_new(FALSE, 5);
rightframe=gtk_vbox_new(FALSE, 5);
gtk_widget_show(optionbox);
gtk_widget_show(leftframe);
gtk_widget_show(rightframe);
gtk_box_pack_start(GTK_BOX(optionbox), GTK_WIDGET(leftframe), TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(optionbox), GTK_WIDGET(rightframe), TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(bigbox), GTK_WIDGET(optionbox), TRUE, TRUE, 0);

labelniveau=gtk_label_new("Veuillez selectionner un niveau");
labelcommencer=gtk_label_new("Veuillez dire qui va commencer");
gtk_box_pack_start(GTK_BOX(leftframe), GTK_WIDGET(labelniveau), FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(rightframe), GTK_WIDGET(labelcommencer), FALSE, FALSE, 5);
gtk_widget_show(labelniveau);
gtk_widget_show(labelcommencer);

boutonniv1=gtk_radio_button_new_with_label(NULL, "niveau 1 : super facile");
boutonniv2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(boutonniv1), "niveau 2 : moyen ");
boutonniv3=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(boutonniv2), "niveau 3 : dur ");
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(boutonniv2),TRUE );
gtk_widget_show(boutonniv1);
gtk_widget_show(boutonniv2);
gtk_widget_show(boutonniv3);
gtk_box_pack_start(GTK_BOX(leftframe), GTK_WIDGET(boutonniv1), FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(leftframe), GTK_WIDGET(boutonniv2), FALSE, FALSE, 1);
gtk_box_pack_start(GTK_BOX(leftframe), GTK_WIDGET(boutonniv3), FALSE, FALSE, 1);

separateur=gtk_hseparator_new();
gtk_widget_show(separateur);
gtk_box_pack_start(GTK_BOX(leftframe), GTK_WIDGET(separateur), TRUE, TRUE, 0);

boutoncommencer=gtk_button_new_with_label("Commencer !");
gtk_box_pack_start(GTK_BOX(leftframe), GTK_WIDGET(boutoncommencer), TRUE, TRUE, 2);
gtk_widget_show(boutoncommencer);
g_signal_connect(G_OBJECT(boutoncommencer), "clicked", G_CALLBACK(commencer), NULL);

commencerpc=gtk_radio_button_new_with_label(NULL, "c'est le pc");
commencerhumain=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(commencerpc), "c'est vous");
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(commencerhumain),TRUE );
gtk_box_pack_start(GTK_BOX(rightframe), GTK_WIDGET(commencerpc), FALSE, FALSE, 2);
gtk_box_pack_start(GTK_BOX(rightframe), GTK_WIDGET(commencerhumain), FALSE, FALSE, 2);
gtk_widget_show(commencerpc);
gtk_widget_show(commencerhumain);
separateur=gtk_hseparator_new();
gtk_widget_show(separateur);
gtk_box_pack_start(GTK_BOX(rightframe), GTK_WIDGET(separateur), TRUE, TRUE, 0);

//GtkWidget *boutoncommecner;
//GtkWidget *boutonniv1, *boutonniv2, boutonniv3, *commencerpc, *commencerhumain;
}
void about(void){
liberer();
mode=3;
infobox=gtk_vbox_new(TRUE, 5);
gtk_box_pack_start(GTK_BOX(bigbox), infobox, TRUE, TRUE, 5);

gtk_widget_show(infobox);
infolabel=gtk_label_new("  licence gpl   \n    vous etes libre de copier, modifier, redistribuer la \nprogramme modifie ou tel quel suivant les termes de la gpl \n    \n           Regle du jeu allumettes : \n  \nVous pouvez retirer autant d'allumettes que  \nvos voulez sur une seule et meme ligne\nCelui qui prend la derniere a perdu\nBonne chance !\n \nPoints : \nniveau 1 : 1point\nniveau 2 : 4points\nniveau 3 : 9 points.");
gtk_box_pack_start(GTK_BOX(infobox), infolabel, TRUE, TRUE, 5);
gtk_widget_show(infolabel);
return;

}
void commencer(void){
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(commencerpc)))
start='n';
else 
start='o';
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(boutonniv1))){
niveau=1;
}else {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(boutonniv2)))
niveau=2;
else 
niveau=3;
}

liberer();

etat=(int *)malloc(sizeof(int)*5);

  • etat=1;
  • (etat+1)=2;
  • (etat+2)=3;
  • (etat+3)=5;
  • (etat+4)=8;

Conclusion :


Licence gpl (www.gnu.org)
J'attend vos commentaires ;)

Codes Sources

A voir également