Bonjour !
Je suis en train de faire "l'ia" d'un jeu. J'ai dans mon alphabeta un problème de vitesse. Dès une profondeur de 3 demi coups il met 300 ans...
En analysant les temps mis par chaque fonction, j'ai pu voir que cela venait de mes fonctions "jouerCoup" et "defaireCoup". Effectivement ces fonctions posent problème.
Je m'explique. Le jeu, nommé dvonn, a un systeme de connexion. Il y a trois pièces nommées "dvonn". Toutes les autres pièces du plateau doivent être reliées (directement ou indirectement par une autre pièce) au dvonn, sinon elles sont éliminées du plateau. Donc, à chaque coup joué, je dois vérifier si des pièces ne se retrouvent pas isolées. Hors ici la seule solution que j'ai trouvée n'est pas performante du tout. Je pars de chaque case ou se situe un dvonn puis pour chaque case je fais cette fonction récursive :
(caseTraitees est une List à laquelle sont ajoutées les case traitées)
merci pour vos idées
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private void traiterCase(Case c, Plateau p){ List liste = getListCaseAutour(c, p);//donne la liste des cases qui sont autour Iterator iter = liste.iterator(); while (iter.hasNext()) {//pour chaque case de la liste Case element = (Case) iter.next(); if(!casesTraitees.indexOf(element ) != -1){//si la case n'a pas encore été traitée on continue element.setEtat(CONNECTE); casesTraitees.add(element); traiterCase(element, p); } } }
n'hésitez pas à me demander des précisions si je me suis mal expliqué !
daoud
Partager