begin process at 2012 02 10 06:29:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > UN MORPION QUI A LA CLASSE

UN MORPION QUI A LA CLASSE


 Information sur la source

Note :
Aucune note
Catégorie :Jeux Classé sous :morpion Niveau :Débutant Date de création :18/05/2005 Date de mise à jour :31/01/2007 01:09:56 Vu / téléchargé :4 437 / 235

Auteur : Mcjo

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

 Description

C'est un simple morpion dans lequel je tente de mettre en pratique le début de mes cours en C++.
Etant débutant, il est fort à parier que mon analyse objet n'est pas forcément correcte, mais ce n'est pas le but.
Donc on retrouve ici plusieur notions tels que les classes, les pointeurs etc... mais ceci à petit niveau ;)
Le code se compose de plusieurs fichiers

Source

  • /* fichier : player.h */
  • class Player {
  • private:
  • int id_player; //id du joueur
  • char nom[20];
  • int score; // score du joueur
  • void SetNomPlayer();
  • int coordonnees[2]; //coordonnées de x et y
  • int val_pion;
  • protected:
  • static int id_auto_player;
  • // void PlayerScorePP();
  • public:
  • Player(int pion=-1) {val_pion = pion; Init(++id_auto_player);};
  • void Init(int num_player);
  • char * GetNomPlayer(void){return nom;};
  • int GetPionPlayer(void){return val_pion;};
  • int GetScorePlayer(void){return score;};
  • void SetPionPlayer(int pion){val_pion = pion;};
  • void PlayerScorePP(void) {++score;};
  • void PlayerInitScore(void) {score = 0;};
  • int * PlayerPlay(char min_pos,char max_pos);
  • };
  • /* fichier : player.cpp */
  • #include <cstdlib>
  • #include <iostream>
  • #include "player.h"
  • using namespace std;
  • int Player::id_auto_player = 0;
  • void Player::Init(int num_player) {
  • int taille = 0;
  • char c;
  • id_player = num_player;
  • cout << "Joueur " << id_player << " Indiquez votre nom : ";
  • while (taille < 2){ //on boucle si le nom n'est pas d'au moins deux caractères
  • taille = 0;
  • while (((c=cin.get()) != '\n' ) && (taille < 18)) {
  • nom[taille] = c;
  • taille++;
  • }
  • }
  • nom[taille] = '\0';
  • score = 0;
  • };
  • int * Player::PlayerPlay(char min_pos, char max_pos) {
  • int taille = 0;
  • char c;
  • coordonnees[0] = -1;
  • coordonnees[1] = -1;
  • cout << GetNomPlayer() << " indiquer la position (x-y) :";
  • while (((c=cin.get()) != '\n' ) && (taille < 3)) {
  • if (taille == 0 && c >= min_pos && c <= max_pos) coordonnees[0]= atoi(&c) - 1;
  • if (taille == 2 && c >= min_pos && c <= max_pos) coordonnees[1]= atoi(&c) - 1;
  • taille++;
  • }
  • if (coordonnees[0] == -1 || coordonnees[1] == -1) {
  • coordonnees[0] = -1;
  • coordonnees[1] = -1;
  • }
  • return coordonnees;
  • };
  • /* fichier plateau.h */
  • class Plateau {
  • private:
  • int tableau[3][3];
  • public:
  • Plateau(void) {InitPlateau();};
  • void InitPlateau(void);
  • int Pose_pion(int * pion, int val_pion);
  • void AffichePlateau(int rond, int croix);
  • int Plateau::Ligne(int rond, int croix);
  • };
  • /* fichier : plateau.cpp */
  • #include <cstdlib>
  • #include <iostream>
  • #include "plateau.h"
  • using namespace std;
  • void Plateau::InitPlateau(void) {
  • int i, j;
  • for (i = 0; i < 3; i++)
  • for (j = 0; j < 3; j++) tableau[i][j] = 0;
  • };
  • int Plateau::Pose_pion(int * pion, int val_pion) {
  • int i, j;
  • if (pion[0] == -1) return -1;
  • if (tableau[pion[0]][pion[1]] == 0) {
  • tableau[pion[0]][pion[1]] = val_pion;
  • return 0;
  • }
  • return -1;
  • };
  • void Plateau::AffichePlateau(int rond, int croix) {
  • int i, j;
  • for (i = 0; i < 3; i++) {
  • for (j = 0; j < 3; j++) {
  • if (tableau[i][j] == rond) cout << " O ";
  • if (tableau[i][j] == croix) cout << " X ";
  • if (tableau[i][j] != rond && tableau[i][j] != croix) cout << " ";
  • if (j != 2) cout << "|";
  • }
  • if (i!=2) cout << "\n-----------";
  • cout << "\n";
  • }
  • };
  • int Plateau::Ligne(int rond, int croix) {
  • int i,j;
  • int cumul;
  • cumul = tableau[0][0] + tableau[1][1] + tableau[2][2];
  • if (cumul == rond * 3 || cumul == croix * 3) return 1;
  • cumul = tableau[0][2] + tableau[1][1] + tableau[2][0];
  • if (cumul == rond * 3 || cumul == croix * 3) return 1;
  • for (i = 0; i < 3; i++) {
  • cumul = 0;
  • for (j = 0; j < 3; j++) {
  • cumul = cumul + tableau[i][j];
  • }
  • if (cumul == rond * 3 || cumul == croix * 3) return 1;
  • }
  • for (i = 0; i < 3; i++) {
  • cumul = 0;
  • for (j = 0; j < 3; j++) {
  • cumul = cumul + tableau[j][i];
  • }
  • if (cumul == rond * 3 || cumul == croix * 3) return 1;
  • }
  • return 0;
  • }
  • /* fichier morpion_objet.h */
  • #include <cstdlib>
  • #include <iostream>
  • #include "player.h"
  • #include "plateau.h"
  • class Game {
  • private:
  • Plateau plateau;
  • Player joueur1;
  • Player joueur2;
  • int manche;
  • public:
  • Game(void) {joueur2.SetPionPlayer(1); manche=0; InitManche();};
  • void InitManche(void) {plateau.InitPlateau();};
  • void GetScore(void);
  • int GetManche(void) {return manche;};
  • void NewManche(void);
  • void JoueManche(Player &joueurA, Player &joueurB);
  • };
  • /* fichier morpion_objet.cpp */
  • #include "morpion_objet.h"
  • using namespace std;
  • void Game::GetScore(void) {
  • cout << joueur1.GetNomPlayer() << " : " << joueur1.GetScorePlayer() << " - ";
  • cout << joueur2.GetNomPlayer() << " : " << joueur2.GetScorePlayer() << "\n";
  • };
  • void Game::JoueManche(Player &joueurA, Player &joueurB) {
  • InitManche();
  • for (int i=0; i < 5; i++) {
  • system("CLS");
  • GetScore();
  • plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
  • while (plateau.Pose_pion(joueurA.PlayerPlay('1', '3'), joueurA.GetPionPlayer()) == -1) {
  • system("CLS");
  • GetScore();
  • plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
  • cout << "Coordonnees invalides (1-1 a 3-3) ou non libre\n";
  • }
  • if (plateau.Ligne(joueurA.GetPionPlayer(), joueurB.GetPionPlayer())) {
  • system("CLS");
  • joueurA.PlayerScorePP();
  • GetScore();
  • plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
  • cout << "Gagner \n";
  • break;
  • }
  • if (i == 5) break;
  • system("CLS");
  • GetScore();
  • plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
  • while (plateau.Pose_pion(joueurB.PlayerPlay('1', '3'), joueurB.GetPionPlayer()) == -1) {
  • system("CLS");
  • GetScore();
  • plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
  • cout << "Coordonnees invalides (1-1 a 3-3) ou non libre\n";
  • }
  • if (plateau.Ligne(joueurA.GetPionPlayer(), joueurB.GetPionPlayer())) {
  • system("CLS");
  • joueurB.PlayerScorePP();
  • GetScore();
  • plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
  • cout << "Gagner \n";
  • break;
  • }
  • }
  • };
  • void Game::NewManche(void) {
  • if ((++manche % 2) == 0) {
  • JoueManche(joueur2, joueur1);
  • } else {
  • JoueManche(joueur1, joueur2);
  • }
  • };
  • int main(int argc, char *argv[])
  • {
  • Game jeu;
  • char reponse = 'O';
  • while (true) {
  • jeu.NewManche();
  • cout << "\n rejouer (O/N)? ";
  • cin >> reponse;
  • if (reponse == 'N' || reponse == 'n') break;
  • }
  • system("CLS");
  • jeu.GetScore();
  • system("PAUSE");
  • return EXIT_SUCCESS;
  • }
/* fichier : player.h */ 

class Player {
    private:
        
        int id_player;  //id du joueur
        char nom[20];
        int score;      // score du joueur
        void SetNomPlayer();
        int coordonnees[2]; //coordonnées de x et y
        int val_pion;
        
    protected:
        static int id_auto_player;
    //  void PlayerScorePP();
    
    public: 
        Player(int pion=-1) {val_pion = pion; Init(++id_auto_player);};
        void Init(int num_player);
        char * GetNomPlayer(void){return nom;};
        int GetPionPlayer(void){return val_pion;};
        int GetScorePlayer(void){return score;};
        void SetPionPlayer(int pion){val_pion = pion;};
        void PlayerScorePP(void) {++score;};
        void PlayerInitScore(void) {score = 0;};
        int * PlayerPlay(char min_pos,char max_pos);
        
};

/* fichier : player.cpp */ 

#include <cstdlib>
#include <iostream>
#include "player.h"

using namespace std;

int Player::id_auto_player = 0;

void Player::Init(int num_player) {
    int taille = 0;
    char c;
    id_player =  num_player;
    cout << "Joueur " << id_player << " Indiquez votre nom : ";
    while (taille < 2){ //on boucle si le nom n'est pas d'au moins deux caractères
        taille = 0;  
        while (((c=cin.get()) != '\n' ) && (taille < 18)) {
            nom[taille] = c;
            taille++;
        }
    }
    nom[taille] = '\0'; 
    score = 0;
};

int * Player::PlayerPlay(char min_pos, char max_pos) {
    
    int taille = 0;
    char c;
    coordonnees[0] = -1;
    coordonnees[1] = -1;
    
    
    cout << GetNomPlayer()  <<  " indiquer la position (x-y) :";
    while (((c=cin.get()) != '\n' ) && (taille < 3)) {
        if (taille == 0 && c >= min_pos && c <= max_pos) coordonnees[0]= atoi(&c) - 1; 
        if (taille == 2 && c >= min_pos && c <= max_pos) coordonnees[1]= atoi(&c) - 1;
        taille++;
        
    } 
    if (coordonnees[0] == -1 || coordonnees[1] == -1) {
            coordonnees[0] = -1;
            coordonnees[1] = -1;
    }
    return coordonnees;
};  
    
    

/* fichier plateau.h */

class Plateau {
    private:
        int tableau[3][3];
    public:
        Plateau(void) {InitPlateau();};
        void InitPlateau(void);
        int Pose_pion(int * pion, int val_pion);
        void AffichePlateau(int rond, int croix);
        int Plateau::Ligne(int rond, int croix);
        
};


/* fichier : plateau.cpp */

#include <cstdlib>
#include <iostream>
#include "plateau.h"

using namespace std;


void Plateau::InitPlateau(void) {
    int i, j;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++) tableau[i][j] = 0;
};


int Plateau::Pose_pion(int * pion, int val_pion) {
    int i, j;   
    if (pion[0] == -1) return -1;
    if (tableau[pion[0]][pion[1]] == 0)  {
        tableau[pion[0]][pion[1]] = val_pion;
        return 0;
    }
    return -1;
         
};


void Plateau::AffichePlateau(int rond, int croix) {
    int i, j;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (tableau[i][j] == rond) cout << " O ";
            if (tableau[i][j] == croix) cout << " X ";
            if (tableau[i][j] != rond && tableau[i][j] != croix) cout << "   ";
            if (j != 2) cout << "|";
        }
        if (i!=2) cout << "\n-----------";
        cout << "\n";
    }
                
};


int Plateau::Ligne(int rond, int croix) {
    int i,j; 
    int cumul;
    
    cumul = tableau[0][0] + tableau[1][1] + tableau[2][2];
    if (cumul == rond * 3 || cumul == croix * 3) return 1;
    cumul = tableau[0][2] + tableau[1][1] + tableau[2][0];
    if (cumul == rond * 3 || cumul == croix * 3) return 1;
    
    for (i = 0; i < 3; i++) {
        cumul = 0;
        for (j = 0; j < 3; j++) {
            cumul = cumul + tableau[i][j];
        }
        if (cumul == rond * 3 || cumul == croix * 3) return 1;
    }
    
    for (i = 0; i < 3; i++) {
        cumul = 0;
        for (j = 0; j < 3; j++) {
            cumul = cumul + tableau[j][i];
        }
        if (cumul == rond * 3 || cumul == croix * 3) return 1;
    }
    return 0;
}

 

    

/* fichier morpion_objet.h */

#include <cstdlib>
#include <iostream>
#include "player.h"
#include "plateau.h"

class Game {
    private:
        Plateau plateau;
        Player joueur1;
        Player joueur2;
        int manche;
        
    public:
        Game(void) {joueur2.SetPionPlayer(1); manche=0; InitManche();};
        void InitManche(void) {plateau.InitPlateau();};
        void GetScore(void);
        int GetManche(void) {return manche;};
        void NewManche(void);
        void JoueManche(Player &joueurA, Player &joueurB);
        
};


/* fichier morpion_objet.cpp */

#include "morpion_objet.h" 

using namespace std;

void Game::GetScore(void) {
    cout << joueur1.GetNomPlayer() << " : " << joueur1.GetScorePlayer() << " - ";
    cout << joueur2.GetNomPlayer() << " : " << joueur2.GetScorePlayer() << "\n";
};

void Game::JoueManche(Player &joueurA, Player &joueurB) {
    InitManche();
    for (int i=0; i < 5; i++) {
        system("CLS");
        GetScore();
        plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
        while (plateau.Pose_pion(joueurA.PlayerPlay('1', '3'), joueurA.GetPionPlayer()) == -1) {
            system("CLS");
            GetScore();
            plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
            cout << "Coordonnees invalides (1-1 a 3-3) ou non libre\n";
        }
        if (plateau.Ligne(joueurA.GetPionPlayer(), joueurB.GetPionPlayer())) {
            system("CLS");
            joueurA.PlayerScorePP();
            GetScore();
            plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
            cout << "Gagner \n";
            
            break;
        }
        if (i == 5) break;
        
        system("CLS");
        GetScore();
        plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
        while (plateau.Pose_pion(joueurB.PlayerPlay('1', '3'), joueurB.GetPionPlayer()) == -1) {
            system("CLS");
            GetScore();
            plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
            cout << "Coordonnees invalides (1-1 a 3-3) ou non libre\n";
        }
        if (plateau.Ligne(joueurA.GetPionPlayer(), joueurB.GetPionPlayer())) {
            system("CLS");
            joueurB.PlayerScorePP();
            GetScore();
            plateau.AffichePlateau(joueur1.GetPionPlayer(), joueur2.GetPionPlayer());
            cout << "Gagner \n";
            
            break;
        }
        
    }
        
};

void Game::NewManche(void) {
    
    if ((++manche % 2) == 0) {
        JoueManche(joueur2, joueur1);
    } else {
        JoueManche(joueur1, joueur2);
    }
};

int main(int argc, char *argv[])
{
    Game jeu;
    char reponse = 'O';
    while (true) {
        jeu.NewManche();
        cout << "\n rejouer (O/N)? ";
        cin >> reponse;
        if (reponse == 'N' || reponse == 'n') break;
    }
    system("CLS");
    jeu.GetScore();
    system("PAUSE");
    return EXIT_SUCCESS;
}

 Conclusion

Le projet est réaliser à l'aide de dev-c++, AMHA, largement suffisant pour débuter en C++
le fichier zip reprend l'ensemble des fichiers...

 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


 Historique

18 mai 2005 18:28:49 :
mise à jour sur le code affiché j'avais remis le code de player.cpp au lieu de plateau.cpp L'erreur ne conserne pas le fichier zip
31 janvier 2007 01:09:56 :
Mots clef

 Sources du même auteur

UN TABLEAU MULTIDIMENTIONNEL COMME PARAMETRE DE FONCTION EN ...

 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

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture JEUX DU MORPION EN CONSOLE par thebroyeur
Source avec Zip Source avec une capture MORPION CONSOLE par khakech
Source avec Zip Source avec une capture MORPION C++ (AVEC AFFICHAGE TEXTE PAS MAL), ET UNE SORTE D'I... par GUIGUI35400
Source avec Zip MORPION MINI JEU PRIMITIVE ARTIFICIAL INTELLIGENCE par darkor
Source avec Zip Source avec une capture MORPIONMAX: UN MORPION 10X10 par ndubien

Commentaires et avis

Commentaire de MuPuF le 18/05/2005 12:59:13

BRAVO, tu as reussi un code tres simple, explicite, avec des classes et MIS CA EN DEBUTANT, y'en a qui devrait t'imiter (moi au passage).
Ralala, heuresement qu'il y a des types qui sont reglo avec eux meme ....

Pour le resultat, il est tout a fais regardable, bien que now, ce serais bien de le faire en win32, comme ça tu pourras fdonner a l'utilisateur le moyen d'utiliser sa souris et de se rettrouver avec une "belle" fenetre windows. Et puis quoi de plus ludique qu'un jeu (a développer et a jouer ...)

Et puis pourquoi ne pas penser a la suite, IA ?

Commentaire de Mcjo le 18/05/2005 18:38:15

Je pense à l'IA, c'est pour ça que j'ai pondérer les valeurs du tableau à -1 et 1 je pense l'implémenter avec une AI qui jouerai en fonction du poid la case qui devrait correspondre à la somme des poids des cases contiguës, un truc dans le genre...

Commentaire de SnOOpss le 18/05/2005 19:21:59

Salut !!

Si ca t'interesse y'avait un truc tout simple pour les IA de morpion  en fait il te suffisait de faire un carré magique avec les valeur de 1 a 9 ( 5 etant au centre ) et de chercher quelle case choisir pour avoir le plus de chance de faire un total de 15 avec 3 valeurs differentes prise totallement au hazard entre 0 et 9( mais le plus simple etant de les tester dans l'ordre) en faisant des boucles avec les valeurs deja choisit et celles encore dispo, meme en faisant un algorytme brutal qui teste toutes les combinaisons sachant que chaque valeur n y été qu'une seule fois c'etait tres rapide.

Commentaire de MuPuF le 18/05/2005 20:14:23

bah, ya que 9 combinaisons alors ....

Commentaire de Kirua le 19/05/2005 16:48:06

au premier coup, il y a 9! parties possibles (enfin, sans décompter les parties qui se terminent parce qu'il y a un gagnant), ce qui fait qq ch de l'ordre de 360 000 parties je pense. c'est tout à fait accessible à un ordinateur ^^, quoique brutal. si tu veux programmer une chouette IA, pense au Minimax (recherche ça sur internet), et comme le jeu est petit tu n'as même pas besoin de t'acharner à comprendre l'alpha-bêta, qui est une optimisation sérieuse du minimax. tout ça rentre dans la théorie des jeux, c'est terriblement passionnant :) doc à foison sur google. il te faut juste comprendre ce qu'est la récursivité à vrai dire, et puis avoir un bon sens de la synthèse.

tu tombes à pic à vrai dire, car depuis hier soir je veux coder mon minimax, mais j'avais la flemme de coder une interface de jeu console :D mci ;) je vais voir si je peux récupérer ça :)

Commentaire de SnOOpss le 19/05/2005 18:25:25

Nan c'est beaucoup plus simple que tu le pense un exemple
Tu possede les case 8 3
Ton adversaire 2 7
C'est a toi de jouer tu as

boucle avec le 8
15 - (8 + 1) = 9 (case 9)
2 deja pris
15 - (8 + 3) = 4 (case 4)
15 - (8 + 4) = 3 (tu posede deja le 3 donc gain)
15 - (8 + 5) = 2 (2 deja prit)
15 - (8 + 6) = 1 (case 1)
fin car on depasse 15
Ici on recupere 4 case a jouer dont un amenant le gain

2 eme boucle avec le 3
.....


On chosit soit la case amenant le gain, soit celle ressortant plusieur fois, soit une au pif figurant dans celle recupéré

En fait on est tres loin des 360 000 combinaison a tester vu que les test a faire sont 15 - (case en train de tester) + (valeur de 1 a 9) sachant que ce resultat de doit pas depasser 15 !!!


Commentaire de Kirua le 19/05/2005 18:34:58

Bien entendu, les règles très spécifiqus du morpion permettent ce genre d'optimisations draconiennes en considérant directement les règles. Je vois pour ma part le morpion comme un exemple simpliste permettant de s'exercer à l'implémentation d'un algorithme de la théorie des jeux, bcp plus général et largement utilisé, qu'est le minimax. Avec une bonne heuristique (typiquement, c'est la qualité de l'heuristique qui définit la qualité de l'IA, comme souvent), on peut faire une IA d'échecs avec l'alpha bêta.

Commentaire de MuPuF le 19/05/2005 20:01:08

jamais entendu parler du minimax, mais je vais en avoir besoin .....

Commentaire de SnOOpss le 19/05/2005 21:09:26

Moi non plus mais je crois que je vais eviter de me pencher trop longtemps dessus, c'est au dessus de mes competences, :)

Mais je dois pas etre le seul dans ce cas car sur les site que j'ai testé y avait generallement des puissance4 et des morpions a tester comme exemple et sur 5 partie a chaqu'un j'ai gagné les 5 a chaque fois donc meme pour la personne qui expliquait le truc elle avait mal programmé son algorithme.

Sinon je ne connaissais pas du tout Kirua, et si tu avais des sources qui utilise le minimax ca m'interesserait !!

Commentaire de Kirua le 19/05/2005 21:13:12

À vrai dire, c'est en cours de production à l'instant ^^ Mais c'est mon premier essai, donc ce ne sera certainement pas "the state of the art" ;) Si ça vaut le coup, je posterai, mais je le fais rarement. Je te tiens au courant sur ce post.

Commentaire de Mcjo le 20/05/2005 09:55:25

il y a un exemple de morpion qui utilise minimax et ça marche assé mal :
http://lwh.free.fr/pages/algo/minmax/minmax.htm
en effet pour gagner à tous les coups :
on joue dans un coin, puis dans le coin opposé enfin dans le coin restant et on a ganger la partie car l'IA semble pensé qu'il faut essayer de prendre le milieu puis un coin alors que le milieu n'est pas une bonne position au morpion ;)

Commentaire de Kirua le 20/05/2005 17:26:54

Bah voilà mon code est fini et il m'a même battu. Je ne comprends pas que tu dises que le minimax marche assez mal. À mon avis, c'est surtout une affaire d'implémentation. Si ton IA développes l'arbre entier, il n'y a aucune raison pour qu'elle puisse perde, les règles sont trop restreintes pour que l'heuristique puisse se planter.

Commentaire de Vishnouu le 29/06/2005 22:01:07

Est ce que quelqu'un aurait un tuto (pas trop dur) qui explique le fonctionnement avec minimax,alphabeta, avec source et explications svp ? (oui je suis exigeant^^)

Commentaire de Kirua le 30/06/2005 00:22:26

http://perso.wanadoo.fr/alemanni/page5.html

avec plaisir ;)

Commentaire de Vishnouu le 30/06/2005 14:12:01

ok merci (et dsl pour le double post)

Commentaire de zozor le 05/09/2006 22:53:05

un peu de commentaire aurait été bien dans le code lol

Commentaire de Mic32768 le 12/06/2007 17:58:38

Félicitations pour ta source, vraiment bien codée!

Commentaire de skawll le 19/05/2010 12:05:14

Slt,
Comment faire pour l'éxécuter?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

morpion en turbo pascal [ par norvegien ] SalutJ'aurai besoin d'un coup de main pour faire un morpion 5x5 en turbo pascal. C pour un projet info à faire avant la fin de l'annee et com j'ai jam programmer le jeu du morpion en C [ par Adrael ] Bonjour, J'aimerai programmer le jeu du morpion en C, le problème, c'est que je ne sais pas par ou commencer, que faire, s'il faut faire du graphique, Morpion ( de l'aide svp !) [ par clement69 ] Bonjour,Je suis etudiant en premiere année d'IUT Informatique en cours du soir, et je dois realiser un Morpion en language C où l'on a la possibilité morpion pour c [ par credop ] Salut &#224; tous.Je voudrais quelques explications par rapport au code du morpion ds c.J'aimerais qu'on m'explique comment &#231;a marche par exemple pb avec un code [ par Saros ] J'ai un probl&#232;me de compilation dans un code et je n'arrive pas du tout &#224; savoir d'o&#249; &#231;a vient le fichier source en question peut algorithme du morpion en c [ par amoated ] bonjour à tous, je suis débutant en programmation et j'aimerais avoir l'algo du morpion en langage c. Merci de me répondre. jeu morpion(entrez et memorisez un prénom) [ par vives67410 ] bonjour je suis entrain de faire un le morpion je voudrais que le jeu demande le prenom du joueur1 et du joueur2et ensuite pouvoir afficher le prenom Morpion en C [ par puich ] Bonjour a tous je suis nouveau sur le forum. Je doit crée un jeux (morpion) en C mais je ne c pas trop comment le faire car je ne suis pas super fort IA en MIPS pour le Jeu de Morpion [ par erkan1404 ] Bonjour, J'ai quelque petit soucis pour effectuer un IA en Mips (code assembleur), pour le jeu de Morpion. Si vous avez des idées par ou commencer j jeux Morpion - puissances 4 [ par Lisandrelegrand ] Salut, je cherche un jeux de Morpion ou de puissances 4 en langague C comprenant le chainage avant-arriere (systeme expert AI) Merci pour votre aide.


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 2,090 sec (4)

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