C# Optimisation du code

Inscrit
12 Avril 2017
Messages
72
Reactions
2
#1
Bonsoir, je suis entrain de réaliser un tic tac toe sur Windows Form. Le programme est à sa version 1 :)'() si puis je dire x), enfin bref voila le jeu est fonctionnel mais n'implémente pas encore un système d'IA que je compte faire par la suite. Si je post ce sujet c'est pour savoir comment puis-je améliorer les conditions de victoire de la méthode checkForWinner() :

private void checkForWinner()
{
if ((button1.Text == button2.Text) && (button2.Text == button3.Text) && (button1.Enabled == false))
{
_thereIsAWinner = true;
}
if ((button4.Text == button5.Text) && (button5.Text == button6.Text) && (button4.Enabled == false))
{
_thereIsAWinner = true;
}
if ((button7.Text == button8.Text) && (button8.Text == button9.Text) && (button7.Enabled == false))
{
_thereIsAWinner = true;
}
if ((button1.Text == button4.Text) && (button4.Text == button7.Text) && (button1.Enabled == false))
{
_thereIsAWinner = true;
}
if ((button5.Text == button5.Text) && (button5.Text == button8.Text) && (button5.Enabled == false))
{
_thereIsAWinner = true;
}
if ((button3.Text == button6.Text) && (button6.Text == button9.Text) && (button3.Enabled == false))
{
_thereIsAWinner = true;
}
if ((button1.Text == button5.Text) && (button5.Text == button9.Text) && (button1.Enabled == false))
{
_thereIsAWinner = true;
}
if ((button3.Text == button5.Text) && (button5.Text == button7.Text) && (button3.Enabled == false))
{
_thereIsAWinner = true;
}
if (_thereIsAWinner == true)
{
switch (_player1Turn)
{
case true:
MessageBox.Show("Le joueur numéro 1 (X) à gagné !", "Tic Tac Toe", MessageBoxButtons.OK, MessageBoxIcon.Information);
DisableButtons();
break;
case false:
MessageBox.Show("Le joueur numéro 2 (O) à gagné !", "Tic Tac Toe", MessageBoxButtons.OK, MessageBoxIcon.Information);
DisableButtons();
break;
default:
break;
}
}
}

Les successions de if sont-ils le seul recours ? ou bien y a t-il un autre moyen, de plus malgré avoir fait des recherches je n'arrive pas bien a saisir finalement l'utilité du mot clé : else if ??

Ps : je ne sais pas comment mettre de cache pour le code.:o
 
Inscrit
12 Avril 2017
Messages
72
Reactions
2
#2
Up
 
Inscrit
27 Février 2016
Messages
27
Reactions
0
#3
Ce code est pris sur internet. Qu'elle intêret ?
 
Inscrit
12 Avril 2017
Messages
72
Reactions
2
#4
Ce code est pris sur internet. Qu'elle intêret ?
Peu importe , c est pas la première fois ou je me retrouve avec une succession de if où je ne peux pas switché. De plus il n est pas fifou, il ma juste aidé a allé plus vite sur une méthode c est pas comme si je copie un truc sans le comprendre loin de là. Puis le switch venant après la série de if il n est pas sur internet ou bien je ne l ai pas remarqué .
 
Inscrit
18 Février 2015
Messages
228
Reactions
7
#5
button5.Enabled == false
pour tous les boolean, ça ne se fait pas, utilise ce genre d'expression => if( ! button5.Enabled) pour vérifier si c'est faux et if( button5.Enabled) pour vérifier si c'est vrai
Et pour tout ce qui est nullable, prends l'habitude d'utiliser la méthode Equals car le == si c'est un objet il va vérifier si les références sont les même et non pas les valeurs internes, sauf que là un string peut-être nullable mais comme Microsoft n'a pas fait les chose à moitié ils ont fait en sorte que pour les string il compare les valeurs et non pas les références.
 
Inscrit
12 Avril 2017
Messages
72
Reactions
2
#6
button5.Enabled == false
pour tous les boolean, ça ne se fait pas, utilise ce genre d'expression => if( ! button5.Enabled) pour vérifier si c'est faux et if( button5.Enabled) pour vérifier si c'est vrai
Et pour tout ce qui est nullable, prends l'habitude d'utiliser la méthode Equals car le == si c'est un objet il va vérifier si les références sont les même et non pas les valeurs internes, sauf que là un string peut-être nullable mais comme Microsoft n'a pas fait les chose à moitié ils ont fait en sorte que pour les string il compare les valeurs et non pas les références.
Merci
 
Haut Bas