int MSudoku::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QMainWindow::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: generer(); break; case 1: initialiser(); break; case 2: sauvegarder(); break; case 3: charger(); break; case 4: changerTheme(); break; case 5: apropos(); break; case 6: resoudre(); break; case 7: verification(); break; case 8: possibilites(); break; case 9: gagner(); break; } _id -= 10; } return _id; }
int main(int argc, char *argv[]) { SDL_Surface *ecran = NULL; //surface affichée à l'ecran SDL_Event event; //stock l'evenement Case plateau[TAILLE_PLATEAU][TAILLE_PLATEAU]; //le plateau Case precedent[TAILLE_PLATEAU][TAILLE_PLATEAU]; //le plateau precedent (pour annuler) Joueur joueur; //à qui le tour ? bool continuer = true; //booléen pour rester dans la boucle bool fin = false; //booléen declenchant la fin du programme bool appuiAbandon = false, appuiAnnuler = false;//les boutons bool peutAnnuler; //si on peut appuyer sur annuler bool selection; //une case est-elle selectionnée int cliqueeX = 0, cliqueeY = 0; //si oui : quelles sont ces coordonnées ? char cause[10]; //chaine pour la fin... // Démarrage de la SDL, et de la bibliotheque de police. SDL_Init(SDL_INIT_VIDEO); TTF_Init(); //Ouverture de la fenetre #ifdef FULLSCREEN ecran = SDL_SetVideoMode(ECRAN_X, ECRAN_Y, NB_COULEURS, SDL_HWSURFACE|SDL_FULLSCREEN); #else ecran = SDL_SetVideoMode(ECRAN_X, ECRAN_Y, NB_COULEURS, SDL_HWSURFACE); #endif // On change le titre SDL_WM_SetCaption(TITRE_FENETRE, NULL); do { //initialisation des variables selection = false; // aucune case ne doit etre cliquee (securite) joueur = blanc; // les blancs commencent toujours //On initialise le plateau reinitialiser(plateau); peutAnnuler = false; do { //Affichage afficher(plateau, joueur, ecran, selection, cliqueeX, cliqueeY, appuiAbandon, appuiAnnuler); //Entree SDL_WaitEvent(&event); //Gestion (selon le type de l'evenement) //appui sur la croix (fenetre) if(event.type == SDL_QUIT) fin = true; //on s'en va... //appui sur une touche else if(event.type == SDL_KEYDOWN) { //la touche etant Echap if(event.key.keysym.sym == SDLK_ESCAPE) fin = true; //on s'en va... } //bouton de la souris relaché else if(event.type == SDL_MOUSEBUTTONUP) { //c'etait un clic gauche if(event.button.button == SDL_BUTTON_LEFT) { //on avais cliqué sur annuler if(appuiAnnuler) { //si on peut annuler if(peutAnnuler) { //on ne le peut plus peutAnnuler = false; //le plateau actuel est le plateau d'avant egalPlateau(plateau, precedent); //on redonne la main au joueur precedent joueur = (joueur == noir) ? blanc : noir; //aucune case cliquee selection = false; } //bouton annuler : relaché appuiAnnuler = false; } //on avais cliqué sur abandon else if(appuiAbandon) { //c'est l'autre joueur qui gagne joueur = (joueur == blanc) ? noir : blanc; //bouton abandon : relaché appuiAbandon = false; //fin de la partie continuer = false; //la cause etant l'abandon sprintf(cause, "abandon"); } } } //appui sur un bouton de la souris else if(event.type == SDL_MOUSEBUTTONDOWN) { //clic gauche if(event.button.button == SDL_BUTTON_LEFT) { //on appuie sur le bouton annuler if(event.button.x > BOUTON_ANNULER_X && event.button.x < BOUTON_ANNULER_X+TAILLE_BOUTON_X && event.button.y > BOUTON_ANNULER_Y && event.button.y < BOUTON_ANNULER_Y+TAILLE_BOUTON_Y) appuiAnnuler = true; //on appuie sur le bouton abandon else if(event.button.x > BOUTON_ABANDON_X && event.button.x < BOUTON_ABANDON_X+TAILLE_BOUTON_X && event.button.y > BOUTON_ABANDON_Y && event.button.y < BOUTON_ABANDON_Y+TAILLE_BOUTON_Y) appuiAbandon = true; //on clique dans la zone de jeu else if(event.button.x > ZDJ_X && event.button.x < ZDJ_X+ZDJ && event.button.y > ZDJ_Y && event.button.y < ZDJ_Y+ZDJ) { //si on avais dejà selectionné quelque chose if(selection) { //si le deplacement est autorise if(possible(plateau, cliqueeX, cliqueeY, ((event.button.x-ZDJ_X)/TAILLE_CASES), ((event.button.y-ZDJ_Y)/TAILLE_CASES))) { //(se deplacer), et si quelque chose a été mangé if(manger(plateau, cliqueeX, cliqueeY, ((event.button.x-ZDJ_X)/TAILLE_CASES), ((event.button.y-ZDJ_Y)/TAILLE_CASES))) { //le pion est toujours selectionnable, mais à son nouvel //emplacement cliqueeX = ((event.button.x-ZDJ_X)/TAILLE_CASES); cliqueeY = ((event.button.y-ZDJ_Y)/TAILLE_CASES); //a t-on gagne par victoire totale ? //si oui, on sort de la partie continuer = !gagner(plateau, joueur); if(!continuer) sprintf(cause, "victoire totale"); //sinon, si on ne peut plus manger --> au joueur suivant ! else if(!peutManger(plateau, cliqueeX, cliqueeY)) { //on deselectionne le pion selection = false; //on change de joueur joueur = (joueur == blanc) ? noir : blanc; //on peut revenir en arriere peutAnnuler = true; //sommes-nous bloqué ? continuer = !bloque(plateau, joueur); if(!continuer) { sprintf(cause, "blocage"); //si oui, c'est l'autre joueur, //celui qui vient de jouer, qui gagne ! joueur = (joueur == blanc) ? noir : blanc; } } } //rien a été mangé : au joueur suivant ! else { //on deselectionne le pion selection = false; //on change de joueur joueur = (joueur == blanc) ? noir : blanc; //on peut revenir en arriere peutAnnuler = true; } } } //sinon, si on clique sur un pion else if(plateau[(event.button.x-ZDJ_X)/TAILLE_CASES][(event.button.y-ZDJ_Y)/TAILLE_CASES].pion != non) { //coordonnees du pion en question cliqueeY = (event.button.y-ZDJ_Y)/TAILLE_CASES; cliqueeX = (event.button.x-ZDJ_X)/TAILLE_CASES; //si on peut selectionner ce pion if(plateau[cliqueeX][cliqueeY].joueur == joueur && selectionnable(plateau, cliqueeX, cliqueeY)) { //le prochain plateau precedent est le plateau actuel egalPlateau(precedent, plateau); //le pion est selectionné selection = true; //on ne peut plus annuler (il faudra d'abord cliquer sur une case) peutAnnuler = false; } } } } } //Gestion terminée //repeter ceci tant que la partie nest pas terminée, et que l'on ne veut pas s'en aller }while (continuer && !fin); //securité... appuiAbandon = false; appuiAnnuler = false; //considerons ici abandon <-> quitter et annuler <-> recommencer //tant que l'on a pas choisi... while(!continuer && !fin) { //on affiche le message de fin affichageFin(plateau, ecran, appuiAnnuler, appuiAbandon, joueur, cause); //si il y a un evenement SDL_WaitEvent(&event); //de type : "boutton de sourie relaché" if(event.type == SDL_MOUSEBUTTONUP) { //si le bouton en question est le gauche if(event.button.button == SDL_BUTTON_LEFT) { //si on avais appuyé sur recommencer if(appuiAnnuler) { //on relache le bouton appuiAnnuler = false; //on recommence une partie continuer = true; } //sinon si on avais appuyé sur arreter else if(appuiAbandon) { //on relache le bouton appuiAbandon = false; //on s'en va fin = true; } } } //de type : "appui sur une bouton de la souris" else if(event.type == SDL_MOUSEBUTTONDOWN) { //clic gauche if(event.button.button == SDL_BUTTON_LEFT) { //sur le bouton "oui" (recommencer (annuler)) if(event.button.x > FIN_BOUTON_OUI_X && event.button.x < FIN_BOUTON_OUI_X+TAILLE_BOUTON_X && event.button.y > FIN_BOUTON_OUI_Y && event.button.y < FIN_BOUTON_OUI_Y+TAILLE_BOUTON_Y) appuiAnnuler = true; //sur le bouton "non" (arreter (abandon)) else if(event.button.x > FIN_BOUTON_NON_X && event.button.x < FIN_BOUTON_NON_X+TAILLE_BOUTON_X && event.button.y > FIN_BOUTON_NON_Y && event.button.y < FIN_BOUTON_NON_Y+TAILLE_BOUTON_Y) appuiAbandon = true; } } //de type : "appui sur la croix de la fenetre" else if(event.type == SDL_QUIT) fin = true; //de type : "appui sur une touche" else if(event.type == SDL_KEYDOWN) { //la touche Echap if(event.key.keysym.sym == SDLK_ESCAPE) fin = true; } } //tant que l'on ne veut pas s'en aller }while(!fin); //arret de la SDL et de la biblio des polices TTF_Quit(); SDL_Quit(); //tout s'est bien passé return EXIT_SUCCESS; }
int main(int argc, char** argv){ char* outPl[NB_PLAYER] = {NULL, NULL}; // Les sorties pour chaque joueur linkedlist_t listResp = NULL; int pipeW; int J1 = 0; int J2 = 1; int i; int jGagne = -1; int jPerdu; int plein = 0; int choix; char caract[NB_PLAYER]; caract[0] = 'X'; caract[1] = 'O'; char plateau[HAUTEUR][LARGEUR]; if(argc >= 1){ pipeW = atoi(argv[0]); } else{ perror("Erreur, arguments incorrects.\n"); exit(EXIT_FAILURE); } init_plateau(plateau); while(jGagne == -1 && !plein){ for(i=0; i < NB_PLAYER; i++){ systemc(&outPl[J1], "clear"); outc(&outPl[J1], "%s", "======= Morpion =======\n\n"); dessinerPlateau(&outPl[J1], plateau); outc(&outPl[J1], "%s", "Entrez un numero de case (1, 2, ...) : "); inc(&outPl[J1], "%d"); systemc(&outPl[J2], "clear"); outc(&outPl[J2], "%s", "======= Morpion =======\n\n"); dessinerPlateau(&outPl[J2], plateau); outc(&outPl[J2], "%s", "C'est a votre adversaire de jouer.\n"); flushc(pipeW, outPl, NB_PLAYER); choix = (int)getResp(&listResp, INT); if(jouer(plateau, choix, caract[J1])){ if(gagner(plateau, caract[J1])){ jGagne = J1; break; } if(estPlein(plateau)){ plein = 1; break; } } reversePlayer(&J1, &J2); } } systemc(&outPl[J1], "clear"); systemc(&outPl[J2], "clear"); if(!plein && jGagne != -1){ jPerdu = nextPlayer(jGagne); outc(&outPl[jGagne], "%s", "======= Morpion =======\n\n"); outc(&outPl[jGagne], "%s", "Vous avez gagne, felicitation !!\n"); outc(&outPl[jPerdu], "%s", "======= Morpion =======\n\n"); outc(&outPl[jPerdu], "%s", "Vous avez perdu, votre adversaire etait peut etre plus intelligent...\n"); } else{ outc(&outPl[J1], "%s", "======= Morpion =======\n\n"); outc(&outPl[J1], "%s", "Vous etes aussi fort (ou mauvais) que votre adversaire...\n"); outc(&outPl[J2], "%s", "======= Morpion =======\n\n"); outc(&outPl[J2], "%s", "Vous etes aussi fort (ou mauvais) que votre adversaire...\n"); } flushc(pipeW, outPl, NB_PLAYER); // On attend un peut avant de quitter waitc(&outPl[J1], 3); waitc(&outPl[J2], 3); quitc(&outPl[J1]); // Fermera le jeu pour le client quitc(&outPl[J2]); flushc(pipeW, outPl, NB_PLAYER); quit(pipeW); close(pipeW); close_out_players(outPl, NB_PLAYER); return EXIT_SUCCESS; }
void gagnerhardcore() { my_putstr("\033c"); gagner(); rejouerhardcore(); }