begin process at 2012 02 13 03:39:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > MORPION SIMPLE...

MORPION SIMPLE...


 Information sur la source

Note :
8,75 / 10 - par 4 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Niveau :Débutant Date de création :15/06/2004 Date de mise à jour :20/06/2004 22:21:31 Vu / téléchargé :8 897 / 290

Auteur : jbahans

Ecrire un message privé
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

C'est un petit morpion simple qui marche bien (On peut même sauvegarder sa partie !!) Il est sans IA, mais possède des combinaisons bien à lui...

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <time.h>
  • #include <conio.c>
  • #define VERT 10 /* 10 pour du vert clair 2 pour du vert foncé*/
  • #define CYAN 11
  • #define ROUGE 12
  • #define VIOLET 13
  • #define JAUNE 14
  • #define BLANC 15
  • #define NB 12
  • typedef enum {VIDE, ROND, CROIX} ValeurGrille;
  • typedef enum {FAUX, VRAI} Test;
  • int morpion[3][3],*tab1;
  • /* Initialise la grille du morpion */
  • void initialiser()
  • {
  • int i,j;
  • for (i=0;i<3;i++)
  • {
  • for (j=0;j<3;j++)
  • morpion[i][j]=VIDE;
  • }
  • }
  • /* Affiche la grille du Morpion, ainsi que les touches utiles au jeu*/
  • void tableau()
  • {
  • clrscr();
  • gotoxy(1,1);
  • textcolor(CYAN);
  • printf("\xDA\xC4\xC4\xC4\xC4\xC4\xC2\xC4\xC4\xC4\xC4\xC4\xC2\xC4\xC4\xC4\xC4\xC4\xBF");
  • textcolor(BLANC);printf(" Score : \n");textcolor(CYAN);
  • printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
  • textcolor(BLANC);printf(" (Vous) / (Ordinateur)\n");textcolor(CYAN);
  • printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\n");
  • printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
  • textcolor(CYAN);printf(" 22 ");textcolor(BLANC);
  • printf("=");textcolor(CYAN);printf(" S");textcolor(BLANC);printf("auvegarder\n");textcolor(CYAN);
  • printf("\xC3\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xB4");
  • textcolor(CYAN);printf(" 55 ");textcolor(BLANC);
  • printf("=");textcolor(CYAN);printf(" R");textcolor(BLANC);printf("estaurer\n");textcolor(CYAN);
  • printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
  • textcolor(CYAN);printf(" 99 ");textcolor(BLANC);
  • printf("=");textcolor(CYAN);printf(" Q");textcolor(BLANC);printf("uitter\n");textcolor(CYAN);
  • printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
  • textcolor(VIOLET);
  • printf(" \xDA\xC4\xC2\xC4\xC2\xC4\xBF\n");
  • textcolor(CYAN);
  • printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
  • textcolor(VIOLET);
  • printf(" ");printf("\xB3");printf("7");printf("\xB3");printf("8");printf("\xB3");printf("9");printf("\xB3\n");
  • textcolor(CYAN);
  • printf("\xC3\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xB4");
  • textcolor(VIOLET);
  • printf(" ");printf("\xC3");printf("\xC4");printf("\xC5");printf("\xC4");printf("\xC5");printf("\xC4");printf("\xB4\n");
  • textcolor(CYAN);
  • printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
  • textcolor(VIOLET);
  • printf(" ");printf("\xB3");printf("4");printf("\xB3");printf("5");printf("\xB3");printf("6");printf("\xB3\n");
  • textcolor(CYAN);
  • printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
  • textcolor(VIOLET);
  • printf(" ");printf("\xC3");printf("\xC4");printf("\xC5");printf("\xC4");printf("\xC5");printf("\xC4");printf("\xB4\n");
  • textcolor(CYAN);
  • printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
  • textcolor(VIOLET);
  • printf(" ");printf("\xB3");printf("1");printf("\xB3");printf("2");printf("\xB3");printf("3");printf("\xB3\n");
  • textcolor(CYAN);
  • printf("\xC0\xC4\xC4\xC4\xC4\xC4\xC1\xC4\xC4\xC4\xC4\xC4\xC1\xC4\xC4\xC4\xC4\xC4\xD9");
  • textcolor(VIOLET);
  • printf(" \xC0\xC4\xC1\xC4\xC1\xC4\xD9\n");
  • textcolor(BLANC);
  • gotoxy(1,16);
  • }
  • /* Affiche les X et O sur la grille*/
  • void afficherXO()
  • {
  • int i,j;
  • for (i=0;i<3;i++)
  • {
  • for (j=0;j<3;j++)
  • {
  • gotoxy(6*j+4,4*i+3);
  • switch (morpion[i][j])
  • {
  • case ROND:
  • textcolor(JAUNE);
  • printf("O");textcolor(BLANC);
  • break;
  • case CROIX:
  • textcolor(ROUGE);
  • printf("X");textcolor(BLANC);
  • break;
  • }
  • }
  • }
  • gotoxy(1,16);
  • }
  • /* Convertit le chiffre tapé par le joueur (1 à 9) en donnant la ligne du tableau (0 à 2)*/
  • int transfoi(int *nb)
  • {
  • switch (*nb)
  • {
  • case 1:case 2:case 3:
  • return 2;
  • break;
  • case 4:case 5:case 6:
  • return 1;
  • break;
  • case 7:case 8:case 9:
  • return 0;
  • break;
  • }
  • return 0;
  • }
  • /* Convertit le chiffre tapé par le joueur (1 à 9) en donnant la ligne du tableau (0 à 2)*/
  • int transfoj(int *nb)
  • {
  • switch (*nb)
  • {
  • case 1:case 4:case 7:
  • return 0;
  • break;
  • case 2:case 5:case 8:
  • return 1;
  • break;
  • case 3:case 6:case 9:
  • return 2;
  • break;
  • }
  • return 0;
  • }
  • /* Sauve dans le tableau */
  • void save(int *p){
  • int i=2;
  • while (tab1[i]!=0 && i<NB) /* Le prog cherche la dernière case jouée */
  • {
  • i++;
  • }
  • if (i==11)
  • {
  • for (i=2;i<NB;i++)
  • {
  • tab1[i]=0;
  • } /* Blindage pour éviter que l'écriture de la sauvegarde */
  • i=2; /* se s'effectue en dehors du tableau ou sur le score */
  • }
  • tab1[i]=*p;
  • }
  • /* Sauve dans un fichier binaire */
  • void sauve(){
  • FILE *f,*g;
  • f=fopen("save.bin","wb");g=fopen("score.txt","w");/*Ouverture des fichiers binaire et texte*/
  • if (f==NULL || g==NULL)
  • {
  • perror("Erreur : ouverture de fichier.\n");fclose(f);exit(1);
  • }
  • else
  • {
  • textcolor(CYAN);
  • fwrite(tab1,NB*sizeof(int),1,f);/* Ecriture des coups dans le fichier binaire */
  • fprintf(g,"Jeu de Morpion - Moopi\n\n");fprintf(g," Scores : \n\n");
  • fprintf(g,"%d (Vous) / %d (Ordinateur)",tab1[0],tab1[1]);/* Ecriture du score dans...*/
  • fclose(f);fclose(g);/*Fermeture*/ /*...un fichiet texte */
  • if (tab1[2]==0 && tab1[0]==0 && tab1[1]==0)
  • { /*Si score vierge et aucun coup joué, la sauvegarde est formatée */
  • textcolor(CYAN);printf("Reinitialisation des sauvegardes.\n");sleep(1000);
  • }
  • else
  • { /*Si aucun coup joué mais score != 0, sauvegarde du score*/
  • if (tab1[2]==0 && (tab1[0]!=0 || tab1[1]!=0))
  • {
  • printf("Score sauvegarde.\n");sleep(1000);
  • }
  • else
  • {
  • printf("Partie sauvegardee.\n");sleep(1000);
  • }
  • }
  • textcolor(BLANC);
  • }
  • }
  • /* Affiche le Score */
  • void score()
  • {
  • gotoxy(26,2);textcolor(VERT);printf("%d",tab1[0]);
  • gotoxy(37,2);printf("%d",tab1[1]);textcolor(BLANC);gotoxy(1,16);
  • }
  • /* Restaure une partie */
  • void restaure(){
  • int i=2,j=2,k,*p=&k,*tab2;
  • FILE *f;
  • tab2=(int*)malloc(NB*sizeof(int));for (i=0;i<NB;i++) tab2[i]=0;
  • f=fopen("save.bin","rb");/*Ouverture*/
  • if (f==NULL)
  • {
  • textcolor(ROUGE);printf("Aucune sauvegarde en memoire...\n");fclose(f);sleep(1000);textcolor(BLANC);
  • }
  • else
  • {
  • fread(tab2,NB*sizeof(int),1,f);/*Lecture*/
  • fclose(f);initialiser();tableau();
  • textcolor(CYAN);printf("Partie en cours de restauration...\n");sleep(500);i=2;
  • while (tab2[i]!=0 && i<NB)
  • {
  • i++;
  • }
  • tab1[0]=tab2[0];tab1[1]=tab2[1];
  • if ((i%2)!=0 && i!=2)
  • {
  • do /*Restauration en regardant qui a joué en premier : ordi ou joueur*/
  • {
  • k=tab2[j];morpion[transfoi(p)][transfoj(p)]=CROIX;j++;afficherXO();printf("\n");sleep(500);
  • if (tab2[j]!=0)
  • {
  • k=tab2[j];morpion[transfoi(p)][transfoj(p)]=ROND;j++;afficherXO();printf("\n");sleep(500);
  • }
  • else break;
  • }
  • while(tab2[j]!=0);
  • }
  • if ((i%2)==0 && i!=2)
  • {
  • do
  • {
  • k=tab2[j];morpion[transfoi(p)][transfoj(p)]=ROND;j++;afficherXO();printf("\n");sleep(500);
  • k=tab2[j];morpion[transfoi(p)][transfoj(p)]=CROIX;j++;afficherXO();printf("\n");sleep(500);
  • }
  • while(tab2[j]!=0);
  • }
  • afficherXO();
  • score();
  • printf("\nA vous de jouer !\n");textcolor(BLANC);j=2;
  • while (tab2[j]!=0 && j<NB)
  • {
  • tab1[j]=tab2[j];
  • j++;
  • }
  • }
  • free(tab2);
  • }
  • /* Le joueur saisit une case*/
  • void saisir() {
  • int nb;
  • Test SaisieCorrecte=FAUX;
  • do
  • {nb=0; /*Boucle qui permet d'éviter les erreurs de frappe*/
  • printf("Entrez la case a cocher : ");
  • scanf("%d",&nb);
  • getchar();/*Evite une boucle infinie si le joueur tape une lettre au lieu d'un chiffre*/
  • if (nb==22)
  • sauve();
  • else
  • {
  • if (nb==99)
  • {printf("\nMerci d'avoir joue. Au revoir !\n");sleep(1000);free(tab1);exit(1);}
  • if (nb==55)
  • restaure();
  • else
  • {
  • if
  • (nb<1 || nb>9)
  • {
  • clrscr();tableau();afficherXO();score();textcolor(ROUGE);
  • printf("Nombre incorrect ! ");
  • textcolor(BLANC);
  • }
  • else
  • {
  • if (morpion[transfoi(&nb)][transfoj(&nb)]!=VIDE)
  • {
  • clrscr();tableau();afficherXO();score();textcolor(ROUGE);
  • printf("Cette case est deja prise ! ");
  • textcolor(BLANC);
  • }
  • else
  • {
  • SaisieCorrecte=VRAI;
  • morpion[transfoi(&nb)][transfoj(&nb)]=ROND;save(&nb);
  • }
  • }
  • }
  • }
  • }
  • while(SaisieCorrecte!=VRAI);
  • }
  • /* Fonction qui permet à l'ordinateur de voir si il peur gagner et si le joueur peut gagner */
  • int verifordi(int CHOIX) {
  • if(((morpion[1][0]==CHOIX && morpion[0][0]==CHOIX) ||
  • (morpion[2][1]==CHOIX && morpion[2][2]==CHOIX) ||
  • (morpion[1][1]==CHOIX && morpion[0][2]==CHOIX)) && (morpion[2][0]==VIDE))
  • return 1;
  • if(((morpion[2][0]==CHOIX && morpion[2][2]==CHOIX) ||
  • (morpion[1][1]==CHOIX && morpion[0][1]==CHOIX)) && (morpion[2][1]==VIDE))
  • return 2;
  • if(((morpion[2][0]==CHOIX && morpion[2][1]==CHOIX) ||
  • (morpion[1][1]==CHOIX && morpion[0][0]==CHOIX) ||
  • (morpion[1][2]==CHOIX && morpion[0][2]==CHOIX)) && (morpion[2][2]==VIDE))
  • return 3;
  • if(((morpion[2][0]==CHOIX && morpion[0][0]==CHOIX) ||
  • (morpion[1][1]==CHOIX && morpion[1][2]==CHOIX)) && (morpion[1][0]==VIDE))
  • return 4;
  • if(((morpion[2][0]==CHOIX && morpion[0][2]==CHOIX) ||
  • (morpion[2][1]==CHOIX && morpion[0][1]==CHOIX) ||
  • (morpion[2][2]==CHOIX && morpion[0][0]==CHOIX) ||
  • (morpion[1][0]==CHOIX && morpion[1][2]==CHOIX)) && (morpion[1][1]==VIDE))
  • return 5;
  • if(((morpion[1][0]==CHOIX && morpion[1][1]==CHOIX) ||
  • (morpion[2][2]==CHOIX && morpion[0][2]==CHOIX)) && (morpion[1][2]==VIDE))
  • return 6;
  • if(((morpion[2][0]==CHOIX && morpion[1][0]==CHOIX) ||
  • (morpion[1][1]==CHOIX && morpion[2][2]==CHOIX) ||
  • (morpion[0][1]==CHOIX && morpion[0][2]==CHOIX)) && (morpion[0][0]==VIDE))
  • return 7;
  • if(((morpion[2][1]==CHOIX && morpion[1][1]==CHOIX) ||
  • (morpion[0][0]==CHOIX && morpion[0][2]==CHOIX)) && (morpion[0][1]==VIDE))
  • return 8;
  • if(((morpion[2][0]==CHOIX && morpion[1][1]==CHOIX) ||
  • (morpion[2][2]==CHOIX && morpion[1][2]==CHOIX) ||
  • (morpion[0][0]==CHOIX && morpion[0][1]==CHOIX)) && (morpion[0][2]==VIDE))
  • return 9;
  • return 0;
  • }
  • /* L'ordinateur joue dans les coins */
  • int coin(){
  • int alea,*p=&alea,f=0;
  • if (morpion[0][0]==VIDE || morpion[0][2]==VIDE || morpion[2][0]==VIDE || morpion[2][2]==VIDE)
  • {
  • do
  • {
  • srand((unsigned) time(NULL));
  • alea=(2*((rand() % 5)+1))-1;
  • if ((alea)%2!=0 && morpion[transfoi(p)][transfoj(p)]==VIDE)
  • {
  • morpion[transfoi(p)][transfoj(p)]=CROIX;save(p);
  • f=1;
  • return 1;
  • }
  • }
  • while (f!=1);
  • }
  • else return 0;
  • return 0;
  • }
  • /* L'ordinateur joue dans les côtés haut,bas,gauche et droite */
  • void croix(){
  • int alea,*p=&alea,fin=0;
  • do
  • {
  • srand((unsigned) time(NULL));
  • alea=2*((rand() % 4)+1);
  • if (morpion[transfoi(p)][transfoj(p)]==VIDE)
  • {
  • morpion[transfoi(p)][transfoj(p)]=CROIX;save(p);
  • fin=1;
  • }
  • }
  • while(fin!=1);
  • }
  • /* L'ordinateur joue un coup */
  • void ordi() {
  • int alea=0,*p=&alea;
  • printf("L'ordinateur reflechit...\n");
  • if ((alea=verifordi(CROIX))!=0) /* L'ordinateur regarde si il peut gagner... */
  • {
  • morpion[transfoi(p)][transfoj(p)]=CROIX;save(p);
  • }
  • else
  • {
  • if ((alea=verifordi(ROND))!=0) /*...sinon il regarde si le joueur peut gagner... */
  • {
  • morpion[transfoi(p)][transfoj(p)]=CROIX;save(p);
  • }
  • else
  • {
  • if (morpion[1][1]==VIDE) /* ...Si aucun des joueurs ne peut gagner... */
  • {
  • alea=5;
  • morpion[1][1]=CROIX;save(p); /*...l'ordinateur joue le coup central... */
  • }
  • else
  • {
  • if ((morpion[0][0]==ROND && morpion[2][2]==ROND)
  • && ((morpion[1][0]==VIDE && morpion[2][1]==VIDE && morpion[2][0]==VIDE)
  • || (morpion[1][2]==VIDE && morpion[0][1]==VIDE && morpion[0][2]==VIDE)))
  • croix();
  • if ((morpion[2][0]==ROND && morpion[0][2]==ROND)
  • && ((morpion[1][0]==VIDE && morpion[0][0]==VIDE && morpion[0][1]==VIDE)
  • || (morpion[2][1]==VIDE && morpion[2][2]==VIDE && morpion[1][2]==VIDE)))
  • croix();
  • else
  • {
  • if (coin()==0) /* Si tous les coins sont pris, l'ordinateur...*/
  • croix(); /* joue un côté*/
  • }
  • }
  • }
  • }
  • }
  • /* Teste si il y a un gagnant et si jeu est complet */
  • Test Fin () {
  • int i,j,joueurGagnant=VIDE;
  • Test estFini=FAUX;
  • if (morpion[1][1]!=VIDE) /* Si la case 5 est VIDE, cela signifie que les diagonales...*/
  • { /*la ligne 1 et la colonne 1 ne sont pas gagnantes */
  • if (((morpion[0][1]==morpion[1][1]) && (morpion[1][1]==morpion[2][1])) ||/* Colonne 1 */
  • ((morpion[1][0]==morpion[1][1]) && (morpion[1][1]==morpion[1][2])) || /* Ligne 1 */
  • ((morpion[0][0]==morpion[1][1]) && (morpion[1][1]==morpion[2][2])) || /* Diagonale1*/
  • ((morpion[0][2]==morpion[1][1]) && (morpion[1][1]==morpion[2][0]))) /* Diagonale2*/
  • {
  • joueurGagnant=morpion[1][1]; /* ie ROND ou CROIX */
  • estFini = VRAI;
  • }
  • }
  • if ((!estFini) && (morpion[0][0]!=VIDE)) /* Si la case 7 est vide, cela signifie que...*/
  • { /*...la ligne 0 et le colonne 0 ne sont pas gagnantes */
  • if (((morpion[0][0]==morpion[0][1]) && (morpion[0][1]==morpion[0][2])) ||/* Ligne 0 */
  • ((morpion[0][0]==morpion[1][0]) && (morpion[1][0]==morpion[2][0]))) /* Colonne0 */
  • {
  • joueurGagnant=morpion[0][0];
  • estFini=VRAI;
  • }
  • }
  • if ((!estFini) && (morpion[2][2] != VIDE)) /* Si la case 3 est vide, cela signifie...*/
  • { /*...que la ligne 2 et la colonne 2 ne sont gagnantes */
  • if (((morpion[2][0]==morpion[2][1]) && (morpion[2][1]==morpion[2][2])) ||/* Ligne 2 */
  • ((morpion[0][2]==morpion[1][2]) && (morpion[1][2]==morpion[2][2]))) /* Colonne 2 */
  • {
  • joueurGagnant=morpion[2][2];
  • estFini = VRAI;
  • }
  • }
  • if (estFini)
  • {
  • if (joueurGagnant==ROND)
  • {
  • printf("Le joueur ayant les ");
  • textcolor(JAUNE);
  • printf("O ");tab1[0]=tab1[0]+1;
  • }
  • else
  • {
  • printf("L'ordinateur ayant les ");
  • textcolor(ROUGE);
  • printf("X ");tab1[1]=tab1[1]+1;
  • }
  • textcolor(BLANC);
  • printf("a gagne.\n");
  • score();
  • return VRAI;
  • }
  • for (i=0;i<3;i++)
  • {
  • for (j=0;j<3;j++)
  • {
  • if (morpion[i][j]==VIDE)/* Si toutes les cases ne sont pas remplies, le jeu continue... */
  • return FAUX;
  • }
  • }
  • printf("Match nul... \n");
  • return VRAI;
  • }
  • /* Fonction qui demande au joueur si il souhaite rejouer */
  • Test rejouer(){
  • Test demande=FAUX;
  • int newgame;
  • do
  • {newgame=0;
  • printf("\nVoulez-vous rejouer ? (");
  • textcolor(CYAN);printf("O");textcolor(BLANC);printf("ui=");textcolor(CYAN);printf("1");textcolor(BLANC);printf("/");
  • textcolor(CYAN);printf("N");textcolor(BLANC);printf("on=");textcolor(CYAN);printf("2");textcolor(BLANC);printf(") : ");
  • scanf("%d",&newgame);
  • getchar();tableau();score();afficherXO();
  • if (newgame!=2 && newgame!=1)
  • {
  • textcolor(ROUGE);
  • printf("Saisie incorrecte !");
  • textcolor(BLANC);
  • }
  • else
  • {
  • demande=VRAI;
  • return newgame;
  • }
  • }
  • while (demande!=VRAI);
  • return 0;
  • }
  • /* Programme du morpion */
  • void jeu(int c){
  • int i;
  • tab1=(int*)malloc(NB*sizeof(int));for (i=0;i<NB;i++) tab1[i]=0;
  • do /*Allocation dynamique de mémoire des tableaux de sauvegardes et restauration*/
  • {
  • c++; /*Permet d'alterner le joueur qui commence...*/
  • initialiser();
  • tableau();score();/* Initialise la grille */
  • for (i=2;i<NB;i++) {tab1[i]=0;}
  • if (c%2!=0)
  • {
  • do
  • {
  • saisir();
  • tableau();afficherXO();score();
  • if (!Fin()) /* Boucle qui s'arrête si un des joueur est gagnant, cette boucle...*/
  • { /* ...contient une condition qui empêche l'ordi de jouer si le joueur a gagné.*/
  • ordi();
  • afficherXO();score();
  • }
  • else break;
  • }
  • while (!Fin());
  • }
  • else
  • {
  • do
  • {
  • ordi();
  • afficherXO();score(); /* Boucle qui s'arrête si un des joueur est gagnant, cette boucle...*/
  • if (!Fin()) /* ...contient une condition qui empêche le joueur de jouer si l'ordi a gagné.*/
  • {
  • saisir();
  • tableau();afficherXO();score();
  • }
  • else break;
  • }
  • while (!Fin());
  • }
  • }
  • while (rejouer()==1);
  • printf("\nMerci d'avoir joue. Au revoir !\n"); /* Boucle principale qui s'exécute tant que...*/
  • /*... le joueur veuille jouer */
  • free (tab1);
  • }
  • /* Main */
  • int main(int argc, char *argv[]){
  • int begin;
  • textcolor(BLANC);
  • do{
  • clrscr();
  • printf("\nBienvenu dans le Jeu de Morpion.\n\n");
  • gotoxy(1,3);
  • printf("Qui joue en premier ? (");
  • textcolor(CYAN);printf("V");textcolor(BLANC);printf("ous=");textcolor(CYAN);printf("1");textcolor(BLANC);printf("/");
  • textcolor(CYAN);printf("O");textcolor(BLANC);printf("rdi=");textcolor(CYAN);printf("0");textcolor(BLANC);printf(") => ");
  • scanf("%d",&begin);
  • }while (begin<0 || begin >1);
  • jeu(!begin);
  • system("pause");
  • return 0;
  • }
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.c>

#define  VERT       10  /* 10 pour du vert clair 2 pour du vert foncé*/
#define  CYAN       11
#define  ROUGE      12
#define  VIOLET     13
#define  JAUNE      14
#define  BLANC      15
#define  NB         12

typedef enum  {VIDE, ROND, CROIX} ValeurGrille;
typedef enum  {FAUX, VRAI} Test;
int morpion[3][3],*tab1;


/* Initialise la grille du morpion */
void initialiser()
{
int i,j;
    for (i=0;i<3;i++)
        {
         for (j=0;j<3;j++)
             morpion[i][j]=VIDE;
        }
}


/* Affiche la grille du Morpion, ainsi que les touches utiles au jeu*/
void tableau()
{
 clrscr();
 gotoxy(1,1);
 textcolor(CYAN);
    printf("\xDA\xC4\xC4\xC4\xC4\xC4\xC2\xC4\xC4\xC4\xC4\xC4\xC2\xC4\xC4\xC4\xC4\xC4\xBF");
    textcolor(BLANC);printf("               Score : \n");textcolor(CYAN);
    printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
    textcolor(BLANC);printf("        (Vous) /   (Ordinateur)\n");textcolor(CYAN);
    printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\n");
    printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
    textcolor(CYAN);printf("      22 ");textcolor(BLANC);
 printf("=");textcolor(CYAN);printf(" S");textcolor(BLANC);printf("auvegarder\n");textcolor(CYAN);
    printf("\xC3\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xB4");
 textcolor(CYAN);printf("      55 ");textcolor(BLANC);
 printf("=");textcolor(CYAN);printf(" R");textcolor(BLANC);printf("estaurer\n");textcolor(CYAN);
    printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
   textcolor(CYAN);printf("      99 ");textcolor(BLANC);
 printf("=");textcolor(CYAN);printf(" Q");textcolor(BLANC);printf("uitter\n");textcolor(CYAN);
    printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
    textcolor(VIOLET);
    printf("  \xDA\xC4\xC2\xC4\xC2\xC4\xBF\n");
    textcolor(CYAN);
    printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
    textcolor(VIOLET);
    printf("  ");printf("\xB3");printf("7");printf("\xB3");printf("8");printf("\xB3");printf("9");printf("\xB3\n");
    textcolor(CYAN);
    printf("\xC3\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xB4");
    textcolor(VIOLET);
    printf("  ");printf("\xC3");printf("\xC4");printf("\xC5");printf("\xC4");printf("\xC5");printf("\xC4");printf("\xB4\n");
    textcolor(CYAN);
    printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
    textcolor(VIOLET);
    printf("  ");printf("\xB3");printf("4");printf("\xB3");printf("5");printf("\xB3");printf("6");printf("\xB3\n");
    textcolor(CYAN);
    printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
    textcolor(VIOLET);
    printf("  ");printf("\xC3");printf("\xC4");printf("\xC5");printf("\xC4");printf("\xC5");printf("\xC4");printf("\xB4\n");
    textcolor(CYAN);
    printf("\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3\x20\x20\x20\x20\x20\xB3");
    textcolor(VIOLET);
    printf("  ");printf("\xB3");printf("1");printf("\xB3");printf("2");printf("\xB3");printf("3");printf("\xB3\n");
    textcolor(CYAN);
    printf("\xC0\xC4\xC4\xC4\xC4\xC4\xC1\xC4\xC4\xC4\xC4\xC4\xC1\xC4\xC4\xC4\xC4\xC4\xD9");
    textcolor(VIOLET);
    printf("  \xC0\xC4\xC1\xC4\xC1\xC4\xD9\n");
    textcolor(BLANC);
 gotoxy(1,16);
}


/* Affiche les X et O sur la grille*/
void afficherXO()
{
 int i,j;
 for (i=0;i<3;i++)
     {
      for (j=0;j<3;j++)
          {
           gotoxy(6*j+4,4*i+3);
           switch (morpion[i][j])
                  {
                   case ROND:
                   textcolor(JAUNE);
                   printf("O");textcolor(BLANC);
                   break;
                   case CROIX:
                   textcolor(ROUGE);
                   printf("X");textcolor(BLANC);
                   break;
                  }
         }
     }
 gotoxy(1,16);
}


/* Convertit le chiffre tapé par le joueur (1 à 9) en donnant la ligne du tableau (0 à 2)*/
int transfoi(int *nb)
{
 switch (*nb)
        {
         case 1:case 2:case 3:
         return 2;
         break;
         case 4:case 5:case 6:
         return 1;
         break;
         case 7:case 8:case 9:
         return 0;
         break;
        }
return 0;
}


/* Convertit le chiffre tapé par le joueur (1 à 9) en donnant la ligne du tableau (0 à 2)*/
int transfoj(int *nb)
{
 switch (*nb)
        {
         case 1:case 4:case 7:
         return 0;
         break;
         case 2:case 5:case 8:
         return 1;
         break;
         case 3:case 6:case 9:
         return 2;
         break;
        }
return 0;
}


/* Sauve dans le tableau */
void save(int *p){
int i=2;
while (tab1[i]!=0 && i<NB)    /* Le prog cherche la dernière case jouée */
      {
       i++;
      }
if (i==11)
   {
    for (i=2;i<NB;i++)
        {
         tab1[i]=0;
        }              /* Blindage pour éviter que l'écriture de la sauvegarde */
    i=2;               /* se s'effectue en dehors du tableau ou sur le score */
   }
tab1[i]=*p;
}


/* Sauve dans un fichier binaire */
void sauve(){
FILE *f,*g;
f=fopen("save.bin","wb");g=fopen("score.txt","w");/*Ouverture des fichiers binaire et texte*/
if (f==NULL || g==NULL)
   {
    perror("Erreur : ouverture de fichier.\n");fclose(f);exit(1);
   }
else
    {
     textcolor(CYAN);
     fwrite(tab1,NB*sizeof(int),1,f);/* Ecriture des coups dans le fichier binaire */
     fprintf(g,"Jeu de Morpion - Moopi\n\n");fprintf(g,"         Scores : \n\n");
     fprintf(g,"%d (Vous) / %d (Ordinateur)",tab1[0],tab1[1]);/* Ecriture du score dans...*/
     fclose(f);fclose(g);/*Fermeture*/                          /*...un fichiet texte */
     if (tab1[2]==0 && tab1[0]==0 && tab1[1]==0)
        {             /*Si score vierge et aucun coup joué, la sauvegarde est formatée */
         textcolor(CYAN);printf("Reinitialisation des sauvegardes.\n");sleep(1000);
        }
     else
         {      /*Si aucun coup joué mais score != 0, sauvegarde du score*/
          if (tab1[2]==0 && (tab1[0]!=0 || tab1[1]!=0))
              {
               printf("Score sauvegarde.\n");sleep(1000);
              }
          else
              {
               printf("Partie sauvegardee.\n");sleep(1000);
              }
        }
     textcolor(BLANC);
    }
}


/* Affiche le Score */
void score()
{
 gotoxy(26,2);textcolor(VERT);printf("%d",tab1[0]);
 gotoxy(37,2);printf("%d",tab1[1]);textcolor(BLANC);gotoxy(1,16);
}


/* Restaure une partie */
void restaure(){
int i=2,j=2,k,*p=&k,*tab2;
FILE *f;
tab2=(int*)malloc(NB*sizeof(int));for (i=0;i<NB;i++) tab2[i]=0;
f=fopen("save.bin","rb");/*Ouverture*/
if (f==NULL)
   {
    textcolor(ROUGE);printf("Aucune sauvegarde en memoire...\n");fclose(f);sleep(1000);textcolor(BLANC);
   }
else
    {
     fread(tab2,NB*sizeof(int),1,f);/*Lecture*/
     fclose(f);initialiser();tableau();
     textcolor(CYAN);printf("Partie en cours de restauration...\n");sleep(500);i=2;
     while (tab2[i]!=0 && i<NB)
           {
            i++;
           }
    tab1[0]=tab2[0];tab1[1]=tab2[1];
    if ((i%2)!=0 && i!=2)
       {
        do       /*Restauration en regardant qui a joué en premier : ordi ou joueur*/
          {
           k=tab2[j];morpion[transfoi(p)][transfoj(p)]=CROIX;j++;afficherXO();printf("\n");sleep(500);
           if (tab2[j]!=0)
              {
               k=tab2[j];morpion[transfoi(p)][transfoj(p)]=ROND;j++;afficherXO();printf("\n");sleep(500);
              }
           else break;
          }
           while(tab2[j]!=0);
         }
    if ((i%2)==0 && i!=2)
       {
        do
          {
           k=tab2[j];morpion[transfoi(p)][transfoj(p)]=ROND;j++;afficherXO();printf("\n");sleep(500);
           k=tab2[j];morpion[transfoi(p)][transfoj(p)]=CROIX;j++;afficherXO();printf("\n");sleep(500);
          }
           while(tab2[j]!=0);
          }
afficherXO();
score();
printf("\nA vous de jouer !\n");textcolor(BLANC);j=2;
while (tab2[j]!=0 && j<NB)
      {
       tab1[j]=tab2[j];
       j++;
      }
   }
free(tab2);
}


/* Le joueur saisit une case*/
void saisir() {
     int nb;
     Test SaisieCorrecte=FAUX;
     do
       {nb=0;                      /*Boucle qui permet d'éviter les erreurs de frappe*/
        printf("Entrez la case a cocher : ");
        scanf("%d",&nb);
        getchar();/*Evite une boucle infinie si le joueur tape une lettre au lieu d'un chiffre*/
     	if (nb==22)
           sauve();
        else
            {
             if (nb==99)
                {printf("\nMerci d'avoir joue. Au revoir !\n");sleep(1000);free(tab1);exit(1);}
             if (nb==55)
                restaure();
             else
                 {
                  if
                    (nb<1 || nb>9)
                    {
                     clrscr();tableau();afficherXO();score();textcolor(ROUGE);
                     printf("Nombre incorrect ! ");
                     textcolor(BLANC);
                    }
                  else
                      {
                       if (morpion[transfoi(&nb)][transfoj(&nb)]!=VIDE)
                          {
                           clrscr();tableau();afficherXO();score();textcolor(ROUGE);
                           printf("Cette case est deja prise ! ");
                           textcolor(BLANC);
                          }
                       else
                           {
                            SaisieCorrecte=VRAI;
                            morpion[transfoi(&nb)][transfoj(&nb)]=ROND;save(&nb);
                           }
                      }
                  }
           }
       }
       while(SaisieCorrecte!=VRAI);
}


/* Fonction qui permet à l'ordinateur de voir si il peur gagner et si le joueur peut gagner */
int verifordi(int CHOIX) {
if(((morpion[1][0]==CHOIX && morpion[0][0]==CHOIX) ||
    (morpion[2][1]==CHOIX && morpion[2][2]==CHOIX) ||
    (morpion[1][1]==CHOIX && morpion[0][2]==CHOIX))  && (morpion[2][0]==VIDE))
    return 1;

if(((morpion[2][0]==CHOIX && morpion[2][2]==CHOIX) ||
       (morpion[1][1]==CHOIX && morpion[0][1]==CHOIX)) && (morpion[2][1]==VIDE))
       return 2;

if(((morpion[2][0]==CHOIX && morpion[2][1]==CHOIX) ||
       (morpion[1][1]==CHOIX && morpion[0][0]==CHOIX) ||
       (morpion[1][2]==CHOIX && morpion[0][2]==CHOIX)) && (morpion[2][2]==VIDE))
       return 3;

if(((morpion[2][0]==CHOIX && morpion[0][0]==CHOIX) ||
       (morpion[1][1]==CHOIX && morpion[1][2]==CHOIX)) && (morpion[1][0]==VIDE))
       return 4;

if(((morpion[2][0]==CHOIX && morpion[0][2]==CHOIX) ||
       (morpion[2][1]==CHOIX && morpion[0][1]==CHOIX) ||
       (morpion[2][2]==CHOIX && morpion[0][0]==CHOIX) ||
       (morpion[1][0]==CHOIX && morpion[1][2]==CHOIX)) && (morpion[1][1]==VIDE))
       return 5;

if(((morpion[1][0]==CHOIX && morpion[1][1]==CHOIX) ||
        (morpion[2][2]==CHOIX && morpion[0][2]==CHOIX)) && (morpion[1][2]==VIDE))
        return 6;

if(((morpion[2][0]==CHOIX && morpion[1][0]==CHOIX) ||
        (morpion[1][1]==CHOIX && morpion[2][2]==CHOIX) ||
        (morpion[0][1]==CHOIX && morpion[0][2]==CHOIX)) && (morpion[0][0]==VIDE))
        return 7;

if(((morpion[2][1]==CHOIX && morpion[1][1]==CHOIX) ||
       (morpion[0][0]==CHOIX && morpion[0][2]==CHOIX)) && (morpion[0][1]==VIDE))
       return 8;

if(((morpion[2][0]==CHOIX && morpion[1][1]==CHOIX) ||
        (morpion[2][2]==CHOIX && morpion[1][2]==CHOIX) ||
        (morpion[0][0]==CHOIX && morpion[0][1]==CHOIX)) && (morpion[0][2]==VIDE))
        return 9;

return 0;
}


/* L'ordinateur joue dans les coins */
int coin(){
int alea,*p=&alea,f=0;
if (morpion[0][0]==VIDE || morpion[0][2]==VIDE || morpion[2][0]==VIDE || morpion[2][2]==VIDE)
   {
    do
      {
       srand((unsigned) time(NULL));
       alea=(2*((rand() % 5)+1))-1;
       if ((alea)%2!=0 && morpion[transfoi(p)][transfoj(p)]==VIDE)
          {
           morpion[transfoi(p)][transfoj(p)]=CROIX;save(p);
           f=1;
           return 1;
          }
  }
  while (f!=1);
  }
else return 0;
return 0;
}


/* L'ordinateur joue dans les côtés haut,bas,gauche et droite */
void croix(){
int alea,*p=&alea,fin=0;
do
  {
   srand((unsigned) time(NULL));
   alea=2*((rand() % 4)+1);
   if (morpion[transfoi(p)][transfoj(p)]==VIDE)
      {
       morpion[transfoi(p)][transfoj(p)]=CROIX;save(p);
       fin=1;
      }
  }
  while(fin!=1);
}


/* L'ordinateur joue un coup */
void ordi() {
int alea=0,*p=&alea;
printf("L'ordinateur reflechit...\n");
if ((alea=verifordi(CROIX))!=0)   /* L'ordinateur regarde si il peut gagner... */
   {
    morpion[transfoi(p)][transfoj(p)]=CROIX;save(p);
   }
else
    {
     if ((alea=verifordi(ROND))!=0)  /*...sinon il regarde si le joueur peut gagner... */
        {
         morpion[transfoi(p)][transfoj(p)]=CROIX;save(p);
        }
     else
         {
          if (morpion[1][1]==VIDE)    /* ...Si aucun des joueurs ne peut gagner...   */
             {
              alea=5;
              morpion[1][1]=CROIX;save(p);        /*...l'ordinateur joue le coup central... */
             }
          else
              {
               if  ((morpion[0][0]==ROND && morpion[2][2]==ROND)
                   && ((morpion[1][0]==VIDE && morpion[2][1]==VIDE && morpion[2][0]==VIDE)
                   ||  (morpion[1][2]==VIDE && morpion[0][1]==VIDE && morpion[0][2]==VIDE)))
                   croix();
               if  ((morpion[2][0]==ROND && morpion[0][2]==ROND)
                   && ((morpion[1][0]==VIDE && morpion[0][0]==VIDE && morpion[0][1]==VIDE)
                   ||  (morpion[2][1]==VIDE && morpion[2][2]==VIDE && morpion[1][2]==VIDE)))
                   croix();
               else
                   {
                    if (coin()==0)     /* Si tous les coins sont pris, l'ordinateur...*/
                       croix();        /* joue un côté*/
                   }
              }
         }
   }
}


/* Teste si il y a un gagnant et si jeu est complet */
Test Fin () {
       int i,j,joueurGagnant=VIDE;
       Test estFini=FAUX;
       if (morpion[1][1]!=VIDE)        /* Si la case 5 est VIDE, cela signifie que les diagonales...*/
          {                            /*la ligne 1 et la colonne 1 ne sont pas gagnantes */
           if (((morpion[0][1]==morpion[1][1]) && (morpion[1][1]==morpion[2][1])) ||/* Colonne 1 */ 
	          ((morpion[1][0]==morpion[1][1]) && (morpion[1][1]==morpion[1][2])) ||  /* Ligne 1   */
	          ((morpion[0][0]==morpion[1][1]) && (morpion[1][1]==morpion[2][2])) || /* Diagonale1*/
	          ((morpion[0][2]==morpion[1][1]) && (morpion[1][1]==morpion[2][0]))) /* Diagonale2*/
              {
               joueurGagnant=morpion[1][1]; /* ie ROND ou CROIX */
               estFini = VRAI;
              }
          }

       if ((!estFini) && (morpion[0][0]!=VIDE))      /* Si la case 7 est vide, cela signifie que...*/
          {                                          /*...la ligne 0 et le colonne 0 ne sont pas gagnantes */
           if (((morpion[0][0]==morpion[0][1]) && (morpion[0][1]==morpion[0][2])) ||/* Ligne 0  */
	          ((morpion[0][0]==morpion[1][0]) && (morpion[1][0]==morpion[2][0]))) /* Colonne0 */
               {
                joueurGagnant=morpion[0][0];
                estFini=VRAI;
               }
          }

       if ((!estFini) && (morpion[2][2] != VIDE))   /* Si la case 3 est vide, cela signifie...*/
          {                                        /*...que la ligne 2 et la colonne 2 ne sont gagnantes */
          if (((morpion[2][0]==morpion[2][1]) && (morpion[2][1]==morpion[2][2])) ||/* Ligne 2   */
	         ((morpion[0][2]==morpion[1][2]) && (morpion[1][2]==morpion[2][2]))) /* Colonne 2 */
             {
              joueurGagnant=morpion[2][2];
              estFini = VRAI;
             }
          }

if (estFini)
     {
      if (joueurGagnant==ROND)
        {
         printf("Le joueur ayant les ");
         textcolor(JAUNE);
         printf("O ");tab1[0]=tab1[0]+1;
        }
      else
          {
           printf("L'ordinateur ayant les ");
           textcolor(ROUGE);
           printf("X ");tab1[1]=tab1[1]+1;
           }
     textcolor(BLANC);
     printf("a gagne.\n");
     score();
     return VRAI;
    }

     for (i=0;i<3;i++)
         {
         for (j=0;j<3;j++)
             {
             if (morpion[i][j]==VIDE)/* Si toutes les cases ne sont pas remplies, le jeu continue... */
	         return FAUX;
             }
         }
    printf("Match nul...             \n");
    return VRAI;
}


/* Fonction qui demande au joueur si il souhaite rejouer */
Test rejouer(){
Test demande=FAUX;
int newgame;
do
  {newgame=0;
  printf("\nVoulez-vous rejouer ? (");
  textcolor(CYAN);printf("O");textcolor(BLANC);printf("ui=");textcolor(CYAN);printf("1");textcolor(BLANC);printf("/");
  textcolor(CYAN);printf("N");textcolor(BLANC);printf("on=");textcolor(CYAN);printf("2");textcolor(BLANC);printf(") : ");
  scanf("%d",&newgame);
  getchar();tableau();score();afficherXO();
  if (newgame!=2 && newgame!=1)
     {
     textcolor(ROUGE);
     printf("Saisie incorrecte !");
     textcolor(BLANC);
     }
  else
      {
       demande=VRAI;
       return newgame;
      }
  }
   while (demande!=VRAI);
return 0;
}


/* Programme du morpion */
void jeu(int c){
int i;
tab1=(int*)malloc(NB*sizeof(int));for (i=0;i<NB;i++) tab1[i]=0;
do   /*Allocation dynamique de mémoire des tableaux de sauvegardes et restauration*/
  {
   c++; /*Permet d'alterner le joueur qui commence...*/
   initialiser();
   tableau();score();/* Initialise la grille */
   for (i=2;i<NB;i++) {tab1[i]=0;}
   if (c%2!=0)
      {
       do
         {
          saisir();
          tableau();afficherXO();score();
          if (!Fin())                  /* Boucle qui s'arrête si un des joueur est gagnant, cette boucle...*/
             {                        /* ...contient une condition qui empêche l'ordi de jouer si le joueur a gagné.*/
              ordi();
              afficherXO();score();
             }
          else break;
         }
          while (!Fin());
       }
   else
       {
        do
          {
           ordi();
           afficherXO();score();        /* Boucle qui s'arrête si un des joueur est gagnant, cette boucle...*/
           if (!Fin())          /* ...contient une condition qui empêche le joueur de jouer si l'ordi a gagné.*/
              {
               saisir();
               tableau();afficherXO();score();
              }
           else break;
          }
           while (!Fin());
      }
}
while (rejouer()==1);
printf("\nMerci d'avoir joue. Au revoir !\n"); /* Boucle principale qui s'exécute tant que...*/
                                    /*... le joueur veuille jouer */
free (tab1);
}


/* Main */
int main(int argc, char *argv[]){
int begin;
textcolor(BLANC);
do{
clrscr();
printf("\nBienvenu dans le Jeu de Morpion.\n\n");
gotoxy(1,3);
printf("Qui joue en premier ? (");
textcolor(CYAN);printf("V");textcolor(BLANC);printf("ous=");textcolor(CYAN);printf("1");textcolor(BLANC);printf("/");
  textcolor(CYAN);printf("O");textcolor(BLANC);printf("rdi=");textcolor(CYAN);printf("0");textcolor(BLANC);printf(") => ");
scanf("%d",&begin);
}while (begin<0 || begin >1);
jeu(!begin);
system("pause");
return 0;
}

 Conclusion

Il sera mis à jour dans 2 semaines à peut près. Le tableau a été pompé sur un autre jeu... ainsi que bcp d'autres choses...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture MORPION IA ( MINMAX / MINIMAX )
Source avec Zip AWALÉ (=AWÉLÉ) AVEC IA - ALPHA-BÉTA

 Sources de la même categorie

Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip Source avec une capture PENDU EN SDL par Damsou91
Source avec Zip STATE MACHINE MODIFICATION MATH BUCKHAM par billybones79
Source avec Zip AUTRE GRILLE DE SUDOKU par Eneur
Source avec Zip Source avec une capture SOKOBAN EN C POUR DÉBUTANT (VERSION AMÉLIORÉE BASÉE SUR LE T... par eustatika

Commentaires et avis

Commentaire de asmanur le 15/06/2004 08:51:03

C'set pas mal comme source l'IA est assez réusii mais je sais pas sous quoi tu compiles mais Sleep s'écrit avec une majuscule enfin bref ya plein de petites erreurs chiantes à corriger

Commentaire de Funto66 le 15/06/2004 10:57:03

C'est parce qu'il compile sous Linux ou un autre UNIX, d'où le #include &lt;unistd.h&gt; et là, y'a une fonction sleep(), pas Sleep() comme avec l'API Win32.

Commentaire de jbahans le 15/06/2004 11:20:29

En fait je compile sous devC++ et y a pas de problèmes, mais je vais essayer de régler tout ça vite fait...

Commentaire de Funto66 le 15/06/2004 13:26:01

Y'a unistd.h sous Dev-C++ ??
Je savais pas mais c'est logique vu que le compilo de Dev-C++ est MinGW et qu'il est dérivé de Cygwin qui sert de UNIX sous Windows.
Ceci dit, évite qd même d'utiliser unistd.h parce que des compilos comme Visual C++ accepteront pas (et ils auront pas forcément tort lol).

Commentaire de Kirua le 16/06/2004 10:39:44

j'ai jamais su compiler un prog avec unistd sous dev moi, pê que c'est dans la dernière version alors, parce qu'il y a un bon moment j'avias déjà testé, sans succès...

Commentaire de jbahans le 16/06/2004 15:17:23

Vais essayer d'arranger tout ça ...

Commentaire de Jbs106 le 18/06/2004 15:34:31

Oé et grouille toi!!! ;-p

Commentaire de jbahans le 18/06/2004 17:00:10

En attendant que je le remette, pour ceux qui sont impatients d'avoir ce super jeu (n'est ce pas Jbs106..?), il peuvent juste enlever la ligne avec unistd.h, parce qu'elle ne sert à rien ....hé hé hé...

Commentaire de jbahans le 20/06/2004 22:34:36

En fait, plutôt que de mette à jour, j'ai mis une nouvelle version de morpion (toujours appelé moopi). Comme j'ai mis une IA, un menu et disséqué le tout en plusieurs fichiers, j'ai préféré mettre une nouvelles source...

Commentaire de wxccxw le 24/09/2004 12:52:35

BRAVO  SOURCE GENIAL  !!!! sauf petite faute : <conio.h> et non pas <conio.c>

Commentaire de wxccxw le 25/09/2004 17:40:23

et osi je crois bien quil est imposible de gagner     ;-)

Commentaire de jbahans le 25/09/2004 18:11:37

En fait si, mais il est vrai que c'est un peu dur. Si tu veux une version améliorée, cherche une de mes (peu-nombreuses) sources. Tu verras, il existe un morpion avancé avec plusieurs niveaux de difficultés,+ sauvegardes + menu... Bref que du bonheur...

Commentaire de jbahans le 25/09/2004 18:11:44

En fait si, mais il est vrai que c'est un peu dur. Si tu veux une version améliorée, cherche une de mes (peu-nombreuses) sources. Tu verras, il existe un morpion avancé avec plusieurs niveaux de difficultés,+ sauvegardes + menu... Bref que du bonheur...

Commentaire de Kiba le 05/11/2004 17:55:01

Tres bonne source, cependant j'ai décelé un ptit bug.

-> J'entame une nouvelle partie, je commence:

Je joue en 1er lieu dans un coin (exemple case 7), le cpu lui joue au milieu, ensuite lorsque je joue dans le coin opposé, le cpu joue 2 fois de suite (tjr vrai sauf pour le couplet 9 puis 1)  

Commentaire de jbahans le 06/11/2004 12:08:07

Je m'en vais arranger tout cela ...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,466 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales