moi je ferais une fonction qui te génère un tableau des gagnants mais pour les 2 couleurs.
genre
position gagnant[3][nbg][3][3];
gagnant_generate( * gagnant); <- fait une fois au début du jeu.
eval ( position tab[3][3], position gagnant[nbg][3][3])
{
for (i = 0;i<nbg;i++)
if(!!memcomp(tab,gagnant[0][i]))
return (0);
for (i = 0;i<nbg;i++)
if(!!memcomp(tab,gagnant[1][i]))
return (1);
for (i = 0;i<nbg;i++)
if(!!memcomp(tab,gagnant[2][i]))
return (3);
}
C'est plus bourrin mais plus linéaire. Cela devrait être le code le plus rapide et de loin. Si tu veux encore plus te faire chier, tu codes l'info sur 2 bits, un tableau de jeux tient sur 18 bits et la fontion memcomp est un simple teste d'égalité sur un entier de 32 bits.
[^] # Re: Optimisation des tests pour un morpion.
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Optimisation des tests pour un morpion.. Évalué à 1.
genre
position gagnant[3][nbg][3][3];
gagnant_generate( * gagnant); <- fait une fois au début du jeu.
eval ( position tab[3][3], position gagnant[nbg][3][3])
{
for (i = 0;i<nbg;i++)
if(!!memcomp(tab,gagnant[0][i]))
return (0);
for (i = 0;i<nbg;i++)
if(!!memcomp(tab,gagnant[1][i]))
return (1);
for (i = 0;i<nbg;i++)
if(!!memcomp(tab,gagnant[2][i]))
return (3);
}
C'est plus bourrin mais plus linéaire. Cela devrait être le code le plus rapide et de loin. Si tu veux encore plus te faire chier, tu codes l'info sur 2 bits, un tableau de jeux tient sur 18 bits et la fontion memcomp est un simple teste d'égalité sur un entier de 32 bits.
"La première sécurité est la liberté"