Bonsoir à tous.

On doit coder un bomberman pour un projet scolaire.

J'ai un problème de m**** qui me rend ouf, j'arrive pas à le résoudre. Mon programme se lance mais il plante direct (Bomberman.exe a cessé de fonctionner blabla blabla).

Je vous met les bouts de code où ça semble posé problème et je vous dis ensuite d'où ça viens plus précisément :
Map.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
void Map::setBlocks() {
    for(int i=0; i < NBR_BLOC_WIDTH; i++) {
        for(int j=0; j < NBR_BLOC_HEIGHT; j++) {
            blocks[i][j] = new Block(getThisMap(), Position(j,i));
        }
    }
}
Block.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Block::Block(Map* _map, Position _position) {
    setMap(_map);
    setEngine(getMap()->getEngine());
    setPosition(_position);
    setIsBonus((rand()%3)+1);
 
    char c = getMap()->getBlock(getPosition());
    switch(c) {
        case '#':
            setBlockType(bWall);
            setBlockSurface(getEngine()->loadImg("image/map/border.gif"));
            break;
        case ' ':
            setBlockType(bFloor);
            setBlockSurface(getEngine()->loadImg("image/map/passable.gif"));
            break;
        case 'D':
            setBlockType(bDestructible);
            setBlockSurface(getEngine()->loadImg("image/map/destructible.gif"));
            break;
        case 'I':
            setBlockType(bIndestructible);
            setBlockSurface(getEngine()->loadImg("image/map/indestructible.gif"));
            break;
        default:
            setBlockType(bNone);
            break;
    }
 
    if (getIsBonus()==1 && getPosition().getX()>=0 && getPosition().getX()<getMap()->getDimX() && getPosition().getY()>=0
        && getPosition().getY()<getMap()->getDimY() && getBlockType()==bDestructible) {
        setBonus(new Bonus(this));
    } else {
        setBonus(new Bonus());
    }
}
Le problème semble venir de cette ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
char c = getMap()->getBlock(getPosition())
dans Block.cpp (quand je la met en commentaire et que je met une condition bidon pour mon switch, mon programme fonctionne correctement).

Dans mon main j'ai fais quelque test pour voir si mon tableau de block s'initialise bien, pas de soucis de ce coté, d'ailleurs j'arrive à récupérer leurs position, et j'arrive bien à utiliser la méthode
Code none : Sélectionner tout - Visualiser dans une fenêtre à part
map.getBlock(map.getBlocks()[i][j]->getPosition())

Quand j'utilise le déboggeur, j'ai l'impression que mon programme plante dès qu'on arrive au valeur i=1 et j=0 (dans mon Map.cpp, méthode setBlocks())

Voilà voilà, merci d'avance a ceux qui essayeront de m'aider ^^'