Deux pointeurs sur une meme classe dans deux classe differentes

Signaler
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018
-
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018
-
Bonjour, apres un mois d'absence me revoila avec mes problemes malheureusement.

Alors je vous explique, j'ai un jeu a programmé avec une architecture modele/vue (donc classe modele et classe vue) + une autre classe, une classe cellule (avec une matrice, un nombre de lignes et de colonnes).

La vue et le modele ont chacun un pointeur sur la classe cellule mais :
- quand l'utilisateur via un bouton incremente le nombre de lignes ou colonnes (donc par la classe vue), la classe cellule (ou du moins l'entite mais je simplifie car j'en ai marre (2 semaines que sa traine et je viens juste de m'en apercevoir) ), la vue s'incremente bien (car j'utilise des accesseurs) et la classe cellule aussi mais pas le modele qui reste fixé au nombre du depart qui est dans le constructeur de cellule.

- aussi ma matrice de cellule est initialisée a faux via ce code :

vector<vector > _matrice_cellules_T; // declaration dans cellule.h
_matrice_cellules_T.resize(_nb_lignes, vector(_nb_colonnes, false));


la vue et l'entite de la classe cellule recoit bien 0 partout (je le vois par l'affichage et la sauvegarde de la matrice dans un fichier texte) mais ce fameux modele me joue encore des tours car lui recoit 1 partout (je l'ai vu car j'ai fait un cout<< et j'ai aussi fait appel a la MEME fonction sauvegarde qui est toujours dans la classe cellule).

Autrement dit le modele qui utilise les memes accesseurs que la vue n'en fait qu'a sa tete.

voici quelques accesseurs de la classe cellule :
//fonction appelée par la vue pour le dessin si renvoi faux on dessine pas de cellule dans cette case sinon une cellule apparait (comme par magie )
bool Cellule::getValeurMatrice(int i, int j)
{
return _matrice_cellules_T[i][j];
}

// les deux suivantes sont appelées par la vue (dans la meme fonction que celle du dessus aussi pour savoir quand arreter de dessiner)
int Cellule::getNBCOLONNES()
{
return _nb_colonnes;
} 

int Cellule::getNBLIGNES()
{
return _nb_lignes;
}

//de la meme facon les accesseurs en ecriture appele par la vue lors du clique pour ajouter ou enlever une ligne ou colonne
void Cellule::setNBLIGNES(int nb)
{
_nb_lignes = nb;
}

void Cellule::setNBCOLONNES(int nb)
{
_nb_colonnes = nb;
}


J'espere que vous allez m'aider a ne pas peter un boulon et surtout a comprendre mes erreurs

Merci a tous par avance,
Cyril Z.

1 réponse

Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

J'ai failli oublié, j'utilise la sfml et le c++ et aussi apres le redimensionnement de la matrice je fait appel a cette fonction toujours par la vue et la fonction se trouve dans cellule.cc
oid Cellule::resizeMatrice(string quoi, bool ligne)
{	
cout<<"Pour la classe cellule il y a "<<_nb_lignes<<" lignes et "<<_nb_colonnes<<" colonnes"<<endl;
int i;
int j;

if(ligne)
{			
if(quoi == "+")
{	
_nb_lignes++;
_matrice_cellules_T.resize(_nb_colonnes, vector(_nb_lignes));
_matrice_cellules_T_1.resize(_nb_colonnes, vector(_nb_lignes));
_matrice_cellules_resistantes_T.resize(_nb_colonnes, vector(_nb_lignes,false));
j = (_nb_lignes - 1);

for(i=0; i < _nb_colonnes; i++)
{
_matrice_cellules_T[i][j] = false; // on met toutes les cases de la ligne créée a faux (on fait varier la colonne)
}
}
else
{
j = (_nb_lignes - 1);
for(i=0; i < (_nb_colonnes); i++)
{
_matrice_cellules_T[i][j] = false; // sur l'ancienne taille
}
_nb_lignes--;
_matrice_cellules_T.resize(_nb_colonnes, vector(_nb_lignes));
_matrice_cellules_T_1.resize(_nb_colonnes, vector(_nb_lignes));
_matrice_cellules_resistantes_T.resize(_nb_colonnes, vector(_nb_lignes,false));
}
}
else //colonne
{
if(quoi == "+")
{	
_nb_colonnes++;
_matrice_cellules_T.resize(_nb_colonnes, vector(_nb_lignes));
_matrice_cellules_T_1.resize(_nb_colonnes, vector(_nb_lignes));
_matrice_cellules_resistantes_T.resize(_nb_colonnes, vector(_nb_lignes,false));
i = _nb_colonnes - 1;

for(j = 0; j < (_nb_lignes); j++)
{
_matrice_cellules_T[i][j] = false;// on met toutes les cases de la colonne créée a faux (on fait varier la ligne)
}
}
else // "-"
{
i = _nb_colonnes - 1;
for(j = 0; j < (_nb_lignes); j++)
{
_matrice_cellules_T[i][j] = false; // sur l'ancienne taille
}
_nb_colonnes--;
_matrice_cellules_T.resize(_nb_colonnes, vector(_nb_lignes));
_matrice_cellules_T_1.resize(_nb_colonnes, vector(_nb_lignes));
_matrice_cellules_resistantes_T.resize(_nb_colonnes, vector(_nb_lignes,false));
}
}
}


Par la meme occasion quand j'ajoute des colonnes et qu'il y a moins de lignes, ma matrice disjoncte et m'affiche de nouvelles cellules mais pas sur toute la ligne ou colonne mais a quelques endroits (et apres verification elle les cases concernées sont a true dans la matrice)

Cyril Z.