Jeux d'échec qui nous met en échec!!

shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007 - 5 avril 2007 à 15:14
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 8 avril 2007 à 17:37
Bonjour,
nous rencontrons actuellement un problème sur un de nos programmes qui traite d'un jeux d'échec.
en gros nous avons une fonction dans une classe qui doit déplacer des pièces sur l'échéquier mais il nous met des erreurs comme celle-ci au moment de l'affectation des déplacement de variable :
error C2109: subscript requires array or pointer type
Nous ne nous souvenons plus comment les résoudre...
voila notre bout de code qui pose problème
*************************************************
// piece1.cpp: implementation of the piece class.
//
//////////////////////////////////////////////////////////////////////

#include "piece1.h"
#include "partie.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Piece::move(int X1,int Y1,int X2,int Y2){
    E[X2][Y2]=E[X1][Y1];
    E[X1][Y1]=NULL;
}
***********************************************

et voila la classe ou notre tableau a été déclaré et initialisé :
***************************************************
// partie.h: interface for the partie class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PARTIE_H__1F393326_0873_4102_BBB2_F7BE2B3C358B__INCLUDED_)
#define AFX_PARTIE_H__1F393326_0873_4102_BBB2_F7BE2B3C358B__INCLUDED_

#include "Joueur.h"
#include
#include <string.h>

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Joueur;

class Partie 
{
friend class Piece;

private:
    char * date;
    Joueur *j1;
    Joueur *j2;
    char * E[7][7];

public:
    //Constructeur par défaut
    Partie() {
        cout<<"appel Partie()"<<endl;
        date = new char [20];
        strcpy(date, "jj/mm/yy");
        j1=NULL;
        j2=NULL;
    };
    //Conctructeur avec paramètres
    Partie(char * date) {
        cout<<"appel Partie(char * une_date)"<<endl;
        setdate(date);
        j1=NULL;
        j2=NULL;
    };

    //Date
    void setdate (char *a){
        date=new char [strlen(a)+1];
        strcpy(date,a);
    };

    char * getdate(){
        return date;
    };
   
    //Gestion joueur
    Joueur * getjoueur(int i);
   
    int quittejoueur(Joueur * player);
   
    int addjoueur(Joueur * player);
   
    //Fin de la partie
    void terminer(void);
   
    void afficherPartie(void);

    void initechiquier(void);

    void afficherechiquier(void);

    void Partie::modifier(void);

    //Destructeur de la classe
    virtual ~Partie(){
            cout<<"appel du ~Partie"<<endl;            if( j1 NULL && j2 NULL){
                delete [] date;
            cout<<"destruction de la partie"<<endl;
            }
    };

};

#endif // !defined(AFX_PARTIE_H__1F393326_0873_4102_BBB2_F7BE2B3C358B__INCLUDED_)
**************************************

Nous bossons sous visual C++ en ce moment voila, nous vous remercions d'avance pour vos réponses qui nous éclaire souvent!
cordialement, shinohinata!

28 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
5 avril 2007 à 15:28
Tu peux essayer de déclare E comme ceci :
char E[7][7];   // enlever operateur *

Car je ne vois pas ou cela peut nécessiter un pointeur vers un tableau de char à 2 dimentions.
Sinon il aurait fallu faire :
*(E[X2][Y2]) = *(E[X1][Y1]);
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
5 avril 2007 à 15:32
après modification on obtient toujours nos 9erreurs et nos 2warnings :
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.h(31) : warning C4183: 'piece': member function definition looks like a ctor, but name does not match enclosing class
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.h(36) : warning C4154: deletion of an array expression; conversion to pointer supplied
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(13) : error C2065: 'E' : undeclared identifier
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(13) : error C2109: subscript requires array or pointer type
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(13) : error C2109: subscript requires array or pointer type
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(13) : error C2109: subscript requires array or pointer type
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(13) : error C2109: subscript requires array or pointer type
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(13) : error C2106: '=' : left operand must be l-value
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(14) : error C2109: subscript requires array or pointer type
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(14) : error C2109: subscript requires array or pointer type
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(14) : error C2106: '=' : left operand must be l-value

a c'est chiant je ne vois pas de quoi ca vient?
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
5 avril 2007 à 16:10
personne n'a une idée?
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
5 avril 2007 à 17:19
Apparement il reconnaît pas E tout simplement:
d'ailleurs je comprends pas trop votre code non plus : E est un tableau déclaré dans une classe
donc quand vous l'utilisez dans piece1.cpp, il faut mentionner la classe à laquelle il appartient partie1.E[x][y] par exemple
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
5 avril 2007 à 19:03
peut-être que mettre un champ "Partie &partie;" ou "char *plateau;"

dans la classe piece est plus logique ?

a+
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
5 avril 2007 à 23:43
merci a juju 12 qui a réglé le problème mais maintenant il nous sort cette erreur qui n'est pas logique du tout :
C:\Documents and Settings\mugiw@r@ no luffy\Bureau\POO\poo\jglkdfj\echec vv2.2\piece1.cpp(23) : error C2143: syntax error : missing ';' before '.'

et je voulais savoir également si avec les tableaux que nous avons fait un utilisateur pourra bien rentrer les coordonnées d'une nouvelle case et donc faire avancer la pièce dans cette autre endroit du tableau que l'on a créé tout en remettant la valeur de la case a null?

merci pour vos réponses précédentes et futures!
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
6 avril 2007 à 10:39
quelqu'un a une idée?
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
6 avril 2007 à 11:20
Je pense que l'objet n'est pas défini. Avez-vous pensé à déclarer la partie, genre Partie partie1?
De plus, avis personnel : votre définition des classes me paraît un peu étrange, pourquoi pas une classe Echiquier contenant un tableau de classes Piece?
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
6 avril 2007 à 11:33
mais le probleme c'est que chaque piece devra etre différencier de part sa couleur et de part sa fonction (pion, fou, tour,...) comment la case du tableau saura que c'est un fou ou une tour a l'intérieur???
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
6 avril 2007 à 11:38
Ca dépend de l'architecture de votre projet...vous pouvez toujours mettre une fonction GetType dans la classe Piece qui renverra le nom de la pièce...Enfin il y a plusieurs manières d'envisager la chose.
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
6 avril 2007 à 11:54
car nous on été parti pour faire une autre classe ou d'autre classes qui prendrait en héritage la classe pièce.

Puis dans les classes qui auraient pris la classe piece en héritage on aurait fait pour chacune quelques fonctions qui aurait différencié chaque classe en une piece distincte de l'échéquier genre une classe héritant de piece qui serait une classe pion, puis une autre tour,....
0
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
6 avril 2007 à 18:47
salut

peut-être que donner le code est beaucoup plus efficace que de poser des questions sur un code que tu nous donnes pas !!!
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
6 avril 2007 à 21:28
// joueur.cpp: implementation of the joueur class.
//
//////////////////////////////////////////////////////////////////////

#include "joueur.h"
#include "iostream.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

        
void Joueur::afficherJoueur(void)
{
    cout<<"Le joueur : "<<getnom()<<'\n';
    for (int i=0; i<5; i++)
    {
        cout<<"possede la partie numero"<afficherPartie();
        else
            cout<<"partie libre "<<'\n';
    }
}

int Joueur::setpartie( Partie & partie)
{
    int i=0;
    int err=2;
    while (parties[i]!= NULL && i<5) {
        i++;
    }
    if (i==5) {
        return 1;
    }
    else {
        err=partie.addjoueur(  this);
        if (err == 0) {
            parties[i]=& partie;
            return 0;
            }
        else {
            return 2;
        }
    }
}

Partie * Joueur::getpartie( int i)
{
    if (i>=0 && i<5 ) {
        return parties[i];
    }
    else {
        return NULL;
    }
}

void Joueur::initialisation()
{
    for (int i =0; i<5; i++) {
        parties[i] = NULL;
    }
}

int Joueur::arreterpartie(Partie * partie)

{
    for(int i=0 ; i<5 ; i++){
        if(parties[i] == partie){
            parties[i] = NULL;
        return 0;
        }
    }
    return 1;
}

// joueur.h: interface for the joueur class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_JOUEUR_H__198C296E_02BD_4909_A7C7_39BB0F405BF5__INCLUDED_)
#define AFX_JOUEUR_H__198C296E_02BD_4909_A7C7_39BB0F405BF5__INCLUDED_

#include "partie.h"
#include
#include <string.h>

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Partie;

class Joueur 
{
private:
    char * nom;
    Partie * parties[5];

public:
    //Constructeur par défaut
    Joueur(){
        nom=NULL;
        setnom("Joueur");
    }

    Joueur(char * n)
    {
        nom=NULL;
        setnom(n);
        initialisation();
    //    setpartie(NULL);
    }
    //Constructeur avec paramètre
    Joueur(char *n, Partie & partie){
        nom=NULL;
        setnom(n);
        initialisation();
        setpartie(partie);
    }

    // constructeur par copies
    Joueur(Joueur & joueur, char * n)  {
        setnom(n);
        cout<<"appel Joueur(const Joueur & joueur)"<<'\n';
        initialisation();
        this->setnom(joueur.getnom());
    }

    //Pour le nom
    void setnom (char *n) {
       
        if( nom != NULL)
            delete [] nom;
            nom=new char[strlen(n)+1];
            strcpy(nom,n);
       
}

    char * getnom(void){
        return nom;
    }
   
    //Pour les parties
    int setpartie(Partie & partie);
   
    Partie * getpartie(int i);
   
    Joueur& operator = (Joueur& joueur) {
        if (&joueur==this)
            return * this;
        this->setnom(joueur.getnom());
            return * this;
    };

    void initialisation();
     //Affiche le joueur!
    void afficherJoueur(void);
     //Arrêter la partie
    int arreterpartie(Partie * partie);

        
    //Destructeur de classe
    virtual ~Joueur(void) {
    cout<<"appel du ~Joueur"<<endl;
    if (nom!= NULL) {
        delete[]nom;
        //cout<<"destruction de nomjoueur"<<endl;
    }
    }
};
#endif // !defined(AFX_JOUEUR_H__198C296E_02BD_4909_A7C7_39BB0F405BF5__INCLUDED_)

// partie.cpp: implementation of the partie class.
//
//////////////////////////////////////////////////////////////////////

#include "partie.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Joueur * Partie::getjoueur(int i)
{
    switch(i) {
    case 1: return j1;
    case 2: return j2;
    default: return NULL;
    }
}

int Partie::quittejoueur(Joueur * player)
    {        if (j1!NULL && j1 player) {
            j1 = NULL;
            return 0;
        }        if (j2!NULL && j2 player) {
            j2 = NULL;
            return 0;
        }
        return (1);
};

int Partie::addjoueur(Joueur * player)
{
if ( j1 == NULL) {
        j1= player;
        return 0;
    } else {
        if (j2 == NULL) {
            j2 = player;
            return 0;
        } else {
            return 1;
        }
    }
}

void Partie::terminer(void)
{
if (j1!= NULL)   
    quittejoueur(j1);
if (j2!=NULL)  
        quittejoueur(j2);
}

void Partie::afficherPartie(void) {
        cout<<"partie debutee le "<<getdate()<<'\n';
        if (j1!= NULL)
            cout<<"joueur 1 :"<<j1->getnom()<<'\n';
        else
            cout<<"joueur 1 n'existe pas!"<<'\n';
        if (j2!= NULL)
        cout<<"joueur 2 :"<<j2->getnom()<<'\n';
        else
            cout<<"joueur 2 n'existe pas!"<<'\n';
}

void Partie::initechiquier(void)
{
    E[0][0]="TN";
    E[1][0]="CN";
    E[2][0]="FN";
    E[3][0]="KN";
    E[4][0]="QN";
    E[5][0]="FN";
    E[6][0]="CN";
    E[7][0]="TN";

    E[0][1]="PN";
    E[1][1]="PN";
    E[2][1]="PN";
    E[3][1]="PN";
    E[4][1]="PN";
    E[5][1]="PN";
    E[6][1]="PN";
    E[7][1]="PN";

    E[0][2]="  ";
    E[1][2]="  ";
    E[2][2]="  ";
    E[3][2]="  ";
    E[4][2]="  ";
    E[5][2]="  ";
    E[6][2]="  ";
    E[7][2]="  ";

    E[0][3]="  ";
    E[1][3]="  ";
    E[2][3]="  ";
    E[3][3]="  ";
    E[4][3]="  ";
    E[5][3]="  ";
    E[6][3]="  ";
    E[7][3]="  ";

    E[0][4]="  ";
    E[1][4]="  ";
    E[2][4]="  ";
    E[3][4]="  ";
    E[4][4]="  ";
    E[5][4]="  ";
    E[6][4]="  ";
    E[7][4]="  ";

    E[0][5]="  ";
    E[1][5]="  ";
    E[2][5]="  ";
    E[3][5]="  ";
    E[4][5]="  ";
    E[5][5]="  ";
    E[6][5]="  ";
    E[7][5]="  ";

    E[0][6]="PB";
    E[1][6]="PB";
    E[2][6]="PB";
    E[3][6]="PB";
    E[4][6]="PB";
    E[5][6]="PB";
    E[6][6]="PB";
    E[7][6]="PB";

    E[0][7]="TB";
    E[1][7]="CB";
    E[2][7]="FB";
    E[3][7]="QB";
    E[4][7]="KB";
    E[5][7]="FB";
    E[6][7]="CB";
    E[7][7]="TB";
}

void Partie :: afficherechiquier(void)
{

   
    cout<<"       ÚÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄ¿"<<endl;
    cout<<"       ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"       ³  A   ³  B   ³  C   ³  D   ³  E   ³  F   ³  G   ³  H   ³"<<endl;
    cout<<"       ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"ÚÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ´"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"³  1   ³  "<<E[0][0]<<"  ³  "<<E[1][0]<<"  ³  "<<E[2][0]<<"  ³  "<<E[3][0]<<"  ³  "<<E[4][0]<<"  ³  "<<E[5][0]<<"  ³  "<<E[6][0]<<"  ³  "<<E[7][0]<<"  ³"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ´"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"³  2   ³  "<<E[0][1]<<"  ³  "<<E[1][1]<<"  ³  "<<E[2][1]<<"  ³  "<<E[3][1]<<"  ³  "<<E[4][1]<<"  ³  "<<E[5][1]<<"  ³  "<<E[6][1]<<"  ³  "<<E[7][1]<<"  ³"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ´"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"³  3   ³  "<<E[0][2]<<"  ³  "<<E[1][2]<<"  ³  "<<E[2][2]<<"  ³  "<<E[3][2]<<"  ³  "<<E[4][2]<<"  ³  "<<E[5][2]<<"  ³  "<<E[6][2]<<"  ³  "<<E[7][2]<<"  ³"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ´"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"³  4   ³  "<<E[0][3]<<"  ³  "<<E[1][3]<<"  ³  "<<E[2][3]<<"  ³  "<<E[3][3]<<"  ³  "<<E[4][3]<<"  ³  "<<E[5][3]<<"  ³  "<<E[6][3]<<"  ³  "<<E[7][3]<<"  ³"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ´"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"³  5   ³  "<<E[0][4]<<"  ³  "<<E[1][4]<<"  ³  "<<E[2][4]<<"  ³  "<<E[3][4]<<"  ³  "<<E[4][4]<<"  ³  "<<E[5][4]<<"  ³  "<<E[6][4]<<"  ³  "<<E[7][4]<<"  ³"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ´"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"³  6   ³  "<<E[0][5]<<"  ³  "<<E[1][5]<<"  ³  "<<E[2][5]<<"  ³  "<<E[3][5]<<"  ³  "<<E[4][5]<<"  ³  "<<E[5][5]<<"  ³  "<<E[6][5]<<"  ³  "<<E[7][5]<<"  ³"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ´"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"³  7   ³  "<<E[0][6]<<"  ³  "<<E[1][6]<<"  ³  "<<E[2][6]<<"  ³  "<<E[3][6]<<"  ³  "<<E[4][6]<<"  ³  "<<E[5][6]<<"  ³  "<<E[6][6]<<"  ³  "<<E[7][6]<<"  ³"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ´"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"³  8   ³  "<<E[0][7]<<"  ³  "<<E[1][7]<<"  ³  "<<E[2][7]<<"  ³  "<<E[3][7]<<"  ³  "<<E[4][7]<<"  ³  "<<E[5][7]<<"  ³  "<<E[6][7]<<"  ³  "<<E[7][7]<<"  ³"<<endl;
    cout<<"³      ³      ³      ³      ³      ³      ³      ³      ³      ³"<<endl;
    cout<<"ÀÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÙ"<<endl;

}

// partie.h: interface for the partie class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PARTIE_H__1F393326_0873_4102_BBB2_F7BE2B3C358B__INCLUDED_)
#define AFX_PARTIE_H__1F393326_0873_4102_BBB2_F7BE2B3C358B__INCLUDED_

#include "Joueur.h"
#include
#include <string.h>

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Joueur;

class Partie 
{
friend class Piece;

private:
    char * date;
    Joueur *j1;
    Joueur *j2;
    char E[7][7];

public:
    //Constructeur par défaut
    Partie() {
        cout<<"appel Partie()"<<endl;
        date = new char [20];
        strcpy(date, "jj/mm/yy");
        j1=NULL;
        j2=NULL;
    };
    //Conctructeur avec paramètres
    Partie(char * date) {
        cout<<"appel Partie(char * une_date)"<<endl;
        setdate(date);
        j1=NULL;
        j2=NULL;
    };

    //Date
    void setdate (char *a){
        date=new char [strlen(a)+1];
        strcpy(date,a);
    };

    char * getdate(){
        return date;
    };
   
    //Gestion joueur
    Joueur * getjoueur(int i);
   
    int quittejoueur(Joueur * player);
   
    int addjoueur(Joueur * player);
   
    //Fin de la partie
    void terminer(void);
   
    void afficherPartie(void);

    void initechiquier(void);

    void afficherechiquier(void);

    void Partie::modifier(void);

    //Destructeur de la classe
    virtual ~Partie(){
            cout<<"appel du ~Partie"<<endl;            if( j1 NULL && j2 NULL){
                delete [] date;
            cout<<"destruction de la partie"<<endl;
            }
    };

};

#endif // !defined(AFX_PARTIE_H__1F393326_0873_4102_BBB2_F7BE2B3C358B__INCLUDED_)

// piece1.cpp: implementation of the piece class.
//
//////////////////////////////////////////////////////////////////////

#include "piece1.h"
#include "partie.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Piece::piece(int x,int y,char color){   
            set_x(x);
            set_y(y);
            set_coul(color);
   
        }

Piece::move(int X1,int Y1,int X2,int Y2)
{
    if(Partie.E[X2][Y2]==NULL)
    {
    Partie.E[X2][Y2]=Partie.E[X1][Y1];
    Partie.E[X1][Y1]=NULL;
    }
}

// piece1.h: interface for the piece class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PIECE1_H__C20B9C13_FF3B_4594_946B_ECCDCA333E6F__INCLUDED_)
#define AFX_PIECE1_H__C20B9C13_FF3B_4594_946B_ECCDCA333E6F__INCLUDED_

#include
#include <string.h>

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Piece 
{
    protected :
        int _x;
        int _y;
        char coul;
        char * _nom;
    public:
        piece(int ,int ,char );

        ~Piece(void)
        {
        cout<<"la piece est détruite"<<endl;
        }
       
        int get_x(void){
            return _x;
        }
        void set_x(int x){
            _x=x;
        }
        int get_y(void){
            return _y;
        }
        void set_y(int y){
            _y=y;
        }
        char get_coul(void){
            return coul;
        }
        void set_coul(int color){
            coul=color;
        }

        move(int, int, int, int);

};

#endif // !defined(AFX_PIECE1_H__C20B9C13_FF3B_4594_946B_ECCDCA333E6F__INCLUDED_)

// foutour.cpp: implementation of the foutour class.
//
//////////////////////////////////////////////////////////////////////

#include "foutour.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

// foutour.h: interface for the foutour class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FOUTOUR_H__4FD69585_AEC8_4FE4_9A68_0792BF223008__INCLUDED_)
#define AFX_FOUTOUR_H__4FD69585_AEC8_4FE4_9A68_0792BF223008__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Tour: public Piece{

public:

Tour(int,int,char);

~Tour();

private:

};

class Fou: public Piece{

public:

Fou(int,int,char);

~Fou();

private:

};

class Cavalier: public Piece{

public:

Cavalier(int,int,char);

~Cavalier();

private:

};

class Roi: public Piece{

public:

Roi(int,int,char);
~Roi();

private:

};

class Reine : public Piece{

public :
    Reine(int,int,char);
    ~Reine();

private :

};

class Pion : public Piece{

public :
    Pion(int,int,char);
    ~Pion();

private :

};
#endif // !defined(AFX_FOUTOUR_H__4FD69585_AEC8_4FE4_9A68_0792BF223008__INCLUDED_)

et maintenant voila les rapports d'erreurs :

--------------------Configuration: Echec - Win32 Debug--------------------
Compiling...
piece1.cpp
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(21) : error C2143: syntax error : missing ')' before '.'
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(21) : error C2143: syntax error : missing ';' before '.'
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(21) : error C2059: syntax error : ')'
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(22) : error C2143: syntax error : missing ';' before '{'
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(23) : error C2143: syntax error : missing ';' before '.'
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(23) : error C2143: syntax error : missing ';' before '.'
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(24) : error C2143: syntax error : missing ';' before '.'
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\piece1.cpp(24) : error C2143: syntax error : missing ';' before '.'
foutour.cpp
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\foutour.h(12) : error C2504: 'Piece' : base class undefined
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\foutour.h(25) : error C2504: 'Piece' : base class undefined
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\foutour.h(38) : error C2504: 'Piece' : base class undefined
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\foutour.h(51) : error C2504: 'Piece' : base class undefined
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\foutour.h(63) : error C2504: 'Piece' : base class undefined
c:\documents and settings\mugiw@r@ no luffy\bureau\poo\poo\jglkdfj\echec vv2.2\foutour.h(73) : error C2504: 'Piece' : base class undefined
Error executing cl.exe.

Echec.exe - 14 error(s), 0 warning(s)

Voila vous avez tous les éléments en main pour pouvoir me répondre!!
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
6 avril 2007 à 21:35
#include
#include "joueur.h"
#include "partie.h"
#include "stdlib.h"

#define MAX_JOUEURS 10
#define MAX_PARTIES 5

//variables globales

Joueur* lesJoueurs[MAX_JOUEURS];
Partie* lesParties[MAX_PARTIES];

int main()
{
    system("color 2E");
    int joueur_libre =0;
    int partie_libre =0;
    char * nom=new char [20];
    char * date=new char [20];
    int choice, test;

    test=0;

        while (1)
        {
        cout<<"\t \t \t    Menu"<<endl;
        cout<<"\t\t1 pour creer votre joueur."<<endl;
        cout<<"\t\t2 pour creer votre partie!!"<<endl;
        cout<<"\t\t3 Pour afficher un joueur ^-^."<<endl;
        cout<<"\t\t4 Pour afficher une belle et jolie partie"<<endl;
        cout<<"\t\t5 Suppression d'une partie"<<endl;
        cout<<"\t\t6 Suppression d'un joueur"<<endl;
        cout<<"\t\t7 Affecter un joueur a une partie"<<endl;
        cout<<"\t\t8 Lancement de la partie de votre choix"<<endl;
        cout<<"\t\t9 pour.quitter la partie."<<endl;
        cout<<"\t\t10 pour quitter le jeu."<<endl;
        cout<<"\n";
        cout<<"Entrer votre choix !!!!! :"<<endl;
        cin>>choice;
        cout<<"\n";
        switch (choice)
        {
            case 1:    
                    
                {cout<<"Tapez le nom du joueur"<<endl;
                    cin>>nom;
                    int i=0;
                    while  (i<MAX_JOUEURS)
                    {
                        if(lesJoueurs[i]==NULL) {lesJoueurs[i]= new Joueur(nom); break;}
                        i++;
                    }
                    
                    if (i!=    MAX_JOUEURS) {cout<<"le joueur numero "<<joueur_libre<<" est "<<lesJoueurs[joueur_libre]->getnom()<<" a ete cree"<<endl;
                    
                }
                else
                    cout<<"nombre de joueurs max est atteint, impossible de creer un nouveau joueur"<<endl;
                break;}

            case 2: if (partie_libre< MAX_PARTIES ) {
                    cout<<"Tapez une date jj/mm/yy"<<endl;
                    cin>>date;
                    Partie * partie= new Partie(date);
                    lesParties[partie_libre]= partie;
                    cout<<"la partie numero "<getdate()<<" a ete cree"<<endl;
                    partie_libre=partie_libre+1;

                 }
                else
                    cout<<"nombre de parties max est atteint, impossible de créer une nouvelle partie"<<endl;
                break;

            case 3 :    int saisie;
                        cout <<"Entrez le numero du joueur que vous voulez afficher"<<endl;
                        cin >>saisie;
                        if (lesJoueurs[saisie] != NULL)
                            lesJoueurs[saisie]->afficherJoueur();
                        else
                            cout<<" le joueur n'existe pas"<<'\n';
                        break;
            
            case 4 :    int saisie1;
                        cout <<"Entrez le numero de la partie que vous voulez afficher"<<endl;
                        cin >>saisie1;
                        if (lesParties[saisie1] != NULL)
                            lesParties[saisie1]->afficherPartie();
                        else
                            cout<<"la partie n'existe pas"<<'\n';
                        break;
            
            case 5 :    int number;
                        cout<<"Suppression d'une partie"<<endl;
                        cout<<"Entrer le numéro de la partie"<<endl;
                        cin>>number;
                        if (number < partie_libre) {
                        delete lesParties[number];
                        // si ce n'est pas le dernier
                        if (number < partie_libre -1)
                            lesParties[number]=lesParties[partie_libre -1];
                        lesParties[partie_libre -1]=NULL;
                        partie_libre = partie_libre -1;
                            }
                            break;
                    
            case 6 :    int saisie2;
                        cout <<"Entrez le numero du joueur que vous voulez supprimer"<<endl;
                        cin >>saisie2;
                        if ( saisie2 < joueur_libre ) {
                            delete lesJoueurs[saisie2];
                            //si ce n'est pas le dernier
                            if (saisie2 < joueur_libre - 1) {
                                lesJoueurs[saisie2]=lesJoueurs[joueur_libre - 1];
                            }
                            lesJoueurs[joueur_libre - 1] = NULL;
                            joueur_libre = joueur_libre - 1;
                        }
                        break;
            
            case 7 :
                        int numJoueur;
                        int numPartie;
                        int resultat;
                        cout <<"Entrez le numero de la partie que vous voulez modifier"<<endl;
                        cin >>numPartie;
                        cout <<"Entrez le numero du joueur que vous voulez modifier"<<endl;
                        cin >>numJoueur;
                        resultat=lesJoueurs[numJoueur]->setpartie(* lesParties[numPartie]);
                        switch (resultat) {
                        case 0:  {
                            cout<<"AfFeCtAtIoN rEuSsI "<<'\n';
                            break;
                            }
                        case 1: {
                            cout<<"le joueur participe deja a 5 parties"<<'\n';
                            break;
                                }
                        case 2: {
                            cout<<"la partie a deja 2 joueurs"<<'\n';
                            break;
                                }
                        }
                        break;
            
            case 8:
                    int saisie4;
                    cout <<"Entrez le numero de la partie que vous voulez jouer"<<endl;
                    cin >>saisie4;
                    if (lesParties[saisie4]!=NULL)
                    {
                        lesParties[saisie4]->initechiquier();
                        lesParties[saisie4]->afficherechiquier();
                    }
                    break;                        
                        
            case 9 :
                        int saisie3;
                        cout <<"Entrez le numero de la partie que vous voulez arreter"<<endl;
                        cin >>saisie3;
                        if (saisie3 < partie_libre) {
                            lesParties[saisie3]->terminer();
                        }

                        break;
            
            case 10 :    test = 1;
                        //exit (0);
                        break;
                
            default : cout<<"Erreur, veuillez taper un autre chiffre"<<endl;
        }

}
cin >> nom;
return 0;
}

désolé j'avais oublié le main....
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
7 avril 2007 à 18:21
J'ai retiré la réponse qui avait été accepter car en faite celle-ci ne fonctionne pas il nous reste des erreurs.Je vais d'abord vosu redournir le morceau de code qui pose toujours problème puis les erreurs qui vont avec! :

Piece::move(int X1,int Y1,int X2,int Y2)
    {
    if ((Partie).(E[X2][Y2])=NULL){
        (Partie).(E[X2][Y2])=(Partie).(E[X1][Y1]);
        (Partie).(E[X1][Y1])=NULL;
    }
}

les erreurs :

--------------------Configuration: Echec - Win32 Debug--------------------
Compiling...
piece1.cpp
C:\Documents and Settings\mugiw@r@ no luffy\Bureau\POO\poo\jglkdfj\echec vv2.2\piece1.cpp(23) : error C2059: syntax error : '.'
C:\Documents and Settings\mugiw@r@ no luffy\Bureau\POO\poo\jglkdfj\echec vv2.2\piece1.cpp(23) : error C2143: syntax error : missing ';' before '{'
C:\Documents and Settings\mugiw@r@ no luffy\Bureau\POO\poo\jglkdfj\echec vv2.2\piece1.cpp(24) : error C2059: syntax error : '.'
C:\Documents and Settings\mugiw@r@ no luffy\Bureau\POO\poo\jglkdfj\echec vv2.2\piece1.cpp(25) : error C2059: syntax error : '.'
Error executing cl.exe.

Echec.exe - 4 error(s), 0 warning(s)

Pour le reste de tous les autres codes voir plus haut
0
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
7 avril 2007 à 19:57
mais lol

bon déja ton constructeur de Piece il s'appelle piece(int,int,char)
déja ça me parait bizzare pourquoi il s'appelle pas Piece(int,int,char)

ensuite je n'ai pas vu où tu créais des pieces dans ton code!!!

enfin je te propose une implémentation:

la classe Partie gère les pièces, elle a donc un tableau de Piece* qu'elle initialise dans la fonction initialisation où sinon dans le constructeur
ce tableau de Piece* c'est: Piece *echiquier[8][8];

si echiquier[i][j] = NULL alors la case i j est vide
si echiquier[i][j] != NULL alors echiquier[i][j] pointe vers la pièce qu'il y a à la case i j

chaque Piece a un lien vers la Partie à laquelle elle appartient: un champ
Partie &partie; le constructeur de Piece serait donc Piece(int,int,char,Partie&)
donc si tu veux modifier l'échiquier à partir d'une pièce tu peux faire
partie.echiquier[i][j] = ... // un pointeur vers Piece
pour manger une pièce tu peux faire : delete partie.echiquier[i][j];


chaque joueur a un tableau de pointeurs vers ses différentes Partie, là je suis d'accord avec ton code

a+
0
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
7 avril 2007 à 20:01
ha oui j'oubliais:
la méthode
bool bouger_piece(int i_from, int j_from, int i_dst, int j_dst)
renverrait false si couleur_piece(i_from,j_from) == couleur(i_to,j_to)
et false si echiquier[i][j]->bouger_piece(i_dst,j_dst) est false

echiquier[i][j]->bouger_piece serait une méthode de la classe Piece: une méthode virtuelle pure, et définit différemment dans Tour, Roi, Rein, Pion ...

a+
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
8 avril 2007 à 10:36
// piece.h: interface for the piece class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PIECE1_H__C20B9C13_FF3B_4594_946B_ECCDCA333E6F__INCLUDED_)
#define AFX_PIECE1_H__C20B9C13_FF3B_4594_946B_ECCDCA333E6F__INCLUDED_

#include
#include <string.h>

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Piece  
{
    protected :
        int _x;
        int _y;
        char coul;
        char * _nom;
    public:
        Piece(int ,int ,char);

        ~Piece(void)
        {
        cout<<"la piece est détruite"<<endl;
        }
        
        int get_x(void){
            return _x;
        }
        void set_x(int x){
            _x=x;
        }
        int get_y(void){
            return _y;
        }
        void set_y(int y){
            _y=y;
        }
        char get_coul(void){
            return coul;
        }
        void set_coul(int color){
            coul=color;
        }

        Piece::move(int, int, int, int);

};

#endif // !defined(AFX_PIECE1_H__C20B9C13_FF3B_4594_946B_ECCDCA333E6F__INCLUDED_)

et voila le code de piece.cpp :

// piece1.cpp: implementation of the piece class.
//
//////////////////////////////////////////////////////////////////////

#include "piece1.h"
#include "partie.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction                                         //
//////////////////////////////////////////////////////////////////////

Piece::Piece(int x,int y,char color){   
            set_x(x);
            set_y(y);
            set_coul(color);
   
        }

Piece::move(int X1,int Y1,int X2,int Y2)
    {
    if ((Partie).(E[X2][Y2])=NULL){
        ((Partie).(E[X2][Y2]))=((Partie).(E[X1][Y1]));
        ((Partie).(E[X1][Y1]))=NULL;
    }
}

mais j'ai toujours ces erreurs la :

--------------------Configuration: Echec - Win32 Debug--------------------
Compiling...
piece1.cpp
C:\Documents and Settings\mugiw@r@ no luffy\Bureau\POO\poo\jglkdfj\echec vv2.2\piece1.cpp(21) : error C2059: syntax error : '.'
C:\Documents and Settings\mugiw@r@ no luffy\Bureau\POO\poo\jglkdfj\echec vv2.2\piece1.cpp(21) : error C2143: syntax error : missing ';' before '{'
C:\Documents and Settings\mugiw@r@ no luffy\Bureau\POO\poo\jglkdfj\echec vv2.2\piece1.cpp(22) : error C2059: syntax error : '.'
C:\Documents and Settings\mugiw@r@ no luffy\Bureau\POO\poo\jglkdfj\echec vv2.2\piece1.cpp(23) : error C2059: syntax error : '.'
Error executing cl.exe.

Echec.exe - 4 error(s), 0 warning(s)

et je vois vraiment pas de quoi ca peut venir
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
8 avril 2007 à 10:42
et comment devrais-je déclarer cette méthode virtuelle pure car normalement une méthode virtuelle pure est définit ainsi :

virtual type nom(paramètres) =0;

alors que là ce serais :

E[i][j]->bouger_piece et je vois pas en celà une forme équivalente à celle du dessus!
0
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
8 avril 2007 à 11:50
salut mec

tu aurais dû t'entraîner plus en C++ avant de te lancer dans un projet comme celui là! (qui pourrait très bien être fait en C d'une manière pas plus compliquée, avec un switch(piece.type) par exemple)

en gros voilà ce que je ferais:

class Joueur
{
private:
Partie * parties[5];
public:
Joueur(char * n);
int setpartie(Partie & partie);
Partie * getpartie(int i);
void initialisation();
int arreterpartie(Partie * partie);
virtual ~Joueur(void);
};

class Partie
{
friend class Piece;
private:
int nombre_de_pieces[2];
Joueur &j1;
Joueur &j2;
Piece *echiquier[8][8];
public:
Partie(Joueur &j1,Joueur &j2);
bool move(int x1, int y1, int x2, int y2);
void draw();
void initechiquier();
~Partie();
bool est_terminee();
};
enum { BLANC=0, NOIR=1 };
class Piece
{
protected :
int _x;
int _y;
char coul;
char * _nom;
int equipe;
void *draw_data;
Partie &partie;
public:
piece(int x,int y, int equipe);
~Piece(void);
void get_pos(int *x, int *y);
virtual void move(int x, int y)=0;
int get_equipe();
};

class Tour: public Piece{
public:
Tour(int x,int y, int equipe);
~Tour();
void move(int x, int y);
};

class Fou: public Piece{
public:
Fou(int x,int y, int equipe);
~Fou();
void move(int x, int y);
};

bool Partie::move(int x1, int y1, int x2, int y2) {
if (echiquier[x1][y1]->get_equipe() == echiquier[x2][y2]->get_equipe()) return false;
return echiquier[x1][y1]->move(x2,y2);
}
bool Tour::move(int x, int y) {
if (x != _x && y != _y) return false;
if (partie.echiquier[x][y] != null) {
partie.nombre_de_pieces[equipe]--;
delete partie.echiquier[x][y];
}
partie.echiquier[x][y] = this;
partie.echiquier[_x][_y] = null;
return true;
}
#define VALEUR_ABSOLUE(X) (((X) > 0) ? (X) : - (X))
bool Fou::move(int x, int y) {
if (VALEUR_ABSOLUE(_x - x) != VALEUR_ABSOLUE(_y - y)) return false;
if (partie.echiquier[x][y] != null) {
partie.nombre_de_pieces[equipe]--;
delete partie.echiquier[x][y];
}
partie.echiquier[x][y] = this;
partie.echiquier[_x][_y] = null;
return true;
}

bonne journée
0
Rejoignez-nous