Lire un plateau à partir d'un fichier et l'afficher
Bonjour je suis entrain de réaliser un jeu de plateau,
le plateau qui est rectangulaire est stocké dans un fichier qui contient deux entiers designant les nombre de lignes et de colonnes. puis sous forme de matrice, il y a des entiers qui une fois transformés en binaire indique la nature des pions qui s'y trouvent.
voilà un exemple de fichier
Citation:
6 6
21 21 21 21 21 21
21 2 2 2 2 21
5 2 0 0 2 5
5 2 0 0 2 5
29 2 2 2 2 29
29 29 29 29 29 29
J'ai un problème pour lire le plateau à partir du fichier pour ensuite l'afficher. Je crois que le problème vient plutot de l'opérateur de lecture.
la structure de données est dans une classe Plateau comme ceci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| #include <fstream>
#include <vector>
#include <iostream>
#include "Coup.h"
using namespace std;
class Plateau {
private:
//plateau représenté par un vecteur de vecteurs
vector<vector<int> > v;
typedef pair<int,int> Position;
//liste des positions
typedef vector<Position> Listepositions;
//liste des coups
typedef vector<Coup> Listedescoups;
// dimensions
int nblignes, nbcolonnes;
public:
// constructeurs
Plateau() {}
Plateau(int a,int b, vector<vector<int> > vect) {
nblignes = a;
nbcolonnes = b;
v = vect;
}
//selecteurs et accesseurs
void setnblignes(int val) {
nblignes = val;
}
void setnbcolonnes(int val) {
nbcolonnes = val;
}
int getnblignes() const {
return nblignes;
}
int getnbcolonnes() const {
return nbcolonnes;
}
void setmatrice(vector<vector<int> > matrice){
v = matrice;
}
vector<vector<int> > getmatrice() const {
return v;
}
//opérateurs
friend ostream& operator << (ostream& o, const Plateau& p);
friend istream& operator >> (istream& i, Plateau& p); |
voilà le codage des opérateurs "ostream" et "istream"
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| //afficher le plateau
ostream& operator << (std::ostream& o, const Plateau& p) {
vector<vector<int> > v = p.getmatrice();
vector<vector<int> >::const_iterator it1;
vector<int>::const_iterator it2;
int m = p.getnblignes();
int n = p.getnbcolonnes();
o << m << ' ' << n << endl;
it1 = p.v.begin();
while (it1!=p.v.end()) {
it2 = (*it1).begin();
while (it2!=(*it1).end()) {
o << *it2;
++it2;
}
o << endl;
++it1;
}
}
// lire le plateau a partir d'un fichier
istream& operator >> (std::istream& i, Plateau& p) {
int lignes, colonnes; vector<vector<int> > mat;
int valcourante;
i>>lignes;
p.setnblignes(lignes);
i>>colonnes;
p.setnbcolonnes(colonnes);
int n = lignes;
int m = colonnes;
mat.resize(n*m);
for (int i=0; i<n; ++i) {
//p.v[i].resize(colonnes);
for (int j=0; j<m; ++j) {
i>>valcourante;
mat[i][j] = valcourante;
}
}
p.setmatrice(mat);
} |
J'ai essayé plusieurs fois mais je n'arrive pas à l'afficher .
voiçi l'erreur qu'il me donne
Citation:
*** glibc detected *** free(): invalid next size (fast): 0x08062350 ***
Abort
est ce que vous avez une idée pour me sortir de là 8O
merci