#include #include #include #include "bec.h" #include "interface.h" //Début programme int main(int argc, char *argv[]) { //Création Widget abel 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); abel *plateaux = malloc_abel(); plateaux->pionblanc= gtk_image_new_from_file ("croixblanc.png");//image pion blanc plateaux->pionnoir= gtk_image_new_from_file ("croixnoir.png");// image pion noir plateaux->dameblanc= gtk_image_new_from_file ("croixnoir.png");// image pion noir plateaux->damenoir= 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++) { plateaux->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), plateaux->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(plateaux->jeubouton[i][j]),"clicked",G_CALLBACK(psg),plateaux); } } for(i=0 ;i<=8 ;i++) { for(j=0 ;j<=8 ;j++) { switch ((int)(plateaux->plateau_modele)[i][j]) { case O : gtk_button_set_image (GTK_BUTTON(plateaux->jeubouton[i][j]), NULL); break; case b : gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[i][j]), pionblanc); break; case B : gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[i][j]), dameblanc); break; case n : gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[i][j]), pionnoir);break; case N : gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[i][j]), damenoir); break; default : 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(plateaux->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(plateaux->jeubouton[i][j]), pionnoir); } } dameblanc = gtk_image_new_from_file("/Users/Christophe/Downloads/dameblanche.jpg"); gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[4][0]),dameblanc); // Dame2 damenoir = gtk_image_new_from_file("/Users/Christophe/Downloads/damenoir.jpg"); gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[4][8]), damenoir); //couleurs GdkColor casecentrale; gdk_color_parse("#FF007F", &casecentrale); gtk_widget_modify_bg(GTK_WIDGET(plateaux->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(plateaux->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 psg (GtkWidget *widget,abel * plateaux) { int i; int j; /* game->click=1; */ if (plateaux->click==1) { for(j=0;j<9;j++) { for(i=0;i<9;i++) { if (plateaux->jeubouton[i][j]==widget) { (plateaux->cases).case1[0]=i; (plateaux->cases).case1[1]=j; (plateaux->pion)=gtk_button_get_image(GTK_BUTTON(plateaux->jeubouton[(plateaux->cases).case1[0]][(plateaux->cases).case1[1]])); plateaux->click=2; } } } } else { for(j=0;j<9;j++) { for(i=0;i<9;i++) { if (plateaux->jeubouton[i][j]==widget) { (plateaux->cases).case2[0]=i; (plateaux->cases).case2[1]=j; gtk_button_set_image (GTK_BUTTON (plateaux->jeubouton[(plateaux->cases).case2[0]][(plateaux->cases).case2[1]]), plateaux->pion); plateaux->click=1; } } } }}