[C++] réassignement de pointeur
Résolu/Fermé
Sigel
Messages postés
6
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
20 janvier 2011
-
20 janv. 2011 à 21:15
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 20 janv. 2011 à 22:33
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 20 janv. 2011 à 22:33
A voir également:
- [C++] réassignement de pointeur
- Pointeur souris - Guide
- Pointeur souris disparu windows 10 - Guide
- Pointeur souris disparu pc portable asus - Guide
- Pointeur satellite astra gratuit - Forum TNT / Satellite / Réception
- Pointeur satellite fransat ✓ - Forum TNT / Satellite / Réception
5 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
20 janv. 2011 à 21:34
20 janv. 2011 à 21:34
Ca à l'air bon. Tu pourrais poster le code en entier?
Sigel
Messages postés
6
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
20 janvier 2011
20 janv. 2011 à 21:59
20 janv. 2011 à 21:59
voilà le code tel qu'il est écrit...je vais éviter d'écrire la totalité de mon code source ca prendrai des pages et des pages...tout ce qui à une importance est là. La méthode Piece::tesbouger fonctionne est n'est là que pour le vérifier que le déplacement de la pièce est en accord avec les régles.
Chessboard::Chessboard() : m_blanc("blanc"), m_noir("noir") { for(int i=0;i<=7;i++) { for(int j=0;j<=7;j++) { switch(j) { case 0: { switch(i) { case 0: { m_chessboard[i][j] = new Tour(i,j,"blanc"); break; } case 1: { m_chessboard[i][j] = new Cavalier(i,j,"blanc"); break; } case 2: { m_chessboard[i][j] = new Fou(i,j,"blanc"); break; } case 3: { m_chessboard[i][j] = new Dame(i,j,"blanc"); break; } case 4: { m_chessboard[i][j] = new Roi(i,j,"blanc"); break; } case 5: { m_chessboard[i][j] = new Fou(i,j,"blanc"); break; } case 6: { m_chessboard[i][j] = new Cavalier(i,j,"blanc"); break; } case 7: { m_chessboard[i][j] = new Tour(i,j,"blanc"); break; } } break; } case 1: { m_chessboard[i][j] = new Pion(i,j,"blanc"); break; } case 6: { m_chessboard[i][j] = new Pion(i,j,"noir"); break; } case 7: { switch(j) { case 0: { m_chessboard[i][j] = new Tour(i,j,"noir"); break; } case 1: { m_chessboard[i][j] = new Cavalier(i,j,"noir"); break; } case 2: { m_chessboard[i][j] = new Fou(i,j,"noir"); break; } case 3: { m_chessboard[i][j] = new Dame(i,j,"noir"); break; } case 4: { m_chessboard[i][j] = new Roi(i,j,"noir"); break; } case 5: { m_chessboard[i][j] = new Fou(i,j,"noir"); break; } case 6: { m_chessboard[i][j] = new Cavalier(i,j,"noir"); break; } case 7: { m_chessboard[i][j] = new Tour(i,j,"noir"); break; } } break; } default: { m_chessboard[i][j] = NULL; } } } } } void Chessboard::bougerPiece(int x1, int y1, int x2, int y2) { Piece* pieceABouger = Chessboard::getPiece(x1,y1); if(pieceABouger->testbouger(x2,y2)) { setPiece(x2, y2, pieceABouger); m_chessboard[x1][y1] = NULL; } } Piece* Chessboard::getPiece(int x, int y) { return m_chessboard[x][y]; } void Chessboard::setPiece(int x, int y, Piece *cible) { m_chessboard[x][y] = cible; }
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
20 janv. 2011 à 22:06
20 janv. 2011 à 22:06
Et du coup il plante comment ton programme? Ca fait un segfault ou?
Sigel
Messages postés
6
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
20 janvier 2011
20 janv. 2011 à 22:21
20 janv. 2011 à 22:21
j'utilise ce code pour afficher:
lorsque j'affiche pour la première fois sans avoir bouger de pièce le programme fonctionne. Quand il essaie à nouveau d'afficher après avoir bouger les pièces , au moment ou il essaie d'afficher une des case qui a changé, le programme ne répond plus du tout. (fenêtre windows: JeuEchec.exe has stoppend working)
si j'enlève les lignes de bougerPiece
alors le programme ne freeze plus...mais bien sur mes pièces ne bougent pas :p
void Jeu::afficher() { cout<<"y"<<endl; for(int j=0;j<=7;j++) { cout<<endl; cout<<7-j<<" "; for(int i=0;i<=7;i++) { if(m_echiquier.getPiece(7-i, j)!=NULL) { cout<<" "<<m_echiquier.getPiece(i, 7-j)->getNom()<<" "; }else { cout<<" "; } } cout<<endl; } cout<<endl; cout<<" 0 1 2 3 4 5 6 7 x"<<endl; }
lorsque j'affiche pour la première fois sans avoir bouger de pièce le programme fonctionne. Quand il essaie à nouveau d'afficher après avoir bouger les pièces , au moment ou il essaie d'afficher une des case qui a changé, le programme ne répond plus du tout. (fenêtre windows: JeuEchec.exe has stoppend working)
si j'enlève les lignes de bougerPiece
setPiece(x2, y2, pieceABouger); m_chessboard[x1][y1] = NULL;
alors le programme ne freeze plus...mais bien sur mes pièces ne bougent pas :p
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
Modifié par kilian le 20/01/2011 à 22:28
Modifié par kilian le 20/01/2011 à 22:28
Ici:
Tu vérifies que getPiece(7-i, j) existe, mais tu sembles plutôt interessé par getPiece(i, 7-j), n'est ce pas? L'un peut être NULL, l'autre peut ne pas l'être.
if(m_echiquier.getPiece(7-i, j)!=NULL) { cout<<" "<<m_echiquier.getPiece(i, 7-j)->getNom()<<" "; }
Tu vérifies que getPiece(7-i, j) existe, mais tu sembles plutôt interessé par getPiece(i, 7-j), n'est ce pas? L'un peut être NULL, l'autre peut ne pas l'être.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sigel
Messages postés
6
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
20 janvier 2011
20 janv. 2011 à 22:30
20 janv. 2011 à 22:30
...oh mon dieu...j'ai relu cette partie des dizaines de fois sans le voir...merci mille fois!!!
en effet mon porgramme fonctionne maintenant.
en effet mon porgramme fonctionne maintenant.
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
20 janv. 2011 à 22:33
20 janv. 2011 à 22:33
:-)