Plantouillage à l'execution
Bonjour à tous!
Je débarque ici pour la première fois, c'est en fait parceque j'ai besoin d'aide. J'avais commencé à programmer un logiciel qui jouerait au mini-shôgi (echecs japonais), sans aucun souci, jusqu'au moment où, après 2000 lignes de codes tapées j'ai voulu faire quelques tests, et là, malgré une compilation impeccable, l'execution du programme génère une erreur windows ("CrazyShogi.exe a rencontré un problème et doit maintenant fermer, envoyer ou non un rapport à microsoft etc...").
J'ai réussi à isoler l'erreur, qui se situe dans la procédure 'Position_Roi', et à la reporter dans un programme miniature que voici, pour lequel je n'ai toujours aucune erreur de compilation, mais dont l'execution génère toujours la même erreur ; quelqu'un pourrait-il m'aider à comprendre l'origine de cette erreur? Je suis sous Windows XP. J'ai copié les fichiers sources sur un autre ordinateur, tournant sous Windows Vista, où j'ai recompilé, mais le programme plante toujours de la même façon :
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
| #include <iostream>
using namespace std;
const int COLONNES=5;
const int LIGNES=5;
struct liste_coordonnees
{
int coord[12];
int nb;
};
typedef int plateau[COLONNES][LIGNES];
struct jeu
{
plateau partie;
plateau controles;
double evalpos_joueur1;
bool MAT;
};
void Decompresser_Coord(int coord, int &i, int &j)
{
i = coord/10;
j = coord - (10*i);
}
void Initialiser_Coord(liste_coordonnees& adj1, liste_coordonnees& adj2)
{
adj1.coord[0]=1;
adj1.coord[1]=2;
adj1.coord[2]=10;
adj2.coord[0]=43;
adj2.coord[1]=33;
adj2.coord[2]=34;
adj1.nb=3;
adj2.nb=3;
}
void Initialiser_Partie(jeu& partie)
{
//Pieces du joueur 1
partie.partie[0][0]=1; // Le roi du joueur 1 est repéré par le chiffre 1
partie.controles[0][1]=1;
partie.controles[1][1]=1;
partie.controles[1][0]=1;
//Pieces du joueur 2
partie.partie[4][4]=-1; // La roi du joueur 2 est repéré par le chiffre -1
partie.controles[4][3]=-1;
partie.controles[3][3]=-1;
partie.controles[3][4]=-1;
}
void Position_Roi(jeu& partie) //Procédure sensée evaluer la position du roi
{
int eval1=0; // Evaluation de la position du roi pour le joueur 1 (compté positivement)
int eval2=0;// Evaluation de la position du roi pour le joueur 2 (compté négativement)
int k, l;
liste_coordonnees adj1; //Coord des cases adjacantes au roi du joueur 1
liste_coordonnees adj2; //Coord des cases adjacantes au roi du joueur 2
Initialiser_Coord(adj1, adj2); //Initialisation des listes de coordonnees
//Application de la formule, définie arbitrairement, afin d'évaluer la position du roi :
for(int i=0 ; i < adj1.nb ; i++)
{
Decompresser_Coord(adj1.coord[i], k, l);
eval1+=(partie.controles[k][l]+(partie.partie[k][l]/abs(partie.partie[k][l])));
}
for(int i=0 ; i < adj2.nb ; i++)
{
Decompresser_Coord(adj2.coord[i], k, l);
eval2+=((partie.controles[k][l])+(partie.partie[k][l]/(abs(partie.partie[k][l]))));
}
eval1=eval1/adj1.nb;
eval2=eval2/adj2.nb;
//Mise à jour de la valeur de la position du joueur 1
partie.evalpos_joueur1 = partie.evalpos_joueur1 + eval1 + eval2;
}
int main()
{
jeu nouveau;
Initialiser_Partie(nouveau);
Position_Roi(nouveau);
cout<<nouveau.evalpos_joueur1;
} |
balises [code] rajoutées par r0d. Merci d'y penser dorénavant.