Puissance4 en langage c

Soyez le premier à donner votre avis sur cette source.

Vue 23 204 fois - Téléchargée 1 361 fois

Description

voila vous connaissez sûrement le but du jeu. histoire d'en rajouter vous devez alignez quatre pions sur un des 4 axes de la grille.
Alors je vous dis amuser vous bien....

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>

  char grille[6][7];/*ce tableau represente une delimitation du nombre de case de la grille*/
  int remplissage[7];/* ce tableau définit le nombre de jeton qu'il y a  dans la colonne..maximum 6.*/

int dansGrille(int x,int y)
  /*la fonction prend 2 entiers x et y et renvoie vrai s'il existe une case de coordonnées(x,y)dans grille.*/
  {
      if ((x>=0)&&(x<=5)&&(y>=0)&&(y<=6))/* x appartient aux six cases d'une colone 0~5
                            y appartient aux septs case d'une ligne 0~6*/
       return 1;
      else return 0;
  }
 /* fonction qui renvoie vrai s'il est possible
  de poser un jeton dans la colonne x, j'utilise un tableau sur cette fonction*/
int jouable(int x)
  {

    if (x>=0 && (x<7) &&remplissage[x]>=0 && remplissage[x]<6)
    return 1;
    else return 0;

  }
  /*.............fonction saisir coup*/
int saisircoup()
  {
    int z;           // z colonne//

        do{

          printf("\t      rentrez une colonne entre <0-6>:\n\t essaies une autre si celle-ci est remplie!\n");
          scanf("%d",&z);
          if (jouable(z)==1)
          return z;

          }
        while(jouable(z)!=1);

  }
  /*..............*/
  void afficherGrille()
  {
    int i,j;
    printf("\t\t********MOUSSY && MICK********\n");
    printf("\t\t*********Puissance4*******\n\n\n\n");

    for(i=0;i<6;i++){
    printf("\t\t\t");
    printf("+-+-+-+-+-+-+-+");

    printf("\n");
    printf("\t\t\t");
    for (j=0;j<7;j++)

    printf("|%c",grille[5-i][j]);

    printf("|%d \n",i);// affiche les numéros horizontalement

                    }
    if (i==6)
    printf("\t\t\t");
    printf("+-+-+-+-+-+-+-+");
    printf("\n");
    printf("\t\t\t");
    for(j=0;j<=6;j++)
                     {
    printf(" %d",j);// affiche les numéro verticalement
                     }
    printf("\n\n\t\t");
}

int estRemplieOuNon()

{
     int x,comp=0;
     for(x=0;x<=6;x++)
     {
     if(jouable(x))
      {
           comp=comp+1;
      }
     }
     if (comp==0)   //nbre de colonne+1

      return 1;

     else return 0;

}

int adjacent(int c, int l,int dirV, int dirH)
{
    int n=0;

     if(dirV==0)
        {
        if(dirH==1)
           {
           while((grille[l][c])==(grille[l][c+1])&&(grille[l][c]!=' '))
              {
              n++;
              c++;
              }
           }
         else if(dirH==-1)
           {
           while((grille[l][c])==(grille[l][c-1])&&(grille[l][c]!=' '))
              {
              n++;
              c--;
              }
           }
        }
     if(dirV==1)
        {
        if(dirH==0)
           {
           while((grille[l][c])==(grille[l+1][c])&&(grille[l][c]!=' '))
              {
              n++;
              l++;
              }
           }
        else if(dirH==1)
           {
           while((grille[l][c])==(grille[l+1][c+1])&&(grille[l][c]!=' '))
              {
              n++;
              c++;
              l++;
              }
           }
           else if(dirH==-1)
              {
              while((grille[l][c])==(grille[l+1][c-1])&&(grille[l][c]!=' '))
                 {
                 n++;
                 c--;
                 l++;
                 }
              }
        }
     if(dirV==-1)
        {
        if(dirH==0)
           {
           while((grille[l][c])==(grille[l-1][c])&&(grille[l][c]!=' '))
              {
              n++;
              l--;
              }
           }
        else if(dirH==-1)
              {
              while((grille[l][c])==(grille[l-1][c-1])&&(grille[l][c]!=' '))
                 {
                 n++;
                 c--;
                 l--;
                 }
              }
              else if(dirH==1)
              {
              while((grille[l][c])==(grille[l-1][c+1])&&(grille[l][c]!=' '))
                 {
                 n++;
                 c++;
                 l--;
                 }
              }
        }
     return(n);

}

int partieEstGagneeOuPas(int c,int l)
{

  if  ((adjacent(c,l,0,1)+adjacent(c,l,0,-1))>=3 ||
  (adjacent(c,l,1,0)+adjacent(c,l,-1,0))>=3 ||
  (adjacent(c,l,1,1)+adjacent(c,l,-1,-1))>=3 ||
  (adjacent(c,l,1,-1) + adjacent(c,l,-1,1)>=3))
  return 1;
  else return 0;

}

/*6*/
main ()
{

     int i,j,joueur=0,colonne,ligne;
     int y=0,compt1=0;
     const N=50;
     char nom1[N],nom2[N],recom;
     printf("nom du premier joueur!!\n");
     scanf("%s",&nom1[N]);
     printf("nom du deuxiem jouer\n");
     scanf("%s",&nom2[N]);
     afficherGrille();
 do
 {
     for (i=0;i<6;i++)
     {
        for (j=0;j<7;j++)
        {
             grille[i][j]=' ';
        }
     }

     for(j=0;j<7;j++)
        {
     remplissage[j]=0;/* on initialise remplissage à zéro, car 0 est sa premiere valeur*/
        }
    do
    {
     if (joueur%2==0)// evident
     {
     printf("%s, posez votre pion\n",&nom1[N]);// on rentre son nom
     colonne=saisircoup();
     ligne=remplissage[colonne];//remplissage définit les lignes de la colonne
     grille[ligne][colonne]='O';
     remplissage[colonne]=remplissage[colonne]+1;
     compt1++;
     system("cls");
     afficherGrille();
     if( partieEstGagneeOuPas(colonne,ligne)==1)// si la partie est gagnée
      {
      printf("%s gagne au %deme coup\n",&nom1[N],compt1/2+1);
      }
     }

     if(joueur%2!=0)
     {
     printf("%s, posez votre pion\n",&nom2[N]);
     colonne=saisircoup();
     ligne=remplissage[colonne];
     grille[ligne][colonne]='X';
     remplissage[colonne]=remplissage[colonne]+1;
     compt1++;
     system("cls");// efface
     afficherGrille();
     if( partieEstGagneeOuPas(colonne,ligne)==1)
      {
      printf("%s gagne au %deme coup\n",&nom2[N],compt1/2);
      }

     }

     joueur=joueur+1;//on incremente le joueur

    } while(( !estRemplieOuNon() && !partieEstGagneeOuPas(colonne,ligne) ) );// répéter tant que c'est pas rempli

        printf("le score de %s est %d\n",&nom1[N],score1);
        printf("le score de %s est %d\n",&nom2[N],score2);

      do
        { fflush(stdin);
         printf("\t\tVoulez-vous recommencer ? (o/n) : ");
         scanf("%c",&recom);
        }while(recom!='o' && recom!='n');

        printf("\n");
 }while (recom=='o');

}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
danCHESS> Tout a fait d'accord avec toi, mais mon humeur est changeante

irmo> Avec le menu Mon Compte>Mes sources>Ajouter une source
irmo
Messages postés
2
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007

Si ça vous interesse j'ai fait un puissance 4 sur console avec IA avec plusieurs niveau de difficulté.
Expliquez moi comment poser ma source sur le site et je le ferais.
danCHESS
Messages postés
11
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
13 décembre 2006
1
salut.

Eh bé on peut dire que vous êtes sympas avec les débutants ! vecchio ---> t'es un peu dur , et visiblement tu "touches" en programmation (39 sources postées) , pourquoi tu ne lui explique pas les choses gentiment ? (t'as jamais été débutant ?) tu posterais pas aussi sur france.echecs par hasard ?(le ton là bas est le même que dans tes posts ...) ?
Enfin t'as essayé l'humour au dernier post mais visiblement c'est pas ton truc non plus , continue à programmer...
Troigee , pour savoir ce que c'est que l'IA , rien ne vaut un bon google ! après c'est limpide
a plus !
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
à ne pas confondre avec la connerie naturelle
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
intelligence artificielle... pour que l'ordinateur puisse jouer contre un humain (ou un autre ordinateur)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.