Salut
Comme dit précédemment, utilise la même méthode pour tous tes boutons.
Quelques petites optimisations cependant :
if (tour 1 || tour 3 || tour == 5...)
peut être remplacé par
if (tour % 2 == 1)
// Si le reste de la division euclidienne de tour par 2 est égale à 1
// Donc si tour est impair
De plus, plutôt que de créer une à une tes cases, tes boutons... il vaut largement mieux les placer dans un tableau, à deux dimensions.
Ensuite, je vois que tous les cX sont des string, mais qui n'ont comme valeur que "croix", "rond" et une troisième ("" ou "vide" ou je-ne-sais-quoi). C'est l'occasion rêvée de faire un enum plutôt qu'un string. C'est facile, c'est rapide, c'est pratique, c'est léger.
enum EtatCase
{
vide,
croix,
rond
}
Egalement, tu fais des tests sur, en l'occurrence, c3 pour voir si le joueur a gagné. Seulement, tu définis la valeur de c3 juste avant. Donc inutile de retester la case.
Enfin, je ferais une fonction de vérification de victoire plus travaillée que tester chaque solution manuellement.
C'est peut-être plus long, mais c'est beaucoup plus évolutif. Ma solution fonctionne pour un morpion simple, pour un plus grand plateau, pour plus de pions à aligner...
// x et y correspondent aux coordonnées de la dernière case sur laquelle on a joué.
bool aGagne(int x, int y)
{
if (compteAlignes(x, y, 1, 0) >= nbPourVictoire // Horizontal
|| compteAlignes(x, y, 0 , 1) >= nbPourVictoire // Vertical
|| compteAlignes(x, y, 1 , 1) >= nbPourVictoire // Diagonale1
|| compteAlignes(x, y, 1 , -1) >= nbPourVictoire) // Diagonale2
{
// Le joueur courant a gagné.
}
}
int compteAlignes(int x, int y, int dX, int dY)
{
int nbAlignes = 1;
EtatCase etat = c[x, y];
// Dans un sens
for (int i = 1; x - i * dX >= 0 &&
y - i * dY >= 0 &&
y - i * dY < largeurGrille &&
x - i * dX < largeurGrille &&
c[x - i * dX, y - i * dY] == etat; i++)
{
nbAlignes++;
}
// Dans l'autre
for (int i = 1; x + i * dX >= 0 &&
y + i * dY >= 0 &&
x + i * dX < largeurGrille &&
y + i * dY < largeurGrille &&
c[x + i * dX, y + i * dY] == etat; i++)
{
nbAlignes++;
}
}
Attention que là, j'ai considéré que tu avais mis l'état de tes cases dans un tableau à deux dimensions de EtatCase.
Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -