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

Soyez le premier à donner votre avis sur cette source.

Vue 12 736 fois - Téléchargée 404 fois

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

Ajouter un commentaire Commentaires
beeline Messages postés 83 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 9 juin 2009
18 juil. 2004 à 17:04
www.gtk-fr.org

meilleur adresse pour gtk.
Il y a un forum et de l'aide.

Sous dev cpp cela se fait tout seul avec les derniére version 2.2.4 ou 2.4.1. Faut juste lire le readme, configurer comme il faut l'ordinateur.

ET la faut pas oublier aussi sous dev cpp de choisir PROJET C (e et pas c++ )
Nouveau Projet=> GUI => Gtk+

Voila pour les difficulté d'installation ( c pas facile quand meme et j'y est passé du temps )

Mais aprés, on devien acro !!!
coq73 Messages postés 5 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 18 novembre 2004
1 juil. 2004 à 15:22
salut
je voulais compiler moi meme ce programme avec c++ visual..mais je n'y arrive pas..je suis debutant..quelqu'un sait comment je dois y parvenir tout seul?
jonyhawk Messages postés 1 Date d'inscription dimanche 15 février 2004 Statut Membre Dernière intervention 15 février 2004
15 févr. 2004 à 17:49
bonjours,
g copiè le script dans dev c++ et il me di kil ne trouve pa le fichier <gtk/gtk.h> que dois je faire pour faire marché ce programme


merci encore!!
cs_kjus Messages postés 269 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 9 juin 2003
29 juil. 2002 à 23:49
tu vois où que c'est copié ?
trouve-moi un site où il y a la meme chose...
mon code est absolument pas pompé.
merci VBSephiroth

le msg de stormy est en fait une réaction au fait que j'ai commenté ca source. En effet, sa source était la copie conforme d'un tutorial disponible sur un autre site (nehe.gamedev.net), et il ne mentionnait nul part le fait que la source n'était pas de son cru. Voici sa source qu'il a copiée :
http://www.cppfrance.com/article.aspx?Val=907

concernant la mienne, je le repette c'est absolument pas pompé.
cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 janvier 2007
29 juil. 2002 à 23:10
Ton prog est digne de figurer dans Mickey Parade et en plus c une simple (et mauvaise) pompe d'un truc pas à toi. Etc...etc...
Moi aussi je peux jouer à ça petit!!!
Je donne 1 pour l'orthographe car c bien tapé.

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.