Page 1 of 1

Puissance 4 sur TI 83 CE - Win detection

Unread postPosted: 11 Oct 2017, 01:52
by Zormuche
Bonjour hier je me suis lancé un petit "projet" d'un puissance 4.

Tout marche bien seul problème la win detection

Pour info je stocke les infos du jeu dans une matrice 7*7. les cases du jeu (6*7) sont sur les rangées de 2 à 7. La rangée supérieure sert juste à savoir combien de pions sont déjà présent sur la colonne correspondante.

Le problème de la win detection donc, c'est que c'est extrêmement lent. Enfin je trouve. J'ai une idée très précise, mais là par exemple je viens d'entrer dans le programme la détection de seulement les gains verticaux et horizontaux de la couleur jaune (soit à peu près un quart de toute la win detection si je ne m'abuse) et ça prend déjà une seconde.

J'ai fait une boucle For pour le gain vertical, une boucle for pour le gain horizontal, qui vérifie simplement pour tous les cas possible qu'une rangée de 4 cases adjacentes a une somme de 76 (les cases prennent la valeur 19 pour la couleur jaune car c'est la valeur de la variable couleur JAUNE. Idem pour 11 pour le rouge)

je me demandais que peut être je pourrais vérifier que la somme est 44 ou 76, ce qui faciliterait peut être, je sais pas. Mais dans tous les cas si je fais ça, comment ensuite savoir si c'est le rouge ou le jaune qui a gagné?

Et si vous avez des astuces pour la win detection plus rapide, je suis preneur bien entendu

merci beaucoup

Re: Puissance 4 sur TI 83 CE - Win detection

Unread postPosted: 11 Oct 2017, 11:13
by critor
Salut.

Belle initiative de projet. :)
Pour préciser, tu souhaites tenir compte des alignements en diagonale aussi ou pas ?

Merci.

Re: Puissance 4 sur TI 83 CE - Win detection

Unread postPosted: 11 Oct 2017, 14:53
by grosged
Je ne sais pas comment, dans ton programme, la TI s'y prends pour "réfléchir"...

Mais je vais t'expliquer en 2 mots la seule façon de procéder que je connaisse (avec , par exemple, la TI ayant les croix, et l'adversaire les ronds ) :
C'est au tour de la TI ... elle scrute alors tous les quadruplets possibles (en diagonales, horizontalement, verticalement)
et va , à chaque fois, faire grimper la "cote" (au moyen d'un tableau dédié) de chacune des cases du quadruplet encore disponibles, en l'incrémentant d' une note (plus ou moins élevées) et ce, en fonction de l' état du quadruplet :

Par ordre d'importance:
quadruplets contenant au moins une croix et un rond : les cases vides ne valent rien ;)
_ _ _ _ : quadruplet inoccupé, les cases vides valent .00001
O _ _ _ : ... valent .001
X _ _ _ : ... valent .1
O O _ _ : ... 10
X X _ _ : ... 1000
O O O _ : ... 100000
X X X _ : ... 1000000

ça permet à la TI d'avoir un jeu offensif tout en parant aux menaces !

Au final, il nous suffit de consulter le tableau de valeurs : la case ayant eu la meilleure note (et dans ce cas de puissance4 possiblement jouable) représentant le meilleur coup ;)
Ainsi, si cette note se trouve dans telle ou telle fourchette de valeurs, c'est que la TI vient de gagner...ou perdre ;)

Je ne sais pas si j'ai été assez clair dans mes explications :p

En tout cas, j'ai personnellement écrit il y a quelques mois un connect4 pour TI-8x monochrome (voir archives_voir.php?id=869728 )
de cette manière, et ça marche plutôt bien :)

Tu peux consulter l'article (scanné par mes soins) qui -jadis- m'a appris tout ça, ici : gallery/album.php?album_id=334
(ça s'applique au jeu du "morpion" ça parle donc de quintuplets, mais le principe de raisonnement reste le même ;) )