Salut,
J'inogure le forum d'IA, je suis actuellement en train de réaliser une IA sur Casio (donc en Basic) qui joura contre l'humain.
J'ai une matrice (tableaux) de 10*10 remplit de 0
l'IA jout en mettant un 1 à la place du 0
et l'humain avec le 2
Je voudrais trouver le moyen de vérifier si un des deux joueur à gagner en mettant 4 pions aligner en diagonal.
Pas bessoin de donner un code en Basic, en français ça suffit.
J'espère avoir été clair.
__________________________
Freak -- Have Fun!
Héhé je n'avais pas vu ton message, maintenant je vais venirplus souvent ici.
L'IA est ce que je préfère (comme l'algo mais c pareil).
Hum, moi je le ferai à la main.
Disons que x,y sont les coordonnées du nouveau pion.
Je le ferai d'abord, la diag \ puis la diag /
tu mets une var à 0 les positions de x1 et y1 à x et y.
var = 0;
x1=x-1;
y1=y-1;
while ((case[x1,y1]== bonne valeur) && (x1 >0)&& (y1>0))
{
var++;
x1--;
y1--;
}
x1=x+1;
y1=y+1;
while ((case[x1,y1]== bonne valeur) && (x1 <10)&& (y1<10))
{
var++;
x1++;
y1++;
}
if (var > 2)
// C'est gagné.
Puis tu fais pareil sur l'autre diagonale.
C'est une solution parmis d'autres mais elle me paraît bien.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Je suppose que c'est du C ou du C++ donc il y a quelque élment à élaicir entre autre :
var++;
x1--;
y1--;
Il me semble que ++ sert à incrémenter mais je suis pas sur.
Et sinon je ne comprend pas le code en général car pour vérifier si il y a 4pions aligner il faut verifier 4 case différentes.
Perso j'ai commencé un truc dan ce genre :
1->X
1->Y
case[x,y] ->A
X+1->X
case[x,y] ->B
X+1->X
case[x,y] ->C
X+1->X
case[x,y] ->D
If A=B=C=D=1
IA gagne
If A=B=C=D=2
Humain gagne
Il manque bcp d'élément mais le pour le principe j'ai trouvé cela.
__________________________
Freak -- Have Fun!
Ouaip ++ et -- c est pour incrementer ou decrementer.
__________________________
... Until then, we're better off dead
A smile on the lips and a hole in the head ...
Non ta méthode n'est pas bonne car il faut tester au moins 4 cas (un par position de ton pion) + tous les cas ou ton pion est proche du bord.
En effet ++ est l'incrémentation, désolé j'oubliais que je n'étais plus dans le C/C++.
Ce qu'il faut faire, c'est partir de ton pion et aller en diagonale vers le haut gauche pour commencer et tant qu'on trouve un pion de la même couleur on incrément une variable qui compte le nombre de bons pions et on continue d'aller dans cette direction.
Quand c'est fini, on garde ce nombre et on refait pareil dans la direction bas /droite jusqu'à ce qu'on ne trouve plus un pion de la même couleur.
donc on obtient le nombre de pions de bonne couleur en diag du notre sans discontinuité.
Si ce nombre est >=3 c'est gagné (il faut penser au notre ce qui fait 4 et+) d'où le >2.
Si ce n'est pas gagné on fait pareil sur l'autre diagonale.
Dans le while on teste aussi si le pion testé est bien dans le plateau de jeu.
De cette façon, on prend tous les cas ou le pion d'origine se trouve en bord ou au milieu de la ligne qui fait gagner en une seule fois au lieu de faire 36 tests et if.
C bon tu as suivi ?
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Je crois mais j'ai quelque doute.
Procédons point par point, dans ton code à quoi correspond x1=x-1 et y1=y-1 car si j'ai bien compris ce serais x1=10 et y1=10
Et sinon ce code c'est pour vérifier uniquement si un joueur à bon ?
J'ai l'impresion de patoger complétement
__________________________
Freak -- Have Fun!
Non x1 et y1 correspondent aux coordonnées de la case à tester pour voir si elle est bon.
x et y correspondent à la case ou l'on vient de mettre le pion.
Et oui ceci ne sert qu'a savoir si un pion mis a un endroit fait gagner ou non un seul joueur.
Ensuite il y a encore des choses a modifs en fonction du joueur qui joue.
Par exemple au lieu de mettre 'bonne valeur' on mets Valeur[x][y] qui retourne la valeur de la case que l'on vient de jouer et ainsi on teste si les cases en diagonale ont la même valeur.
Tu me suis ?
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Ok, je viens de comprendre que tu vérifie directemment après avoir mis le poins donc prenant en compt le dernier poins, alors que moi j'étais partis du principe que le programme vérifie toute les possibilités sans savoir la place du dernier pions.
Donc d'après cela je vai revoir ton code, mais pas ce soir je suis out
__________________________
Freak -- Have Fun!