J'ai un prob avec un puissance 4 que je suis en train de faire(sur ti 92+) : le prog est tres long lorsqu'il doit verifie si un joueur a aligné 4 pions. La partie du prog chargé de cela est :
For y,1,4
For x,1,4
If (p[y,x]=p[y+1,x] and p[y+1,x]=p[y+2,x] and p[y+2,x]=p[y+3,x] or p[y,x]=p[y,x+1] and p[y,x+1]=p[y,x+2] and p[y,x+2]=p[y,x+3]) and p[y,x]0
Text "win"
EndFor
EndFor
ps : cette partie ne verifie pas toute la grille, ni en diagonal, mais le prog est deja lent alors......
je voudrais savoir si une simplification est possible pour rendre le prog + rapide
Merci d'avance
Zeph Le 11/07/2004 à 16:50 Pourquoi est-ce que tu veux vérifier toute la grille ? Après avoir posé un pion, il n'y a que celui-ci qui est succeptible de former une rangée de 4, ça diminue déjà considérablement le nombre de tests à effectuer.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
j'avais pensé à verifier que les cases adjacentes au dernier pion en place, mais je rencontre des prob lorsque le pion est mis dans les colonnes 1,2 et 6,7 car il y a une erreur de dimension
faut faire un tableau en mémoire pour représenter la grille qui est plus grand que la vrai grille. dans les cases sur les bords tu mets une valeur qui veut dire dehors comme ca ton algo sait qd il sors de la grille mais ne plante pas.
Zeph Le 11/07/2004 à 17:27 Soit ça, soit comme les copies de matrices sont très lentes, tu te contente d'arrêter les tests avant de sortir du tableau. T'as les coordonnées X et Y du pion que tu viens d'ajouter, donc ça devrait pas poser de problème.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
je trouve la 1ere solution plutot bien, je comprends pa trop la deuxieme.
la solution 1 est tres bien expliquer sur le site de f.leiber
Zeph Le 11/07/2004 à 19:51 Un peu oui, mais tant qu'à utiliser cette méthode alors le mieux est de s'affranchir totalement des matrices du TiOS qui sont définitivement bien trop lentes pour ce genre d'operations.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
je suis aller sur le site, et la seule rubrique qui concerné mon prob était celle sur puissance 4 (dans la page d'othello). Je trouve pas que ca repondait aussi bien a mon problème...
c de cette page que je parlais......
le fonctionnement est comparable, mais il parle tout de meme de visual basic.
et ?
un algo que ce soit en vb, en C ou en caml c'est le même ...
la page du site traite de l'ia du programme : soit savoir quel coup sera le meilleur. Moi c'est juste savoir si 4 pions ont été alignés. Mon prog ne refléchi pas aux coups possibles mais si le dernier pion en place offre la victoire.
ps : je ne comptais pas trouver le code tout pret a etre recopié ou sinon je l'aurais demandé de suite...
Bah tu fais 8 ch'tites boucles dans chaque direction.
On regarde la couleur du joueur.
On regarde (par exemple) en haut à gauche.
Le pion en haut à gauche est-il de la même couleur ? Oui, on continue et on augmente de 1 une valeur repère qui compte le nombre de pions de la même couleur dans la diagonale de haut à gauche jusqu'au bas à droite, non, on fait ensuite vers le haut et on prend une uatre valeur repère qui s'occupe de la direction verticale cette fois-ci.
Une fois les tests effectués, une des 4 valeur repères (correspondant à chaque direction) est-elle supérieure ou égale à 4 ? Oui ? Bah le jeu se termine et on affiche la phrase en fonction de celui qui a joué.
ca risque d'etre lent ......,non
non, pas du tous, au pire, une 15-aines de test

Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.
les 8 boucles ne sont peut-etre pas indispensables, 4 suffisent : une boucle peut regarder de chaque coté du pion(jusqu'au 4°). Donc 1 boucle pour la diagonale haut-gauche-bas-droite, 1 pour la digonale bas-gauche-haut-droite, une pour la verticale, et une pour l'horizontal(ici, il suffit de regarder que le bas, vu que les cases du dessus ne peuvent etre remplies).
ca pourrait donner pour la digonale haut-gauche-bas-droite :
1->gagne
For z,1,3
if p[l-z,c-z]=u or p[l+z,c+z]=u
gagne+1->gagne
endfor
if gagne> ou =4
text "Win3.........
Hu, c'est vrai, mais tu as un peu faux :] En effet si la case qui se trouve juste au-dessus du pion ne sera jamais remplie, il en va tout autrement pour la case en haut à gauche ou en haut à droite ; par exemple, tu déposes un pion à côté d'une colonne bien bourrée d'autres pions...
De plus, évite le plus possible les for, c'est assez lent d'exécution.
si je depose un pion a coté d'une colonne pleine, seules les pions de la colonne qui se trouveront dans la diagonale de mon pion peuvent me permettre de gagner, il seront alors "analyser" par une des 2 boucles chargé des diagonales, non?
Bah ui, elles seront analysées les diagonales car ce sera indiqué dans le prog !
alors pas de prob avec les pions situés au dessus
Bah pas de problème avec les pions situés au-dessus par la diagonale. De toutes façons pour chaque case de ton puissance 4 il y a trois possibilités, blanc, noir ou vide.
par contre j'ai un autre prob, le prog ne reconnait la victoire qu'au coup suivant
ex : si le dernier pion que je met permet de gagner (alignement de 4 pions), la procedure de victoire ne s'enclenche qu'apres que le joueur adverse ait joué. Je vois pas trop d'ou ca vient