DEMY, UN DÉMINEUR EN JAVA

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 - 18 avril 2011 à 13:33
Niidhogg Messages postés 42 Date d'inscription dimanche 8 février 2009 Statut Membre Dernière intervention 11 octobre 2015 - 29 avril 2011 à 13:08
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

Niidhogg Messages postés 42 Date d'inscription dimanche 8 février 2009 Statut Membre Dernière intervention 11 octobre 2015 1
29 avril 2011 à 13:08
Ok merci je vais faire ça ;)
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
29 avril 2011 à 09:32
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

}

}

}
Niidhogg Messages postés 42 Date d'inscription dimanche 8 février 2009 Statut Membre Dernière intervention 11 octobre 2015 1
28 avril 2011 à 18:28
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
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
28 avril 2011 à 15:28
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
Niidhogg Messages postés 42 Date d'inscription dimanche 8 février 2009 Statut Membre Dernière intervention 11 octobre 2015 1
28 avril 2011 à 14:06
Voila voila, j'ai corriger la majorité des points que tu as dénoncer et j'ai fait quelque rajout..

Pour corriger le bug de quand on fais un clic en glissant légèrement le curseur, j'ai pas utiliser un mouseDragged(MouseEvent) mais j'ai tout mis dans mouseReleased(MouseEvent) ;)

J'ai changer le son d'ouverture dit moi ce que t'en pense.

L'action spécial quand tu appuie sur les deux boutons en même temps je l'est mis sur le bouton du milieu car j'ai pas trouver comment faire pour vérifie que les deux cliques sont enfoncer..

Pour la sauvegarde des meilleurs score j'ai pas encore fait mais j'y travaille ;)
Niidhogg Messages postés 42 Date d'inscription dimanche 8 février 2009 Statut Membre Dernière intervention 11 octobre 2015 1
19 avril 2011 à 00:24
-"La sauvegarde des meilleurs scores est un peu légère (pas de tri, pas d'indication du niveau joué)." -> Je savais que j'avais oublier quelque chose ^^

-"Dans le démineur original, tu peux ouvrir toutes les cases autour d'une case en faisant un clic droit + un clic gauche simultanément (à condition d'avoir signalé toutes les mines). Ça permet d'aller plus vite." -> Ok, merci je ne savais pas ;)

-"Et surtout, le plus désagréable, quand tu fais un clic en glissant légèrement le curseur (ça arrive quand tu joues vite), il ne prends pas le clic car tu as mis un écouteur mouseClicked, ce serait bien de rajouter mouseDragged." -> Merci, je cherchais comment corriger le problème.

Je corrigerais tout ces points dés que j'en est l'occasion. Merci pour le commentaire ;)
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
18 avril 2011 à 13:34
Flûte, j'oublie toujours de mettre la note...
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
18 avril 2011 à 13:33
Salut,

Joli, que ce soit au niveau de l'ergonomie, du design ou du code, dans l'ensemble je trouve que c'est réussi.

Quelques points qui mériteraient quand même que tu t'y intéresse :

La sauvegarde des meilleurs scores est un peu légère (pas de tri, pas d'indication du niveau joué).

Le son d'ouverture est un peu désagréable à la longue (trop aigu).

Dans le démineur original, tu peux ouvrir toutes les cases autour d'une case en faisant un clic droit + un clic gauche simultanément (à condition d'avoir signalé toutes les mines). Ça permet d'aller plus vite.

La partie continue quand tu as gagné (en tout cas après avoir enregistrer ton nom). À mon avis, c'est un bug.

Et surtout, le plus désagréable, quand tu fais un clic en glissant légèrement le curseur (ça arrive quand tu joues vite), il ne prends pas le clic car tu as mis un écouteur mouseClicked, ce serait bien de rajouter mouseDragged.

Je mets un 7/10.

Bonne continuation,
Jonathan Guéhenneux
Rejoignez-nous