DEMY, UN DÉMINEUR EN JAVA

Signaler
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
-
Messages postés
43
Date d'inscription
dimanche 8 février 2009
Statut
Membre
Dernière intervention
11 octobre 2015
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53066-demy-un-demineur-en-java

Messages postés
43
Date d'inscription
dimanche 8 février 2009
Statut
Membre
Dernière intervention
11 octobre 2015
1
Ok merci je vais faire ça ;)
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Pour le timer, tu peux faire un Thread avec un sleep dans une boucle infinie

par exemple :

class Chrono extends Thread {

@Override
public void run() {


long t0 = System.currentTimeMillis();
long t;

while (!partieTerminee) {

t = System.currentTimeMillis();
partie.setTemps(...)
sleep(100); // 100 par exemple, tu peux mettre 1000 mais il y a un risque de sauter une seconde + ne pas oublier le try / catch

}

}

}
Messages postés
43
Date d'inscription
dimanche 8 février 2009
Statut
Membre
Dernière intervention
11 octobre 2015
1
J'aime bien ton truc pour éviter le StackOverFlowError, c'est bien pensés et surtout j'ai essayer et ça marche bien, même pour une carte de 100*100 avec 10 mines ;) Je le publierais quand j’aurai corriger les autres choses. :)

Pour la boucle principale j'ai un peu de mal à comprendre comment faire sans, enfin surtout pour ce qui est de gérer le temps :s
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Salut,

le mouseReleased rend le jeu plus jouable
à mon avis le son est encore aigu mais ça doit venir de mes oreilles de vieux
le bouton du milieu est une bonne idée, on s'y fait vite

Sinon la boucle principale du jeu n'est pas une bonne idée, je ne l'avais pas vue la première fois mais ça consomme beaucoup de ressources (1 cœur à 100% chez moi), ça ne pose pas de problème sur un double cœur, mais sur un simple cœur, on ne pourra rien faire d'autre pendant la partie. C'est inutile de faire une boucle sans fin qui tourne à fond, il suffit de tester l'état du jeu après chaque évènement .

Sinon pour ton problème de StackOverFlow, je pense que ta méthode demineVide est correcte, mais évidemment, comme elle est récursive ça peut planter si tu dépasses une certaine profondeur d'appel. Tu n'as pas le choix, tu devras faire une méthode itérative. Je te conseille de faire un HashSet<Case> où tu mets toutes les cases voisines, à chaque boucle, tu en prends 1 (casesVoisines.iterator().next()), tu l'ouvres si son nombre de mines est 0, tu l'enlèves du hashset et tu rajoutes toutes ses voisines qui ne sont pas ouvertes. jusqu'à ce que l'ensemble soit vide.

Bon codage.
Jonathan
Afficher les 8 commentaires