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

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:51
if (partie.echiquier[x][y] != null) {
partie.nombre_de_pieces[equipe]--;
delete partie.echiquier[x][y];
}

ce if veut dire il y a une pièce à la case x,y donc il faut la manger
(avec un delete)
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
8 avril 2007 à 15:56
merci de ton aide mais c'est pas que je me serais pas plus entrainé avant mais c'est un projet qu'on a eu à faire en cours à l'IUT en C++ alors que l'on n'avait que très peu manipulé le C++ mais bon on se débrouille comme on peut c'est ça qu'est bein dans la programmation, l'entraide entre les genset le fait de découvrir des nouvelle choses tous les jours.

merci à toi,

cordialement, shinohinata
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
8 avril 2007 à 16:22
Il me dit que dans mes relations d'héritage ma classe Piece est : base class undefined et je me souviens plus comment on résout le problème je l'ai déja eu hier et je l'avais résolu mais j'ai pas percuté comment lol e tdu coup j'ai oublié!!
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
8 avril 2007 à 17:17
j'ai un dernier petit probleme lol après je n'embete plus personne :

'E' : cannot access private member declared in class 'Partie' il me met encore ce message d'erreur... partout ou j'utilise le tableau...
0

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

Posez votre question
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
8 avril 2007 à 17:36
A toute les déclarations m'ont remis des erreurs j'y arrive pas!!!
Quel horreur... j'arrive pas à faire les déclaration de move il me dit que E est dans une partie privée....
Si je modifie en écrivant cela :
bool Piece::move(int x, int y) {
if (x != _x && y != _y)
    return false;
if (partie.E[x][y] != NULL) {
    partie.nombre_de_pieces[equipe]--;
    delete partie.E[x][y];
}
partie.E[x][y] = this;
partie.E[_x][_y] = NULL;
return true;
}
dans le tour.cpp ca m'enleve des erreurs mais il me dit que cette déclaration n'est pas valable...

 et si j'écris ca comme cela :
bool Tour::move(int x, int y) {
if (x != _x && y != _y)
    return false;
if (partie.E[x][y] != NULL) {
    partie.nombre_de_pieces[equipe]--;
    delete partie.E[x][y];
}
partie.E[x][y] = this;
partie.E[_x][_y] = NULL;
return true;
}
et que je met celà dans la classe pièce :

        virtual void Piece::move(int, int)=0;
ben ca met moins d'erreurs mais le meme message que celle d'avant...

J'y comprends plus rien...
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
8 avril 2007 à 17:36
A toute les déclarations m'ont remis des erreurs j'y arrive pas!!!
Quel horreur... j'arrive pas à faire les déclaration de move il me dit que E est dans une partie privée....
Si je modifie en écrivant cela :
bool Piece::move(int x, int y) {
if (x != _x && y != _y)
    return false;
if (partie.E[x][y] != NULL) {
    partie.nombre_de_pieces[equipe]--;
    delete partie.E[x][y];
}
partie.E[x][y] = this;
partie.E[_x][_y] = NULL;
return true;
}
dans le tour.cpp ca m'enleve des erreurs mais il me dit que cette déclaration n'est pas valable...

 et si j'écris ca comme cela :
bool Tour::move(int x, int y) {
if (x != _x && y != _y)
    return false;
if (partie.E[x][y] != NULL) {
    partie.nombre_de_pieces[equipe]--;
    delete partie.E[x][y];
}
partie.E[x][y] = this;
partie.E[_x][_y] = NULL;
return true;
}
et que je met celà dans la classe pièce :

        virtual void Piece::move(int, int)=0;
ben ca met moins d'erreurs mais le meme message que celle d'avant...

J'y comprends plus rien...
0
shinohinata01 Messages postés 18 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 8 avril 2007
8 avril 2007 à 17:36
dsl pour le double post...
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
8 avril 2007 à 17:37
pour la classe indéfinie, vérifie qu'elle est déclarée avant les classes qui en héritent;
pour le tableau inaccessible, tu mets public: justeau dessus de la déclaration dans la classe Partie (pas très propre, faudrait déclarer les fonctions qui utilisent E friend, mais bon...)
0
Rejoignez-nous