Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de conception

    27 octobre 2014 à 20:47:11

    Bonjour à tous,

    voila, je poste car mon cerveau bloque. Je créer un jeu en JAVA, un jeu de combat en tour par tour. J'ai intégré des passifs (avec un arbre de talent) pour les personnages, certains passifs sont du genre "quand vous esquivez vous gagnez 1 de force". Le problème c'est que ce genre de passif j'en ais au moins 50 et que durant un combat quand je fais une esquive, je ne veux pas que mon programme cherche si le personnage à tel ou tel passif en rapport avec l'esquive pour appliquer un effet (si il en a un).

    Du coup je me creuse la tête pour trouver un autre moyen mais je reste bloqué. J'aimerais entendre des suggestions avec si possible un minimum de détails (mon niveau en JAVA est plutôt débutant, comparativement au cours de cysboy sur ce site j'en suis a peu près après le swing, donc je ne connais pas le multithreading, le drag n drop et JDBC)

    J'espère que quelqu'un pourra m'aider, merci de votre attention !

    • Partager sur Facebook
    • Partager sur Twitter
      28 octobre 2014 à 10:31:06

      Bonjour, 

      Tu pourrais utiliser un système d'événements: si un tel personnage a tel passif, lors de l'ajout du passif tu dis que si le personnage fait telle action (esquiver) alors il faut exécuter telle fonction (ajouter un point de force). Ainsi, à chaque esquive la force augmentera

      • Partager sur Facebook
      • Partager sur Twitter
        28 octobre 2014 à 11:21:14

        salut, merci pour ta réponse.

        Dans l'idée c'est bon mais en pratique je ne sais pas comment faire ça sans devoir rechercher pour voir si le personnage à un passif en rapport avec l'esquive parmi tous les passifs que le personnage peut avoir.

        • Partager sur Facebook
        • Partager sur Twitter
          28 octobre 2014 à 12:13:52

          Comment ça pas faisable en pratique?

          Je ne suis pas familier avec le langage java, mais ce que je ferais c'est lorsque tu ajoutes le passif au personnage, tu crées aussi une connexion entre sa fonction esquiver et une autre qui augmente sa force, ensuite si tu ajoutes un autre passif tu lieras deux autres fonctions, etc... Ça devrait être faisable!

          • Partager sur Facebook
          • Partager sur Twitter
            28 octobre 2014 à 12:45:04

            non non j'ai pas dis que c'était pas faisable, j'ai dis que je ne voyais pas comment faire ça, en fait c'est le lien don tu parle que je n'arrive pas à faire, à la méthode esquive il faudrait rajouter une méthode ajouterforce() SI il a le passif. Mais je ne sais pas comment ajouter une méthode à une autre dans tel ou tel cas, à part en faisant une verif avec des if à rallonge.

            Ou alors je ne comprend pas bien, et j'en suis désolé !

            • Partager sur Facebook
            • Partager sur Twitter
              28 octobre 2014 à 12:53:21

              Tu fais de la programmation événementielle? Tu te sers de quelle(s) bibliothèque(s) pour faire ton jeu?
              • Partager sur Facebook
              • Partager sur Twitter
                28 octobre 2014 à 13:09:07

                Juste Swing et awt pour les menus (j'ai pas d'animation, c'est juste un premier projet)
                • Partager sur Facebook
                • Partager sur Twitter
                  28 octobre 2014 à 13:40:48

                  Il me semble donc que tu pourrais faire ça avec les classes Event et compagnie, par contre je ne pourrais pas t'en dire plus... :( renseigne-toi, sur la doc, sur le tuto de ce site peut-être, et sur google!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 octobre 2014 à 13:45:34

                    oui je cherche toujours beaucoup avant de poster, mais je ne trouve rien qui se rapproche de ce que j'ai envie de faire, d'où mon poste désespéré ici, merci pour ton aide en tout cas !

                    Je suis toujours preneur si quelqu'un à des précisions sur la manière de faire.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 octobre 2014 à 16:28:49

                      En faisant une recherche de 2 min sur google on peut arriver sur cette page... http://java.developpez.com/faq/java/?page=divers#CreerListener

                      -
                      Edité par Spirine 28 octobre 2014 à 16:29:57

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 octobre 2014 à 21:58:28

                        oui mais la c'est pour faire en sorte qu'un bouton modifie un objet or ce qu'il me faudrait c'est un bouton qui modifie une méthode (la méthode esquive).

                        Cela dit cette page est intéressante, merci pour le partage.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 octobre 2014 à 14:59:32

                          Ton passif s'enregistre en tant qu'écouteur des esquives de ton personnage. Lorsque ton personnage réalise une esquive, il notifie tous ses écouteurs d'esquive et le passif augmente la valeur d'esquive du personnage.

                          public interface EsquiveListener extends EventListener {
                              public void onEsquive(Personnage personnage);
                          }
                          
                          public class PassifEsquive implements EsquiveListener {
                          
                              public void activePassif(Personnage personnage) {
                                  personnage.addEsquiveListener(this);
                              }
                          
                              public void desactivePassif(Personnage personnage) {
                                  personnage.removeEsquiveListener(this);
                              }
                          
                              @Override
                              public void onEsquive(Personnage personnage) {
                                  personnage.setEsquive(personnage.getEsquive() + 1);
                              }
                          
                          }



                          • Partager sur Facebook
                          • Partager sur Twitter

                          cd514331234507.564a1d2324e4e.gifCTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr

                            29 octobre 2014 à 17:01:30

                            ok d'accord, je commence à saisir le  truc, et je peux appliquer ce procédé des qu'une valeur change en fait, par exemple des que les Points de vie sont modifiés lors d'un combat, je demande à la GUI  d'afficher la nouvelle valeur.

                            Donc je créer une interface pour l'esquive, ou les Pv (les classes qui sont écoutées), et j’implémente les classes qui veulent écouter. Si le personnage esquive je lance onEsquive() et ça fait toutes les modifs en rapport avec l'esquive.

                            Maintenant que je connais le nom du truc ça va être plus facile pour me documenter, merci beaucoup !

                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 octobre 2014 à 21:30:47

                              je reviens, car j'ai encore quelques problèmes de compréhension et ça m'embrouille, il faut une interface pour "l'écouté" mais la en l’occurrence l'écouté c'est une méthode (la méthode esquive), est ce que je dois changer et essayer de passer l'esquive en classe ? Est ce que je dois créer une classe par passif (vu qu'ils agissent différemment) ?

                              Je comprend le principe mais je n'arrive pas du tout a le mettre en place, même en ayant regardé des tutos.

                              -
                              Edité par Alkoon 30 octobre 2014 à 0:02:59

                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 octobre 2014 à 4:40:56

                                On peut toujours créer plus de classes, reste à déterminer si c'est pertinent. Tu écoutes la classe, et cette classe va notifier les écouteurs lorsque sa méthode sera appelée (en parcourant la liste et en appelant la méthode associée)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                cd514331234507.564a1d2324e4e.gifCTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr

                                  30 octobre 2014 à 10:32:18

                                  Pour l'instant le seul moyen que je vois c'est une classe qui gère les combats avec entre autre un boolean esquive, quand il change il appelle les passifs, les passifs sont des méthodes qui modifient le personnage donc si je veux pouvoir ajouter ou enlever un passif de la liste des écouteurs du boolean esquive, je vois pas d'autre moyen que de créer une classe par passif avec chacun une méthode onEsquive() , ou alors j'ai encore mal compris un truc ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 octobre 2014 à 14:08:41

                                    C'est une solution. Quand on parle conception il y a plusieurs moyens d'arriver à un même résultat, qui faciliteront plus ou moins les développements futurs
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    cd514331234507.564a1d2324e4e.gifCTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr

                                      30 octobre 2014 à 20:37:54

                                      du coup on en reviens à ma question initiale , c'est pas un peu lourd (sachant que j'ai pas mal de passif), comment faire mieux ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        3 novembre 2014 à 10:36:10

                                        toujours en attente d'idée ^^
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          3 novembre 2014 à 15:22:21

                                          Tu peux aller faire un tour du côté des design pattern pour chercher l'inspiration

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          cd514331234507.564a1d2324e4e.gifCTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr

                                          Problème de conception

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown