Bug dans mon Jeu Puissance 4

ched64 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -  
ched64 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis actuellement en train de réaliser un projet de fin d'étude qui consiste en la réalisation d'un jeu (langage C) utilisant une intelligence artificielle. ==> Mon jeu le PUISSANCE 4.

Je débute dans ce domaine et n'en suis pas encore à ce niveau la...Je viens de créer mon interface à l'aide de GTK et je suis en train de faire le début du code.
Mon interface est simple : un bouton JOUER, un REGLES DU JEU et un QUITTER puis la grille de jeu 6X7 avec en dessous de chaque colonne, un bouton permettant de jouer dans cette dernière.

Mon problème est le suivant: quand je clique sur "Jouer", je peux commencer ma partie sans problème, mais lorsque une colonne est remplie jusqu'en haut (6 jetons), si l'on clique de nouveau sur le bouton de la colonne, le jeton tout en haut va changer de la couleur (si il est rouge, et que c'est au joueur jaune de jouer, il deviendra jaune..).

Je n'arrive pas a résoudre ce problème, si quelqu'un a une solution merci d'avance :)
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

L'erreur se trouve à la ligne 10 de la 3ème fonction. ;-).
Blague à part, si tu postais ton code entre des balises "code" (bouton <> à droite du bouton "S" soulignés), on pourrait voir ce qui ne va pas dans le code.
0
ched64 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
oui en effet :) voici mon code :

main.c

#include <stdlib.h>
#include <gtk/gtk.h>
#include "callbacks.h"



/*================================================
 * Prototytpes des fonctions utilitaires
 *===============================================*/

void redessiner_grille () ;
gboolean idle_function (gpointer user_data) ;
void start_animtation () ;
void stop_animtation () ;



/*================================================
 * Fonction principale
 *===============================================*/

int main (int argc, char *argv[]) {
  GtkBuilder *builder ;
  GtkWindow  *mainwindow ;
  GtkTable   *table ;
  char txt[20] ;
  int i, j ;

  G_idle_timeout = 0 ;
  G_couleur = 1;

  gtk_init (&argc, &argv);

  /* Creer tous les widgets grace au builder GTK */

  builder = gtk_builder_new ();
  gtk_builder_add_from_file (builder, "gtk_table_Puissance4.glade", NULL);
  gtk_builder_connect_signals (builder, NULL);

  /*------------*/

  /*-- Recuperer les widgets construits par le builder GTK */
  mainwindow = GTK_WINDOW (gtk_builder_get_object (builder, "mainwindow"));
  table = GTK_TABLE (gtk_builder_get_object (builder, "table1"));

  /*-- Initialiser les widgets */

  /* Charger les images */
  G_pion_jaune = gdk_pixbuf_new_from_file ("images/pion jaune.png", NULL) ;
  G_pion_rouge = gdk_pixbuf_new_from_file ("images/pion rouge.png", NULL) ;
  G_pion_blanc = gdk_pixbuf_new_from_file ("images/pion blanc.png", NULL) ;

  /* Redimensioner la grille d'agencement */
  gtk_table_resize (table, NB_COLONNES, NB_LIGNES) ;

  /* Initialisation du tableau comme un "tapis vide" */
  for (i=0 ; i<NB_LIGNES ; i++) {
    for (j=0 ; j<NB_COLONNES ; j++) {

		G_position_pion[i][j] = 0;

      /* Creer un nouveau GtkImage */
      G_images[i][j] = (GtkImage *)gtk_image_new_from_pixbuf (G_pion_blanc) ;

      /* Lui associer une etiquette avec ses coordonnees */
      sprintf (txt, "( %d ; %d )", j, i) ;			/*Affichage des coordonnées de la matrice*/
      gtk_widget_set_tooltip_text (GTK_WIDGET(G_images[i][j]), txt) ;

      /* Le placer dans la grille d'agencement prevue a cet effet */
      gtk_table_attach_defaults (table, (GtkWidget *)G_images[i][j], j, j+1, i, i+1) ;
    }
  }


  /*------------*/

  gtk_widget_show_all (GTK_WIDGET(mainwindow));		/* ATTENTION */

  /* Lancer la boucle GTK */
  gtk_main ();

  /* La boucle GTK est terminee, detruire maintenant tous les widgets */
  g_object_unref (G_OBJECT (builder));

  /* Fin normale du programme */
  return 0;
}

/*================================================
 * Fonctions utilitaires
 *===============================================*/

void redessiner_grille () {
  int i, j ;

  for (i=0 ; i<NB_LIGNES ; i++) {
    for (j=0 ; j<NB_COLONNES ; j++) {

      /* Effacer l'image */
      gtk_image_clear(GTK_IMAGE(G_images[i][j])) ;

      if (G_position_pion[i][j] == 1 )
	gtk_image_set_from_pixbuf (GTK_IMAGE(G_images[i][j]), G_pion_jaune) ; /* Afficher pion jaune dans l'image (i,j) */
      else if (G_position_pion[i][j] == 2 )
	gtk_image_set_from_pixbuf (GTK_IMAGE(G_images[i][j]), G_pion_rouge) ; /* Afficher pion rouge dans l'image (i,j) */
      else
	gtk_image_set_from_pixbuf (GTK_IMAGE(G_images[i][j]), G_pion_blanc) ; /* Afficher pion blanc dans l'image (i,j) */
    }
  }
}



gboolean idle_function (gpointer user_data) {
  redessiner_grille () ;
  return TRUE ;						/* should return FALSE if the source should be removed, fonction qui sert à réactualiser la matrice */
}

void start_animtation () {		
  if (G_idle_timeout == 0) {
											
    G_idle_timeout = g_timeout_add (20, (GSourceFunc)idle_function, NULL) ;		/* Demander que la fonction idle_function() soit appelée toutes les 20 ms */
  }
}

void stop_animtation () {
  if (G_idle_timeout > 0) {
    /* Demander de ne plus appeller la fonction idle_function() toutes les 20 ms */
    g_source_remove(G_idle_timeout) ;
    G_idle_timeout = 0 ;
  }
}








callback.c

#include <gtk/gtk.h>
#include "callbacks.h"

/*================================================
 * Prototypes de fonction declarees dans main.c
 *===============================================*/

void stop_animtation () ;
void start_animtation () ;

/*================================================
 * Fonctions callbacks
 *===============================================*/

G_MODULE_EXPORT void on_mainwindow_destroy (GtkObject *object, gpointer user_data) {
  /* Arreter la boucle d'animation */
  stop_animtation () ;

  /* Stopper la boucle GTK */
  gtk_main_quit () ;
}

G_MODULE_EXPORT void on_button_start_clicked (GtkObject *object, gpointer user_data) {
  start_animtation () ;
}



G_MODULE_EXPORT void on_button1_clicked (GtkObject *object, gpointer user_data) {
	static int i = NB_LIGNES-1;	
  G_position_pion[i][0] = G_couleur;

  if ( i > 0 )
  {
	i--;

	if (G_couleur == 1)
	  G_couleur = 2;
	else
	 G_couleur = 1;

  }

}


G_MODULE_EXPORT void on_button2_clicked (GtkObject *object, gpointer user_data) {
	static int i = NB_LIGNES-1;	
  G_position_pion[i][1] = G_couleur;

  if ( i > 0 )
  {
	i--;

	if (G_couleur == 1)
	  G_couleur = 2;
	else
	 G_couleur = 1;

  }

}

G_MODULE_EXPORT void on_button3_clicked (GtkObject *object, gpointer user_data) {
	static int i = NB_LIGNES-1;	
  G_position_pion[i][2] = G_couleur;

  if ( i > 0 )
  {
	i--;

	if (G_couleur == 1)
	  G_couleur = 2;
	else
	 G_couleur = 1;

  }

}

G_MODULE_EXPORT void on_button4_clicked (GtkObject *object, gpointer user_data) {
	static int i = NB_LIGNES-1;	
  G_position_pion[i][3] = G_couleur;

  if ( i > 0 )
  {
	i--;

	if (G_couleur == 1)
	  G_couleur = 2;
	else
	 G_couleur = 1;

  }

}

G_MODULE_EXPORT void on_button5_clicked (GtkObject *object, gpointer user_data) {
	static int i = NB_LIGNES-1;	
  G_position_pion[i][4] = G_couleur;

  if ( i > 0 )
  {
	i--;

	if (G_couleur == 1)
	  G_couleur = 2;
	else
	 G_couleur = 1;

  }

}

G_MODULE_EXPORT void on_button6_clicked (GtkObject *object, gpointer user_data) {
	static int i = NB_LIGNES-1;	
  G_position_pion[i][5] = G_couleur;

  if ( i > 0 )
  {
	i--;

	if (G_couleur == 1)
	  G_couleur = 2;
	else
	 G_couleur = 1;

  }

}

G_MODULE_EXPORT void on_button7_clicked (GtkObject *object, gpointer user_data) {
	static int i = NB_LIGNES-1;	
  G_position_pion[i][6] = G_couleur;

  if ( i > 0 )
  {
	i--;

	if (G_couleur == 1)
	  G_couleur = 2;
	else
	 G_couleur = 1;

  }

}







Callback.h

#ifndef __CALLBACKS_H
#define __CALLBACKS_H
/*================================================
 * Definition de la taille de la Grille
 *===============================================*/

#define NB_COLONNES 7
#define NB_LIGNES 6	

/*================================================
 * Definition des Variables globales
 *===============================================*/

GtkImage  *G_images[NB_LIGNES][NB_COLONNES] ; /*stocker les images affichées à l'écran*/
GdkPixbuf *G_pion_blanc ;
GdkPixbuf *G_pion_jaune ;
GdkPixbuf *G_pion_rouge ;
int G_position_pion[NB_LIGNES][NB_COLONNES];
int G_couleur;
int G_idle_timeout ; /* ID de l'evenement timeout */

G_MODULE_EXPORT void on_button1_clicked (GtkObject *object, gpointer user_data);
G_MODULE_EXPORT void on_mainwindow_destroy (GtkObject *object, gpointer user_data) ;
G_MODULE_EXPORT void on_button_start_clicked (GtkObject *object, gpointer user_data) ;
G_MODULE_EXPORT void on_button_stop_clicked (GtkObject *object, gpointer user_data) ;

#endif /* __CALLBACKS_H */
0