• # Re: Optimisation des tests pour un morpion.

    Posté par . En réponse au journal Optimisation des tests pour un morpion.. Évalué à 3.

    Bon ben voila ce que je ferais dans ton cas.
    Chaque grille peut etre codee dans un entier. L'occupation de chaque case est codee sur 2 bits: 00 vide, 01 croix et 10 rond. Ensuite a chaque case est associee un decalage:
    0 2 4
    6 8 10
    12 14 16
    Pour regarder l'occupation d'une case, il te suffit de faire l'operation sur l'entier [grille] qui definit la grille:
    ([grille] >> decalage) & 0x3


    Pour regarder si une grille est gagnante:

    Tu calcules toutes les combinaisons gagnantes pour les croix.
    Par exemple, 0x15 est la combinaison pour la ligne horizontale passant par les cases du haut.

    Celles pour les ronds s'obtiennent par un simple decalage de 1 vers la gauche des conbinaisons gagnantes pour les croix.

    Au final il faut juste faire une methode qui a partir d'un etat te dit si la grille est gagnante pour les croix en faisant une serie de if du type

    if (([etat] & 0x15) != 0)
    return true

    et tu passes [etat] a ta methode pour tester la victoire des croix et [etat] >> 1 pour tester la victoire des ronds.