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

Soyez le premier à donner votre avis sur cette source.

Vue 12 216 fois - Téléchargée 354 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

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

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

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

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

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.