Bonsoir,
bon et bien je crois que c'est fait...
Voici donc la structure finale de mon AI, AI qui ne va qu'à un niveau de profondeur... Mais c'est bien comme cela, car cela donne une chance au joueur Humain !
Quand c'est à l'Ai de jouer :
1 - il vérifie dans toutes les combinaisons (12 diagonales "à droite"; 12 diagonales "à gauche"; 21 verticales; 24 horizontales) où en jouant il a le gain de la partie. Si c'est le cas il joue pour gagner sinon :
2 - il vérifie dans toutes les combinaisons s'il y a une possibilité pour l'Humain de gagner au prochain tour, si c'est le cas il joue pour bloquer, sinon :
3 - il vérifie toutes les combinaisons par "deux cellules identiques" de jetons de l'Humain pour trouver éventuellement une cellule à jouer pour éviter la création au tour suivant d'une combinaison de trois jetons pour l'Humain, il joue alors d'un coté ou de l'autre de ces deux jetons afin de bloquer l'adversaire, Mais c'est là que l'Ai fait sont travail : il vérifie avant de jouer que ce jeu n'engendre pas une victoire immédiate de l'humain, si ce n'est pas le cas, il joue pour bloquer, sinon :
4 - il vérifie toutes les combinaisons par "deux cellules identiques" de jetons de l'AI pour trouver éventuellement une cellule à jouer pour la création d'une combinaison de trois jetons pour lui même, il joue alors d'un coté ou de l'autre de ces deux jetons afin d'attaquer l'adversaire, Mais c'est là que l'Ai fait sont travail : il vérifie avant de jouer que ce jeu n'engendre pas une victoire immédiate de l'humain, si ce n'est pas le cas, il joue pour aller en direction d'une victoire, sinon :
5 - il boucle les 1 à 7 possibilités de jeu (une par colonne "ouverte") et donne une "valeur" à la colonne jouable en fonction que celle-ci engendre une victoire immédiate à l'adversaire, ou bien une possibilité de victoire immédiate pour l'AI ou bien rien du tout.
Si victoire à l'adversaire, la colonne testée est égale en valeur à son numéro de colonne x par -1, si c'est une victoire immédiate au tour suivant pour l'AI, la valeur de la colonne vaut son numéro de colonne x par 100, sinon la colonne ne vaut que son numéro de colonne.
Tous ces tests sont enregistrées dans un tableau. Le code scanne le tableau afin de trouver une valeur potentiellement supérieur à 100 et la joue.
S'il n'y a pas de valeur supérieur à 100 alors :
6 - un tableau est remplit avec le numéros des colonnes qui ne sont pas négatives afin de faire un tirage "au sort" de la colonne qui sera jouée.
7- si après tout ces test on arrive au point 7, alors une colonne parmi toutes celles qui sont ouvertes est tirée au hasard quel qu'en soit la conséquence, car il faut bien jouer...
Voilà, le code pourrait être plus sophistiqué, mais je crois que je suis arrivé à "mon maximum" dans l'AI !
Pour connaître s'il y a victoire un système de formules basées sur STXT est ESTERREUR, car sur une ligne horizontale, pour savoir s'il y a un gagnant il suffit de trouver en format "TEXTE" une combinaison de 4 caractères identiques et consécutifs :
si on trouve "2222" dans la ligne "0202222" il y a bien un gagnant et c'est le joueur 2
Ce qui nous fait une série de 6 tests pour les lignes, 7 tests pour les colonnes et 12 tests pour les diagonales (6 dans un sens et 6 de l'autre)
Voilà, reste plus qu'à peaufiner ce qu'il y a autour et le réhabilitation de la page de dépôt des applications
Si un truc : comment lancer de façon aléatoire l'ordre de différent modules de tests ?
En effet, pour le moment c'est écrit "dans le marbre" : je vérifie les lignes, puis les diagonales vers la droite, puis celles vers la gauche et je termine par les colonnes.
Pour avoir une façon de jouer "imprévisible" il faudrait pouvoir faire ces tests dans un ordre quelconque à chaque tour de jeu, comme cela il serait difficile de "tendre" des pièges à l'AI car j'avoue y arriver de temps en temps du fait que les tests soient dans le même ordre et qu'ils s'arrête dès qu'une condition 'est bonne". C'est un points d'amélioration.
Un deuxième serait de faire les test en fonction du nombre de coup jouer, car pour une diagonale il faut un minimum de 9 jetons déjà joués, tout comme pour une ligne horizontale où il faut au moins 7 jetons etc...
Et en fonction de ce nombre de coup, les boucles de tests pourraient être plus courtes... Bien que dans mon cas le jeu de l'AI soit suffisamment rapide.
@ bientôt
LouReeD