Quatre à la suite

Bonjour,

bientôt en téléchargement une version personnelle et simple du célèbre jeu du Puissance 4 !

La partie du site "téléchargement" est en cours de refonte, donc j'attends patiemment qu'elle ré ouvre afin de poster ce petit jeu, ce qui va me permettre de travailler le coté "IA" (en français) et "AI" (en anglais), car pour le moment c'est totalement aléatoire et en fait le joueur "humain" gagne à chaque fois, à moins que lui aussi soit "tête en l'air" !

@ bientôt

LouReeD

Salut LouReed,

impatient de voir l'IA en oeuvre!

Quand tu seras rodé, tu pourras attaquer mon jeu, Curulis Quest !

Bravo, en tout cas, de te lancer dans ce domaine!

A+

Bonsoir curulis57 et un petit coucou à Pedro22

J'ai commencé à regarder et je prend peur !

Je crois que cela va être trop "fort" pour moi !

Une histoire de force brute qui consiste si j'ai bien compris à "tester" toutes les combinaisons de jeu jusqu'au match nul, victoire ou défaite.

Et du coup, à partir d'une situation donnée, l'IA va prendre la solution de la combinaison qui l'emmène vers une victoire si elle existe et de préférence avec un nombre de tour minimum.

Pour pallier le temps de calcul, cette technique est limitée en "profondeur", c'est à dire qu'en fait les calculs sont fait que sur un certain nombres de tour et non pas sur la totalité, et à ce moment là chaque combinaison trouvée vaut un certain nombre de point en fonction de la position des jetons des deux joueurs, et l'ordinateur choisira la combinaison qui rapporte plus de point.

Mais il faut donc trouver une valeur entière représentant une combinaison...

Bref je me noie dans un verre d'eau et je reviens d'ici peu !

Je crois que l'option "Joueur VS IA" sera une mise à jour du jeu, et que pour commencer et bien il faudra deux joueurs devant l'écran !

@ bientôt

LouReeD

Curulis Quest ?

Mais où se trouve-t-il vous n'avez pas de lien "Mes Applications" ?

@ bientôt

LouReeD

Salut LouReed,

Curulis Quest n'est pas une application : c'est un jeu "en chair et en os", non édité (encore), de mon invention dont j'ai écrit quelques lignes ici...

https://forum.excel-pratique.com/viewtopic.php?f=5&t=113213

Mais, bon, il sera plus sage, je pense, de faire d'abord tes premières armes en IA sur Puissance 4...

Bon courage!

A+

Bonsoir,

un avant goût de l'interface...

ludique

Bon je sais, c'est enfantin, mais je suis comme ça !

@ bientôt

LouReeD

Très joliment fait, au contraire!

A quand un premier championnat inter Exceliens ?

A+

Bonjour LouReeD, le forum,

moi aussi, je trouve ton interface très bien faite !

le mot « computeur » n'est pas dans mon dico français,

mais le mot anglais « computer » est traduit en français

par « ordinateur ».

oui, oui, je sais : je chipote !

dhany

J'aime bien ton interface aussi

Il ne te reste plus qu'à créer une IA digne de ton interface

Cordialement,

Bonsoir,

merci @ vous trois pour ces encouragements !

Mais la tâche me parait déjà trop importante !

Il me faut réfléchir !

@ bientôt

LouReeD

Bonjour,

à défaut de réfléchir, avant même la mise en ligne du jeu, j'ai déjà changé de grille !

Celle-ci est "en relief" par rapport à l'ancienne qui était plutôt "plate"...

J'ai amélioré l'IA en mode "jeune joueur non attentif"... Il y avait un "bug" lorsque c'était à lui de jouer et qu'il se trouvait sur une zone où trois colonnes étaient déjà pleine !

Ajout d'un compteur de "coups" afin de détecter la fin d'une partie sans gagnant!

@ bientôt

LouReeD

Bonsoir,

avancée de mon AI : coup gagnant pour l'AI => OK

empêcher l'humain de gagner => OK

Reste à jouer sans créer de perte immédiate

reste à penser sur une façon de jouer afin de s'orienter vers une victoire AI

Et ma foie le fait de jouer avec un risque à perdre...

Cela avance, pour les deux OK je suis déjà à trois codes différents ! Le dernier est je pense le plus optimisé...Normale, non ?

@ bientôt

LouReeD

Bonsoir,

ce message pour expliquer un peu mieux mon orientation de jeu de l'AI :

l'humain joue (peut importe où l'on se trouve dans la partie),

l'Ai va faire le "tour" des combinaisons possibles de la grille,

Premier tour en recherchant par groupe de 4 cellules, un groupe ayant 3 jetons de la couleur rouge et un "trou", alors l'Ai joue dans ce trou si le coup est possible pour gagner, sinon il regarde le groupe de 4 cellules suivantes, ceci pour les 24 groupes horizontaux possibles, les 21 groupes verticaux et les 24 groupes en diagonales.

Si l'AI ne peut pas gagner en un coup, alors il fait la même recherche ci dessus mais avec les jetons adverses afin de bloquer une victoire au tour suivant de l'humain.

Recherche suivante : l'AI va chercher à empêcher l'humain d'aligner trois jetons de sa couleur, pour cela le code va scruter les combinaisons horizontales, verticales et en diagonales, non plus sur des groupes de 4 cellules mais de deux cellules ayant le même type de jeton. Si c'est le cas, l'AI vérifie la possibilité de jouer à l'une ou à l'autre extrémité de ce groupe de deux jetons :

Si un seul coté est jouable, c'est joué, si les deux cotés sont jouables alors un aléa est fait afin que ce ne soit pas toujours le même coté qui soit bloqué. Si les deux cotés ne sont pas jouables alors l'AI effectue le même "scanne" pour trouver une paire de jeton de sa couleur afin d'en aligner trois.

Si après ces 4 scannes de la grille, l'AI n'a pas joué, alors il va tester le jeu d'un jeton sur les 7 colonnes et vérifiera si cela n'engendre pas un gain "immédiat" pour l'humain en faisant un scanne des groupes de 4 cellules avec les jetons de la couleur adverse.

Si l'humain peut gagner, alors un test sera fait sur une autre colonne, au résultat des 7 tests, l'AI jouera dans une colonne "sans victoire" humaine, et si cette possibilité n'existe pas alors un scan des colonnes sera fait afin de connaître le jeu à faire pour se rapprocher d'un victoire de l'AI au tour suivant.

Si après cet ultime test rien de convainquant n'est trouvé, alors un tirage au sort de la colonne de jeu sera fait en espérant que l'humain ne voit pas sa victoire.

Voilà, en somme je ne vais pas faire la force "brute" avec le Min/Max, mais seulement un jeu :

de gagne directe

de blocage

d'anticipation de blocage

de direction vers la victoire

sans défaite au tour suivant

pour une gagne à un tour de l'AI

de hasard dans les autres cas.

@ bientôt

LouReeD

Bienvenue, Professeur FALKEN !"

Go, go, go!

A+

Bonsoir,

bon et bien "ce la" ( édit : grossière erreur...Ouf je peux corriger ) cela avance bien

Jeu pour gain immédiat Ai => OK

Jeu pour bloquer gain immédiat Humain => OK

Jeu pour une combinaison de trois jetons couleur AI pour gain au tour suivant => OK

Jeu pour bloquer une combinaison de trois jetons couleur Humain au tour suivant => OK

Reste de la partie de vraie réflexion :

Jeu pour avoir un gain immédiat au tour suivant (différent de celui du dessus car il n'est pas question ici d'aligner trois jetons, mais de jouer une colonne qui permettra de jouer en "bouchant" un trou pour un gain.

Et si rien de tout ce la est possible

Jeu pour joueur en limitant la casse, c'est à dire au mieux jouer sans "proposer" un gain immédiat à l'humain, au pire un jeu aléatoire qui donnera ce qu'il donnera...

Sinon l'image du jeu avec le correction de "Computer" et la mise en relief de la grille ! C'est plus beau, non ?

ludique

@ bientôt

LouReeD

Bonsoir LouReeD,

c'est bien d'avoir mis « Computer », et oui, le relief de la grille est très bien fait ! mais dis-moi, si le joueur LouReeD a 1 point seulement alors que le calculateur « Computer » a 2 points, ça veut dire que tu as créé un code VBA dont l'IA surpasse le maître ?

dhany

Oui et non...

Je connais son point faible !

Mais en testant le jeu uniquement avec les "OK" cités un peu plus haut, il faut être attentif pour ne pas perdre !

En ce moment, si aucun des "OK" fait que l'AI joue, alors l'AI joue en colonne 1, puis 2 etc en fonction des places, et bien je me surprend à perdre malgré tout ! Alors avec la finition de ma programmation d'AI cela pourrait donner quelque chose de bien.

Restera à pouvoir régler la "force" de l'AI pour que cela reste jouable...

@ bientôt

LouReeD

Salut LouReed,

question subsidiaire : le code sera-t-il disponible pour les ceusses qui s'intéressent à ta prouesse?

A+

Bonjour,

il suffit de voir mes autres applications pour trouver la réponse !

En plus je suis en train de le commenter !

Il est en cours de "finition", tout est fonctionnel, mais hélas mes compétences me permettent (à l'heure actuelle) que d'aller à un "Coup" chacun d'avance : l'AI joue et il regarde ce que l'Humain peut faire...

Mais après quelques tests cela est relativement concluant !

D'ailleurs ces tests m'ont permis de détecter une amélioration à faire...

@ bientôt

LouReeD

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

Rechercher des sujets similaires à "quatre suite"