int board_save_dialog (window_board_t *win, int save_as) { GtkWidget *dialog; if (!save_as && win->filename) { int ret = board_save(win, win->filename); if (! ret) { GtkWidget *error = gtk_message_dialog_new (GTK_WINDOW (win->window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error saving file '%s': %s"), win->filename, g_strerror (errno)); gtk_dialog_run (GTK_DIALOG (error)); gtk_widget_destroy (error); } return ret; } dialog = gtk_file_chooser_dialog_new (_("Save File"), GTK_WINDOW (win->window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); add_filters (GTK_FILE_CHOOSER (dialog)); if (!win->filename) gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), _("hand.lin")); else gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), win->filename); retry_save: if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); int ret = board_save (win, filename); if (ret) { if (win->filename) free (win->filename); win->filename = filename; show_board (CUR_BOARD, REDRAW_TITLE); recently_used_add (filename); } else { GtkWidget *error = gtk_message_dialog_new (GTK_WINDOW (win->window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error saving file '%s': %s"), filename, g_strerror (errno)); g_free (filename); gtk_dialog_run (GTK_DIALOG (error)); gtk_widget_destroy (error); goto retry_save; } } gtk_widget_destroy (dialog); return 1; }
int main (int argc, char * argv[]) { Coord_SDL clic; s_Menu menu; s_Interface interface; s_Board board; interface = Init(); board = load_Board(interface); menu = load_Menu(interface); SDL_Event event; Plateau board_tab; Coordonnees_tab coord_tab; Couleur joueur_courant = bleu, dernier_joueur = bleu; menu.actualMenu = menu.mainMenu; bool quit = false, premier_coup = true, IA = false; int choix; coord_tab.abscisse = 0; coord_tab.ordonnee = 0; while (!quit) //Boucle des évènements { SDL_WaitEvent(&event); if (IA) if (joueur_courant == rouge) { event.button.button = SDL_BUTTON_LEFT; event.type = SDL_MOUSEBUTTONDOWN; } switch (event.type) { case SDL_QUIT: quit = true; break; case SDL_MOUSEBUTTONDOWN: //On clique sur la souris if (event.button.button == SDL_BUTTON_LEFT) { clic.CoordX = event.motion.x; clic.CoordY = event.motion.y; choix = choix_Menu(clic, menu); /********************* Menus ***********************/ if (menu.actualMenu == menu.mainMenu) //Menu principal { if (choix == 1) { menu.actualMenu = menu.playMenu; MaJ_Menu(menu, interface, nbPlayMenuChoice); } if (choix == 2) { initialiser_plateau(board_tab); chargement(board_tab); MaJ_Board(board, interface, board_tab); menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbinGameMenuChoice); premier_coup = false; } if (choix == 3) { quit = true; } } else if (menu.actualMenu == menu.playMenu) //Menu de sélection de partie { if (choix == 0) { menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbinGameMenuChoice); nouvelle_partie(board_tab); MaJ_Board(board, interface, board_tab); joueur_courant = bleu; premier_coup = true; IA = false; MaJ_Infos(menu, interface, joueur_courant, premier_coup); } if (choix == 1) { menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbinGameMenuChoice); nouvelle_partie(board_tab); MaJ_Board(board, interface, board_tab); joueur_courant = bleu; premier_coup = true; IA = true; MaJ_Infos(menu, interface, joueur_courant, premier_coup); } if (choix == 2) { menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbinGameMenuChoice); nouvelle_partie(board_tab); MaJ_Board(board, interface, board_tab); joueur_courant = bleu; premier_coup = true; IA = true; MaJ_Infos(menu, interface, joueur_courant, premier_coup); } if (choix == 3) { if (premier_coup == true) menu.actualMenu = menu.mainMenu; else menu.actualMenu = menu.inGameMenu; MaJ_Menu(menu, interface, nbMenuChoice); } } else if (menu.actualMenu == menu.inGameMenu) //Menu en jeu { if (choix == 0) { menu.actualMenu = menu.playMenu; MaJ_Menu(menu, interface, nbPlayMenuChoice); } if (choix == 1) { board_save(board_tab); } if (choix == 2) { if (joueur_courant != dernier_joueur) { if (!premier_coup) { annuler(board_tab); MaJ_Board(board, interface, board_tab); MaJ_Infos(menu, interface, joueur_courant, premier_coup); joueur_courant = changer_joueur(joueur_courant); } } } if (choix == 3) { quit = true; } /********************* Tour de jeu *********************/ if (!IA) //Partie humain vs humain { if (clic_on_board(clic, board)) { coord_tab = pos_pion_tab(clic, board); if (coup_valide(board_tab, coord_tab)) { placer_pion(board, coord_tab, joueur_courant, interface, board_tab); if (joueur_courant == bleu) dernier_joueur = bleu; else dernier_joueur = rouge; historique(premier_coup, coord_tab, joueur_courant); premier_coup = false; MaJ_Infos(menu, interface, joueur_courant,premier_coup); if (verify_win(board_tab[coord_tab.abscisse][coord_tab.ordonnee], board_tab)) { affiche_vainqueur(menu, interface, joueur_courant); menu.actualMenu = menu.mainMenu; MaJ_Menu(menu, interface, nbMenuChoice); joueur_courant = neutre; } joueur_courant = changer_joueur(joueur_courant); } } } else if (IA) //Partie humain vs IA { if (joueur_courant == bleu) coord_tab = pos_pion_tab(clic, board); else { coord_tab = coup_IA1 (board_tab); SDL_Delay(500); } if (coup_valide(board_tab, coord_tab)) { placer_pion(board, coord_tab, joueur_courant, interface, board_tab); historique(premier_coup, coord_tab, joueur_courant); premier_coup = false; MaJ_Infos(menu, interface, joueur_courant,premier_coup); if (verify_win(board_tab[coord_tab.abscisse][coord_tab.ordonnee], board_tab)) { affiche_vainqueur(menu, interface, joueur_courant); menu.actualMenu = menu.mainMenu; MaJ_Menu(menu, interface, nbMenuChoice); joueur_courant = neutre; } joueur_courant = changer_joueur(joueur_courant); } } } } break; case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_ESCAPE: //On appuie sur la touche ECHAP quit = true; break; } break; } //Met à jour l'écran SDL_UpdateWindowSurface(interface.window); } return 0; }