IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Deplacement pièce jeu de Dame


Sujet :

GTK+ avec C & C++

  1. #21
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Citation Envoyé par totomania Voir le message
    J'ai justement ca qui me pose probleme. Notamment au niveau des images. J'ai joins mon code en C dans mon dernière message, mais ce qui me pose problème, c'est comment definir les images de mes pions à partir de mes caracteres "n", "b", "B" et "N"...
    Utilise gtk_image_new_from_file au départ pour créer tes différentes images, et stocke les dans un tableau (si tu veux utiliser comme index un type énuméré pour les pièces) ou une table de hachage (GHashTable, si tu préfères avoir un caractère comme index, et l'utiliser pour représenter ta pièce). Ensuite, gtk_button_set_image devrait faire l'affaire.

  2. #22
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Tout d'abord je n'afficherai pas le damier comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    n	n	n	n	N	n	n	n	n	
    n	n	n	n	n	n	n	n	n	
     
     
     
     
     
    b	b	b	b	b	b	b	b	b	
    b	b	b	b	B	b	b	b	b
    mais plutôt comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    n	n	n	n	N	n	n	n	n	
    n	n	n	n	n	n	n	n	n	
    0	0	0	0	0	0	0	0	0	
    0	0	0	0	0	0	0	0	0	
    0	0	0	0	0	0	0	0	0	
    0	0	0	0	0	0	0	0	0	
    0	0	0	0	0	0	0	0	0	
    b	b	b	b	b	b	b	b	b	
    b	b	b	b	B	b	b	b	b
    Ainsi il est possible de définir un chiffre ou une lettre pour chaque état des cases (c'est un exemple) :
    • n pion noir
    • b pion blanc
    • N dame noire
    • B dame blanche
    • 0 case vide


    En partant de ce principe tu peux créer une fonction qui va lire ton tableau et appliquer le dessin correspondant. Un simple switch() devrait suffire à l'opération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     for(i=0 ;i<=8 ;i++)
        {
          for(j=0 ;j<=8 ;j++)
            {
               switch (jeu->plateau[i][j])
                 {
                    case '0' : afficher une case vide; break;
                    case 'b' : afficher un pion blanc; break;
                    case 'B' : afficher une dame blanche; break;
                    case 'n' : afficher un pion noir; break;
                    case 'N' : afficher une dame noire; break;
                    default : afficher un message d'erreur : code inconnu;
                 }
            }
        }
    Merci de ta réponse!! Cependant le programme m'affiche une erreur du type "switch quantity not an interger"... comment puis-je résoudre ce probleme?


    @liberforce merci de ta réponse j'ai crée comme tu me l'as dit mes images
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     pionblanc= gtk_image_new_from_file ("croixblanc.png");
    mais après j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gtk_container_add(GTK_CONTAINER(partie.jeubouton[i][j]), pionblanc)
    dans mon switch pour ré-afficher mes images lorsqu’il détecte le caractère spécifié?



    merci encore


    Edit: jme suis repenché dessus... j'obtiens le programme suivant, qui ne marche pas vraiment bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
     #include <gtk/gtk.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    typedef struct coup_ {
        int case1[2];
        int case2[2];
    } coup;
     
    typedef enum  {O = 1, n = 2, N = 3, b = 4, B = 5} pion_modele;
     
    typedef struct jeu_ {
        GtkWidget *jeubouton[9][9];
        GtkWidget *pionblanc;
        GtkWidget *damejoueur1;
        GtkWidget *pionnoir;
        GtkWidget *damejoueur2;
        GtkWidget *pion;
        int click;
        coup cases;
        pion_modele plateau_modele[9][9];
    	} jeu;
     
     
    jeu* malloc_jeu(){
        return (jeu *)(malloc(sizeof(jeu)));
    }
     
    void OnQuitBtn(GtkWidget *pBtn, gpointer data);// Bouton quitter
    void jouer(GtkWidget *widget,jeu * game);
     
     
     
    //Début programme
    int main(int argc, char *argv[]) {
    //Création Widget
    jeu partie;
    GtkWidget *fenetre,*pTable, *pMenuBar, *pMenu,*pMenuItem,*pVBox,*pionblanc,*pionnoir,*dameblanc,*damenoir,*aspect_frame;
    GtkWidget *jeubouton[9][9];
    GtkSettings *default_settings = gtk_settings_get_default();
    g_object_set(default_settings, "gtk-button-images", TRUE, NULL);
     
     
    gtk_init(&argc,&argv);
     
    fenetre=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(fenetre),"Jeu de Dames");
    gtk_window_set_resizable(GTK_WINDOW(fenetre),TRUE);
     
    partie.click=1;
     
    gtk_window_set_default_size(GTK_WINDOW(fenetre), 240, 240);
    g_signal_connect(G_OBJECT(fenetre), "destroy", G_CALLBACK(gtk_main_quit),NULL);
     
    pVBox = gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(fenetre), pVBox);
     
    pMenuBar = gtk_menu_bar_new();
     
    /* ETAPE 2 */
    pMenu = gtk_menu_new();
     
    /* ETAPE 3 */
    pMenuItem = gtk_menu_item_new_with_label("Nouvelle partie");
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
     
    pMenuItem = gtk_separator_menu_item_new();
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
    pMenuItem = gtk_menu_item_new_with_label("Regles du jeu");
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
    pMenuItem = gtk_separator_menu_item_new();
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
    pMenuItem = gtk_menu_item_new_with_label("Quitter");
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
    g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(OnQuitBtn),
    (GtkWidget*) fenetre);
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
    /* ETAPE 4 */
    pMenuItem = gtk_menu_item_new_with_label("Fichier");
    /* ETAPE 5 */
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu);
    /* ETAPE 6 */
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem);
     
     
    /* Ajout du menu a la fenetre */
    gtk_box_pack_start(GTK_BOX(pVBox), pMenuBar, FALSE, FALSE, 0);
    pMenuItem = gtk_separator_menu_item_new();
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
     
     
    /* par défaut, les cases font environ 30×30 px, c'est plus joli :-° */
      gtk_window_set_default_size (GTK_WINDOW (fenetre), 9 * 30, 9 * 30);
     
     
      /* frame d'aspect */
      aspect_frame = gtk_aspect_frame_new (NULL, 0.5, 0.5, 9/(9 * 1.0), FALSE);
      gtk_frame_set_shadow_type (GTK_FRAME (aspect_frame), GTK_SHADOW_NONE);
      gtk_container_add (GTK_CONTAINER (pVBox), aspect_frame);
     
    pTable =  gtk_table_new(9, 9,TRUE);
    gtk_container_add(GTK_CONTAINER(aspect_frame), pTable);
    gtk_table_set_row_spacing(GTK_TABLE(pTable), 0, 0);
    gtk_table_set_col_spacing(GTK_TABLE (pTable), 0, 0);
    gtk_box_pack_start(GTK_BOX(pVBox), pTable, TRUE, TRUE,0);
     
    jeu *plateau = malloc_jeu();
     
    plateau->pionblanc= gtk_image_new_from_file ("croixblanc.png");//image pion blanc
    plateau->pionnoir= gtk_image_new_from_file ("croixnoir.png");// image pion noir
     
    int i;
    int j;
    for (i=0;i<9;i++) {
        for (j=0;j<9;j++) {
            plateau->jeubouton[i][j] = gtk_button_new();
            }
        }
     
    for (i=0; i<9;i++) {
         for (j=0;j<9;j++) {
            gtk_table_attach_defaults(GTK_TABLE(pTable), plateau->jeubouton[i][j],i,i+1,j,j+1);
            }
        }
     
    // Connection des boutons
     
    for(i=0;i<9;i++) {
        for(j=0;j<9;j++) {
        g_signal_connect(G_OBJECT(plateau->jeubouton[i][j]),"clicked",G_CALLBACK(jouer),plateau);
            }
        }
     
     
     
        for(i=0 ;i<=8 ;i++)
        {
          for(j=0 ;j<=8 ;j++)
            {
               switch ((plateau->plateau_modele)[i][j])
                 {
                    case O : gtk_container_add(GTK_CONTAINER(plateau->jeubouton[i][j]), pionblanc); break;
                    case b : gtk_container_add(GTK_CONTAINER(plateau->jeubouton[i][j]), pionblanc); break;
                    case B : gtk_container_add(GTK_CONTAINER(plateau->jeubouton[i][j]), dameblanc); break;
                    case n : gtk_container_add(GTK_CONTAINER(plateau->jeubouton[i][j]), pionnoir); break;
                    case N : gtk_container_add(GTK_CONTAINER(plateau->jeubouton[i][j]), damenoir); break;
                    default : gtk_container_add(GTK_CONTAINER(plateau->jeubouton[i][j]), damenoir); break;
                 }
            }
        }
     
    //initialisation damier
    for (j=0;j<2;j++){
        for (i=0;i<9;i++){
     
        pionblanc= gtk_image_new_from_file("/Users/Christophe/Downloads/pionblanc.jpg");
        gtk_button_set_image(GTK_BUTTON(plateau->jeubouton[i][j]), pionblanc);
        }
    }
     
     
    for (j=7;j<9;j++){
        for (i=0;i<9;i++){
            pionnoir= gtk_image_new_from_file("/Users/Christophe/Downloads/pionnoir.jpg");
        gtk_button_set_image(GTK_BUTTON(plateau->jeubouton[i][j]), pionnoir);
        }
    }
     
    dameblanc = gtk_image_new_from_file("/Users/Christophe/Downloads/dameblanche.jpg");
    gtk_button_set_image(GTK_BUTTON(plateau->jeubouton[4][0]),dameblanc);
     
     
    // Dame2
     
    damenoir = gtk_image_new_from_file("/Users/Christophe/Downloads/damenoir.jpg");
        gtk_button_set_image(GTK_BUTTON(plateau->jeubouton[4][8]), damenoir);
     
     
    //couleurs
    GdkColor casecentrale;
    gdk_color_parse("#FF007F", &casecentrale);
    gtk_widget_modify_bg(GTK_WIDGET(plateau->jeubouton[4][4]), GTK_STATE_NORMAL, &casecentrale);
     
    GdkColor casedameblanche;
    gdk_color_parse("#9EFD38",&casedameblanche);
     
    GdkColor casedamenoir;
    gdk_color_parse("#000000",&casedamenoir);
     
     
    for(i=0;i<5;i++) {
     
       gtk_widget_modify_bg(GTK_WIDGET(plateau->jeubouton[4-i][8-i]), GTK_STATE_NORMAL, &casedameblanche);}
     
     
     
     
     
     
     
     
     
     
     
    gtk_widget_show_all(fenetre);
    gtk_main();
     
    return 0;
    }
     
    void OnQuitBtn(GtkWidget* widget, gpointer data)
    {
    GtkWidget *pQuestion;/* Creation de la boite de message */
    /* Type : Question >
    GTK_MESSAGE_QUESTION */
    /* Boutons : 1 OUI, 1 NON >
    GTK_BUTTONS_YES_NO */
    pQuestion = gtk_message_dialog_new (GTK_WINDOW(data),
    GTK_DIALOG_MODAL,
    GTK_MESSAGE_QUESTION,
    GTK_BUTTONS_YES_NO,
    "hey charbo, Voulez vous vraiment\nquitter ce programme?");
    /* Affichage et attente d une reponse */
    switch(gtk_dialog_run(GTK_DIALOG(pQuestion)))
    {
    case GTK_RESPONSE_YES:
    /* OUI >
    on quitte l application */
    gtk_main_quit();
    break;
    case GTK_RESPONSE_NO:
    /* NON >
    on detruit la boite de message */
    gtk_widget_destroy(pQuestion);
    break;
    }
    }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    void jouer (GtkWidget *widget,jeu * plateau) {
      int i;
      int j;
      /* game->click=1; */
     
     
      if (plateau->click==1)
        {
          for(j=0;j<9;j++)
    	{
    	  for(i=0;i<9;i++)
    	    {
    	      if (plateau->jeubouton[i][j]==widget)
    		{
    		  (plateau->cases).case1[0]=i;
    		  (plateau->cases).case1[1]=j;
    		  (plateau->pion)=gtk_button_get_image(GTK_BUTTON(plateau->jeubouton[(plateau->cases).case1[0]][(plateau->cases).case1[1]]));
    		  plateau->click=2;
    		}
    	    }
    	}
        }
      else
        {
          for(j=0;j<9;j++)
    	{
    	  for(i=0;i<9;i++)
    	    {
    	      if (plateau->jeubouton[i][j]==widget)
    		{
    		  (plateau->cases).case2[0]=i;
    		  (plateau->cases).case2[1]=j;
     
     
     
    		  gtk_button_set_image (GTK_BUTTON (plateau->jeubouton[(plateau->cases).case2[0]][(plateau->cases).case2[1]]),
    					plateau->pion);
    		  plateau->click=1;
    		}
    	    }
    	}
        }}

  3. #23
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    pour changer une image d'un bouton il suffit d'utiliser la fonction gtk_button_set_image();. Il ne faut pas utiliser gtk_container_add(); pour cette opération.

    Pour le switch il te suffit de caster jeu->plateau[i][j] en int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    switch ((int)jeu->plateau[i][j])

  4. #24
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    D'accord merci

    Par contre, comment faire pour dire que sur une case vide je dois pas avoir d'images?
    et dans la case defaults???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     for(i=0 ;i<=8 ;i++)
        {
          for(j=0 ;j<=8 ;j++)
            {
               switch ((int)(plateau->plateau_modele)[i][j])
                 {
                    case O :???; break;
                    case b : gtk_button_set_image(GTK_BUTTON(plateau->jeubouton[i][j]), pionblanc);  break;
                    case B : gtk_button_set_image(GTK_BUTTON(plateau->jeubouton[i][j]), dameblanc);  break;
                    case n : gtk_button_set_image(GTK_BUTTON(plateau->jeubouton[i][j]), pionnoir);  break;
                    case N : gtk_button_set_image(GTK_BUTTON(plateau->jeubouton[i][j]), damenoir);  break;
                    default : ???; break;
                 }
            }
    merci encore

  5. #25
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Le choix default, tu peux t'en passer.

    Pour la case vide as tu essayé [I]gtk_button_set_image (GTK_BUTTON(plateau->jeubouton[j]), NULL); ?

  6. #26
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    D'accord, je vais essayer ça. Cependant, jai du mal à voir comment integrer ma aprtie GTK à ma partie faite en langageC. J'ai séparé mes différentes parties de mon language C mais je sais pas ou introduire mon gtk. Je le met dans un autre fichier .c ? Je vous joins les différentes partie de mon programme en C.

    Merci encore
    Fichiers attachés Fichiers attachés
    • Type de fichier : h bec.h (1,4 Ko, 48 affichages)
    • Type de fichier : c bec.c (14,0 Ko, 93 affichages)
    • Type de fichier : c main (4).c (782 octets, 66 affichages)

  7. #27
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Tu peux continuer comme tu l'as fait pour ton moteur. Tu crées un .h et .c dans lesquels tu construis ton interface.
    Dans le .h tu inclus bec.h pour avoir accès au moteur de jeu. Ton interface se lance depuis le main();.

  8. #28
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    BOnjour et encore merci

    J'ai fait comme tu m'as dit et je me retrouve avec ceci (pieces jointes). Cependant une erreur s'affiche "multiple definition of mallo_abel". Je ne l'ai défini qu'une fois, je ne vois donc pas d'ou vient l'erreur...

    (encore) Merci
    Fichiers attachés Fichiers attachés

  9. #29
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Lorsqu'on crée un fichier header .h il faut penser qu'i peut être inclus de multiples fois dans un code. Le bon exemple est #include <stdio.h>. On le met à toutes les sauces .
    Pour pouvoir faire ca il faut encadrer tes déclarations par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef NOM_QUELCONQUE
    #define NOM_QUELCONQUE
    ... (ici on place toutes les déclarations)
    #endif
    Ainsi fait, le compilateur n'inserera qu'une seule fois ces déclarations même si tu fait des #include de ce header à tout bout de champs.

  10. #30
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Lorsqu'on crée un fichier header .h il faut penser qu'i peut être inclus de multiples fois dans un code. Le bon exemple est #include <stdio.h>. On le met à toutes les sauces .
    Pour pouvoir faire ca il faut encadrer tes déclarations par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef NOM_QUELCONQUE
    #define NOM_QUELCONQUE
    ... (ici on place toutes les déclarations)
    #endif
    Ainsi fait, le compilateur n'inserera qu'une seule fois ces déclarations même si tu fait des #include de ce header à tout bout de champs.
    Toujours le même problème... j'ai fait comme vous me l'avez dit, et quand je complie j'ai tjrs cette erreur...

  11. #31
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Supprime #include "interface.h" dans bec.c.

    Pendant que j'y suis. Je ne sais pas si tu es sous Linux mais au cas où tu trouveras en pièce jointe une archive de ton projet constuit avec les autotools. Je suis passé par là pour tester ton code .

    À la compilation j'obtiens aussi quelques warnings qu'il faudrait éliminer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    make -k 
    gcc -DHAVE_CONFIG_H -I. -I..    -g -Wall -Wunused `pkg-config --cflags gtk+-2.0` -g -O2 -MT bec.o -MD -MP -MF .deps/bec.Tpo -c -o bec.o bec.c
    bec.c: In function ‘coupobligatoire’:
    bec.c:589:10: warning: variable ‘c’ set but not used [-Wunused-but-set-variable]
    bec.c: In function ‘premier_joueur’:
    bec.c:620:12: warning: unused variable ‘jc’ [-Wunused-variable]
    bec.c: In function ‘testdeplacement2’:
    bec.c:350:1: warning: control reaches end of non-void function [-Wreturn-type]
    mv -f .deps/bec.Tpo .deps/bec.Po
    gcc -DHAVE_CONFIG_H -I. -I..    -g -Wall -Wunused `pkg-config --cflags gtk+-2.0` -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
    main.c: In function ‘main’:
    main.c:12:12: warning: unused variable ‘jeubouton’ [-Wunused-variable]
    main.c:10:6: warning: variable ‘partie’ set but not used [-Wunused-but-set-variable]
    main.c:118:46: warning: ‘pionblanc’ may be used uninitialized in this function [-Wuninitialized]
    main.c:119:46: warning: ‘dameblanc’ may be used uninitialized in this function [-Wuninitialized]
    main.c:120:46: warning: ‘pionnoir’ may be used uninitialized in this function [-Wuninitialized]
    main.c:121:46: warning: ‘damenoir’ may be used uninitialized in this function [-Wuninitialized]
    mv -f .deps/main.Tpo .deps/main.Po
    gcc -g -Wall -Wunused `pkg-config --cflags gtk+-2.0` -g -O2 `pkg-config --libs gtk+-2.0`  -o test bec.o main.o  
     
    Compilation finished at Tue Jun 19 16:00:38
    Sans parler des warning en console lors de l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (process:10258): GLib-GObject-CRITICAL **: g_object_set: assertion `G_IS_OBJECT (object)' failed
     
    (test:10258): Gtk-WARNING **: Can't set a parent on widget which has a parent
     
     
    (test:10258): Gtk-CRITICAL **: gtk_box_pack: assertion `child->parent == NULL' failed
    Fichiers attachés Fichiers attachés

  12. #32
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Supprime #include "interface.h" dans bec.c.

    Pendant que j'y suis. Je ne sais pas si tu es sous Linux mais au cas où tu trouveras en pièce jointe une archive de ton projet constuit avec les autotools. Je suis passé par là pour tester ton code .

    À la compilation j'obtiens aussi quelques warnings qu'il faudrait éliminer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    make -k 
    gcc -DHAVE_CONFIG_H -I. -I..    -g -Wall -Wunused `pkg-config --cflags gtk+-2.0` -g -O2 -MT bec.o -MD -MP -MF .deps/bec.Tpo -c -o bec.o bec.c
    bec.c: In function ‘coupobligatoire’:
    bec.c:589:10: warning: variable ‘c’ set but not used [-Wunused-but-set-variable]
    bec.c: In function ‘premier_joueur’:
    bec.c:620:12: warning: unused variable ‘jc’ [-Wunused-variable]
    bec.c: In function ‘testdeplacement2’:
    bec.c:350:1: warning: control reaches end of non-void function [-Wreturn-type]
    mv -f .deps/bec.Tpo .deps/bec.Po
    gcc -DHAVE_CONFIG_H -I. -I..    -g -Wall -Wunused `pkg-config --cflags gtk+-2.0` -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
    main.c: In function ‘main’:
    main.c:12:12: warning: unused variable ‘jeubouton’ [-Wunused-variable]
    main.c:10:6: warning: variable ‘partie’ set but not used [-Wunused-but-set-variable]
    main.c:118:46: warning: ‘pionblanc’ may be used uninitialized in this function [-Wuninitialized]
    main.c:119:46: warning: ‘dameblanc’ may be used uninitialized in this function [-Wuninitialized]
    main.c:120:46: warning: ‘pionnoir’ may be used uninitialized in this function [-Wuninitialized]
    main.c:121:46: warning: ‘damenoir’ may be used uninitialized in this function [-Wuninitialized]
    mv -f .deps/main.Tpo .deps/main.Po
    gcc -g -Wall -Wunused `pkg-config --cflags gtk+-2.0` -g -O2 `pkg-config --libs gtk+-2.0`  -o test bec.o main.o  
     
    Compilation finished at Tue Jun 19 16:00:38
    Sans parler des warning en console lors de l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (process:10258): GLib-GObject-CRITICAL **: g_object_set: assertion `G_IS_OBJECT (object)' failed
     
    (test:10258): Gtk-WARNING **: Can't set a parent on widget which has a parent
     
     
    (test:10258): Gtk-CRITICAL **: gtk_box_pack: assertion `child->parent == NULL' failed
    Je vois pas trop d'ou vient le problème sur la console... J'ai ajusté mon malloc et je l'ai repositionné dans mon fichier interface.c, cependant mon damier n'apparait plus :/
    Fichiers attachés Fichiers attachés

  13. #33
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    pourtant chez moi ca fonctionne.
    Images attachées Images attachées  

  14. #34
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    Ah bon le problème doit venir de mon codeblocks... merci en tt cas Une idée pour savoir comment supprimer les erreurs concernant le gtk dans la console?

    Ma fonction "psg" me dérange un peu. J'essaie de faire un condition "if" pour que lorsqu'il n'y a pas d'images, l'image "nulle" ne se mette pas sur le deuxieme click. En effet lorsque j'appuie sur une case vide puis sur une case avec un pion, le pion s'efface... j'ai donc pensé à faire une condition if(il y a eu image )...
    mais je ne vois pas comment la structurée...

    une idée?

    merci encore!!

  15. #35
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Tu ne devrais pas agir comme ca. Puisque tu utilises des boutons pour les cases il serait judicieux de rendre insensibles ceux que tu ne peux pas jouer. En d'autres termes tu devrais faire tes conditions en fonction du moteur de jeu et non de l'interface.

  16. #36
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    D'accord... Par contre ma fonction switch ne marche pas trop bien... comme lorsque je déplace un pion, il peut se déplacer sur tout le damier, or mon programme C me l'interdit. Comment remedier a sa ??

    merci

  17. #37
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    Dans le cas ou m fonction switch ne marche pas, je pourrai utiliser une fonction d'actualisation" avec que des if, de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
     
    void actualiser_damier(GtkWidget* jeubouton[9][9], damier* jeu)
    {
       int i;
       int j;
     
       for(i=0;i<9;i++)
     
            for(j=0;j<9;j++)
     
                if(jeu->plateau[i][j]==' ')
                    gtk_button_set_image( GTK_BUTTON(jeubouton[i][j]), "O");
                if(jeu->plateau[i][j]=='n')
                     gtk_button_set_image( GTK_BUTTON(jeubouton[i][j]), "n");
                if(jeu->plateau[i][j]=='b')
                     gtk_button_set_image( GTK_BUTTON(jeubouton[i][j]), "b");
     
        gtk_button_set_image( GTK_BUTTON(jeubouton[0][5]), "N");
        gtk_button_set_image( GTK_BUTTON(jeubouton[8][5]), "B");
     
    }
    qu'en pensez vous?

  18. #38
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Ton moteur de jeu doit disposer d'une fonction qui renvoie les coups jouables pour une position de damier donnée.
    Il te faut donc récupérer cette liste de coups pour t'assurer de la validité des cases sélectionnées. C'est pour cette raison que je t'ai proposé plus haut de désactiver les cases non jouables. Ca simplifie la gestion graphique derrière. Mais ce n'est qu'une idée parmi d'autres...

  19. #39
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    mais avec quelle fonction les désactiver?

  20. #40
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    La plupart des widgets héritent des GtkWidget. Il existe la fonction gtk_widget_set_sensitive(); qui te permet de rendre insensible/sensible le widget transmis.

Discussions similaires

  1. jeu de dame en c
    Par MALAKFATINE dans le forum Projets
    Réponses: 1
    Dernier message: 18/09/2006, 09h34
  2. créer jeu de dame en C
    Par SAMUELSalbert dans le forum C
    Réponses: 11
    Dernier message: 31/07/2006, 20h33
  3. Code source en c d'un jeu de dames
    Par ledawa dans le forum Développement 2D, 3D et Jeux
    Réponses: 33
    Dernier message: 22/05/2006, 08h54
  4. [Jeu de dames]Enregistrer les règles...
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/11/2005, 19h39
  5. probleme pour un jeu de dames en python
    Par doudou152 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/04/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo