Besoin d'aide bugs dans jeu java

Fermé
sourioo Messages postés 2 Date d'inscription samedi 30 août 2014 Statut Membre Dernière intervention 13 mai 2015 - 13 mai 2015 à 10:04
 Utilisateur anonyme - 20 mai 2015 à 14:10
Bonjour, je suis débutant en programmation et dans le cadre d'un projet nous avons du réaliser un jeu en java. Nous nous somme débrouiller pour avoir quelque chose de plus ou moins fonctionnel l'ennui est qu'il persiste des bugs.

Dans notre projet nous utilisons des Frames et des Threads mais nous n'avons aucune connaissance dessus et ne les maitrisons pas donc les bugs viennent surement d'ici.

En résumé voici tout d'abord la façon dont est conçu notre jeu : nous avons une interface graphique qui affiche un menu : jouer etc.. (que nous n'avons pas fait nous même). Lorsqu'on clique sur jouer cela ouvre une seconde fenêtre qui propose le mode de difficulté. Lorsqu'on choisis le mode de difficulté cela ouvre une 3ème fenêtre qui est le jeu en lui même.

Pour les 2 premières fenêtres tout à fonctionné de façon impeccable sans que l'on ai à faire quelques choses de spéciale. Mais pour la fenêtre du jeu en lui même nous avions un problème qui était que celle-ci réstait blanche à l'ouverture alors que exactement le même code exécuté dans un main à part fonctionnait bien. Nous avons résolu le problème en faisant un nouvelle classe extends de Thread et en créant notre frame dedans. Donc pour lancer le jeu en résumé on créé un Thread et dedans on créé notre frame qui correspond au premier niveau ( je ne sais pas trop ce qu'est un Thread donc désolé si je m'exprime mal dessus).
Une fois le premier niveau lancé, cela fonctionne correctement et lorsque le joueur termine le niveau on a une méthode dans la classe FrameNiveau1 qui fait en gros : " this.dispode(); FrameNiveau2=new FrameNiveau2(); " Donc notre frame se ferme elle même et ouvre celle du niveau 2.

Jusqu'ici tout fonctionne on fait donc ça pour chaque niveau. Une fois que le joueur a terminé le dernier niveau on ferme juste la frame et on en ouvre pas de nouvelle.

Le joueur n'a donc plus que 2 fenêtre ouverte le menu de départ et le choix de difficulté. A savoir : on fait exactement la manipulation que j'ai décrite à partir de la création d'un Thread (y compris) pour chaque niveau de difficulté. Si le joueur clique sur facile, termine tout les niveaux (le jeu se ferme il reste plus que le menu ) et clique ensuite sur moyen ça marche les nouveaux niveaux s'ouvrent et fonctionne. L'ennui c'est que si après avoir terminé les niveaux faciles il re clique sur facile la fenêtre du niveau 1 va s'ouvrir mais va être complétement bugué : au départ le jeu était bloqué dès le début car le perso ne commençait pas à se place mais dans un mur mais en faisant une initialisation de plusieurs paramètre de la FrameNiveau1 juste avant la boucle de jeu ( alors qu'ils sont déjà fait à la création de la frame en théorie) on a pu rendre le niveau à nouveau jouable mais avec de nombreux bug. Tout d'abord on a un timer qui se réinitialise à chaque niveau, lorsqu'on relance une difficulté déjà terminé ce timer ne redémarre pas à 0 mais vraisemblablement au temps qui s'est écoulé depuis qu'on avait commencé le niveau 1 pour la première fois et il grimpe en seconde 2 fois plus vite que ce qu'il devrait. Ensuite on a une autre bug au niveau de la vitesse du personnage, elle semble légèrement plus rapide dans les premiers niveau et extrêmement plus rapide systématiquement dans le dernier niveau.

Donc ça s'était un résumé de nos bugs principaux, à savoir également : si on lance le niveau de difficulté 1 deux fois en parallèle ( vu que le menu est toujours ouvert) on va avoir la vitesse et le timer et d'autre chose multiplié par 2 dans la 2ème fenêtre et la 1ère sera complétement bugué donc même si c'est moins grave dans ce cas puisqu'il est pas nécessaire de lancer 2 fenêtres en parallèles les 2 bugs viennent surement de la même chose.

Donc le problème semble être que lorsqu'on ouvre 2 framesNiveau1 par exemple celle-ci ne sont pas indépendante et l'une fait bugué l'autre, ça peut venir de où selon vous? Est ce que la façon que nous utilisons pour fermer une frame et la bonne? (this.dispose())

Peut-être que ça vient du Thread vu qu'on en ouvre un par mode de difficulté et que les bugs surviennent systématiquement quand un nouveau Thread du même type est créé. Quand faut t-il fermer un Thread et comment svp? On aimerait le fermé soit quand le joueur quitte le niveau de difficulté en question soit quand il le termine mais on ne s'est pas comment faire, on a testé les méthodes stop() et des interrupt() à d'autre endroit et c'était pas concluant.


Si quelqu'un est motivé pour nous aider merci beaucoup pour son aide^^.
A voir également:

2 réponses

Utilisateur anonyme
20 mai 2015 à 12:59
Bonjour...

C'est super confus...
Un peu de code ? :)
0
Utilisateur anonyme
Modifié le 4 mai 2023 à 10:36

Sinon, pour le premier "bug" pourquoi ne fermeriez vous pas le menu, ou juste le cacher ? Et vous le relancez/refaite apparaitre quand l'utilisateur ferme une autre fenêtre...

0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
20 mai 2015 à 13:13
Bonjour,

Les pages blanches que tu décris (freeze de l'interface) proviennent généralement d'une exception non récupérée dans l'EDT (Event Dispatch Thread)

Swing a ses propres mécanismes de concurrence, les SwingWorker, ça ce ne se base pas sur les Runnable (comme les Thread) mais sur les Future, ce qui permet à la tâche d'être exécutée par l'EDT (quand elle a le temps) et non pas en parallèle.

Voir Concurrency in Swing sur la documentation d'Oracle.
0