begin process at 2012 05 29 12:25:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Divers

 > 

minmax morpion probleme !


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

minmax morpion probleme !

samedi 29 mars 2008 à 14:14:07 | minmax morpion probleme !

TrD_

Bon voila ma source, je cherche a mettre en pratique l'algo minmax, mais je suis confronté a des erreurs que je ne comprend pas ! A l execution lors du tour de jeux de l IA l ordinateur joue tout d un coup au lieu d y aller coup par coup, pourqoui, je traine ce probleme depuis deja deux semaines, je craque ... merci d avance !!


#include <stdio.h>
#include <stdlib.h>
#define CROIX 'X'
#define ROND  'O'
#define VIDE  ' '
#define MATCH_NUL  'N'
#define NOBODY_WIN 'M'
#define MAX_X -100
#define MAX_O  100

int coupX = 0, coupY = 0;
int nbr_coups = 0;
int ctrl_prof = 0;

int init_grille(char tab[3][3])
{
  int i = 0, j = 0;

  for(i = 0 ; i < 3 ; i++)
    {
      for(j = 0 ; j < 3 ; j++)
    {
      tab[i][j] = VIDE;
    }
    }

  return 0;
}

int display_grille(char tab[3][3])
{
  int i = 0, j = 0;

  printf("  1  2  3\n");
  for(i = 0 ; i < 3 ; i++)
    {
      printf("%d ", i+1);
      for(j = 0 ; j < 3 ; j++)
    {
      printf("%c ", tab[i][j]);
    }
      printf("\n");
    }
  printf("\n");

  return 0;
}

char gagne_grille(char tab[3][3])
{
  int i = 0;

  //LIGNES && COLONES
  for(i = 0 ; i < 3 ; i++)
    {
      if(tab[i][0] == CROIX && tab[i][1] == CROIX && tab[i][2] == CROIX)
    return CROIX;
      else if(tab[0][i] == CROIX && tab[1][i] == CROIX && tab[2][i] == CROIX)
    return CROIX;
      else if(tab[i][0] == ROND && tab[i][1] == ROND && tab[i][2] == ROND)
    return ROND;
      else if(tab[0][i] == ROND && tab[1][i] == ROND && tab[2][i] == ROND)
    return ROND;
    }
  //DIAGONALES
  if(tab[0][0] == CROIX && tab[1][1] == CROIX && tab[2][2] == CROIX)
    return CROIX;
  else if(tab[0][2] == CROIX && tab[1][1] == CROIX && tab[2][0] == CROIX)
    return CROIX;
  else if(tab[0][0] == ROND && tab[1][1] == ROND && tab[2][2] == ROND)
    return ROND;
  else if(tab[0][2] == ROND && tab[1][1] == ROND && tab[2][0] == ROND)
    return ROND;

  if(nbr_coups == 9)
    return MATCH_NUL;

  else
    return NOBODY_WIN;
}

int minmax(char tab[3][3], char gamer)
{
  int i, j, max, score = 0;

  if(gamer == CROIX)
    {
      max = MAX_X;
    }
  else if(gamer == ROND)
    {
      max = MAX_O;
    }

  for(i = 0 ; i < 3 ; i++)
    {
      for(j = 0 ; j < 3 ; j++)
    {
      if(tab[i][j] == VIDE)
        {
          tab[i][j] = gamer;
          if((gagne_grille(tab)) == gamer)
        {
          return max;
        }
          else
        {
          if(gamer == ROND)
            {
              score = minmax(tab, CROIX);

              if(score == MAX_X)
            {
              return 0;
            }
              else if(score == MAX_O)
            {
              return max;
            }
            }
          else if(gamer == CROIX)
            {
              score = minmax(tab, ROND);

              if(score == MAX_X)
            {
              return 0;
            }
              else if(score == MAX_O)
            {
              return max;
            }
            }
        }
          tab[i][j] = VIDE;
        }
    }
    }

  return 0;
}

int ia(char tab[3][3])
{
  int i, j, score = 0;

  for(i = 0 ; i < 3 ; i++)
    {
      for(j = 0 ; j < 3 ; j++)
    {
      if(tab[i][j] == VIDE)
        {
          tab[i][j] = ROND;
          if((gagne_grille(tab)) == ROND)
        {
          coupY = i;
          coupX = j;
          return 0;
        }
          else
        {
          score = minmax(tab, ROND);
          if(score == MAX_O)
            {
              coupY = i;
              coupX = j;
              return 0;
            }
        }
          tab[i][j] = VIDE;
        }
    }
    }

  return 0;
}

int main(int argc, char* *argv)
{
  char control;
  char tour = CROIX;
  int col = 0, lig = 0;
  char tab[3][3];

  init_grille(tab);


  do
    {
      if(tour == CROIX)
    {
    A:
      system("clear");
      display_grille(tab);
      printf("ligne = ");
      scanf("%d", &lig);
      printf("colone = ");
      scanf("%d", &col);

      col--;
      lig--;

      if(tab[lig][col] == ' ')
        {
          tab[lig][col] = CROIX;
          tour = ROND;
          nbr_coups++;
        }
      else
        goto A;
    }
      else if(tour == ROND)
    {
      ia(tab);
      tab[coupY][coupX] = ROND;
      tour = CROIX;
      nbr_coups++;
    }
    }while((control = gagne_grille(tab)) == NOBODY_WIN);

  system("clear");
  display_grille(tab);

  if(control == MATCH_NUL)
    printf("Match nulle !!!\n");
  else if(control == ROND)
    printf("Vous avez perdu\n");
  else if(control == CROIX)
    printf("Vous avez gagné\n");


  return 0;
}
lundi 26 avril 2010 à 22:28:20 | Re : minmax morpion probleme !

redaiga




bsr mes amie ,je suis etudiant ds une ecole d'ingenieurie option informatique et je souhaite etre unbon programmeur mais j'arrive pas a resoudre quelque probleme graphisme par exemple realisation d'un chronomtre 5 [^^happy
lundi 26 avril 2010 à 22:30:28 | Re : minmax morpion probleme !

redaiga




bsr svp si qq'un peut m'aider j'ai un projet en c++ il s'agit de la realisation d'un jeux d'intelligence GOMOKU avec algorithme MinMax merci apparavant


Cette discussion est classée dans : tab, rond, return, croix, if


Répondre à ce message

Sujets en rapport avec ce message

cryptage de cesar sur c++ [ par juniordiaw ] bjr a tous g un problemea vec mon code o faite lorske g rentre un letre il me la crypte mai sil sagi dun mo ou dune phrase il ne crypte ke la premiere Problème compréhension du programme le compte est bon [ par echec ] Bonjour,Je cherchai un programme c++ sur internet qui permettait de calculer la solution du jeu le compte est bon, j'en est finalement trouvé un, mais port serie sous linux rts txd drt source piklab [ par zemil ] je sui sous linux depuis peux je program avec kdevelope en c++ par hazard j'ais trouvé un logiciel qui arive a faire se que je recherche jé ais donc r convertir du cpp en VB.net ou VB [ par Taur33 ] bonsoir à tous, j'aurais besoin de convertir le code suivant en vb je précise que j'ai déjà essayé des logiciels qui soit disant le faisait mais cela Simple Hook (DLL) qui plante GetMessage ! Je suis nul ou quoi ? [ par dam1dam1 ] Bonjour. Je ne suis pas un pro du Hook et j’ai un peu oublié tout ca, mais vu toutes les bonnes sources et annotations qui trônent ici, je pensais po pbm recursivite pr supression groupe lettre ds tableau ( LETTER BREAKER) LANGAGE C [ par nawakkkkk ] hello j ai besoin d'aide svp j'ai réalise un lettre breaker (o lieu des bulles c des lettres) et j'arrive pas a sélectionner le groupe de même lettre arbre de huffman en c [ par Mouzby ] Bonjour tout le monde, Je viens avec beaucoup d'espoir pour demander votre aide sur ce forum, c'est à propos de la conception du programme de l'arbre Projet C Jeu d'echec [ par Hugo Dam ] Bonsoir, Je code actuellement un jeu d'echec. Celui ci compile bien mais lors de l'execution il m'affiche erreur de segmentation des lors que je fais recherche un texte spécifié....!!!! [ par mejdimm ] Salut tout le monde.!!!!!!je vous propose ici un code source : "recherche un texte spécifié" dans tous les fichiers texte de votre disque dur, l'utili C++ recherche un texte spécifié....!!!! [ par mejdimm ] Salut tout le monde.!!!!!! je vous propose ici un code source : "recherche un texte spécifié" dans tous les fichiers texte de votre disque dur, l'util


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 0,484 sec (4)

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