Partage
  • Partager sur Facebook
  • Partager sur Twitter

Intéraction avec console

possible ?

Sujet résolu
    31 décembre 2008 à 21:43:47

    Bonsoir à toutes et à tous !

    Dans le but de créer un script qui me servirait à simuler des combats de jeu de rôle, j'aurais besoin d'intéragir avec la console. Par exemple à chaque tour de combat, je voudrais qu'elle m'affiche un menu que j'aurais créé qui me permette de faire différentes actions (type placer un ennemi, déplacer des persos, etc).

    Seulement voilà, comment faire en sorte que le programme ne s'arrête jamais et qu'il attende toujours l'action que je lui demande ?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      31 décembre 2008 à 22:04:00

      Boucle infinie ?

      [Edit] : avec un thread bien sûr
      • Partager sur Facebook
      • Partager sur Twitter
        31 décembre 2008 à 22:21:43

        Je manipule très mal les threads, j'aboutis toujours à des erreurs invraisemblables.
        Je vais voir si une boucle infinie me suffit.

        Merci pour la réponse.

        [Edit] :
        Finalement, mon problème est de créer le fameux menu que le programme doit me demander à chaque action. Je dois implémenter toutes les possibilités dans le menu et ça risque d'être un peu bordélique.

        En fait, n'y aurait-il pas un moyen pour en quelque sorte taper du code java dans la console pour que le programme réagisse ?
        Car actuellement je dois mettre le code java dans le main pour qu'il s'exécute mais ça ne permet pas d'intéractivité si je dois modifier le code à chaque fois.

        J'espère que ma question est claire ^^'

        Merci de vos réponses ^^

        • Partager sur Facebook
        • Partager sur Twitter
          1 janvier 2009 à 4:33:01

          heuu tu peux faire une reconnaissance de syntaxe :p
          mais grosso modo ^^ non c'est pas possible (sauf si t'es basé en java :p ) :p

          pourquoi tu dois implémenter tt les actions dans le menu ?
          pourquoi ne pas simplement enregistrer dans un fichier ?
          tu ne lit que ce qui t'interesse :o

          genre il fait l'action Y donc ton programme sait qu'il doit aller lire la ligne qui commence par X9865743 de ton fichier ou sont contenus les actions que le joueurs peut faire :p



          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            1 janvier 2009 à 11:29:00

            Citation : snooopy

            genre il fait l'action Y donc ton programme sait qu'il doit aller lire la ligne qui commence par X9865743 de ton fichier ou sont contenus les actions que le joueurs peut faire



            Point de vue extension c'est moyen, chaque fois que tu crée un nouvelle méthode tu dois mette à jour ton fichier, et si ton fichier est corrompu ou pas à jour, plus rien ne marche.

            Si tu veux appeler dynamiquement une méthode il est préférable de se tourner vers la reflexion, ou plus simple, en utilisant le pattern template method.
            • Partager sur Facebook
            • Partager sur Twitter
              1 janvier 2009 à 15:39:35

              Citation : shakhal


              Point de vue extension c'est moyen, chaque fois que tu crée un nouvelle méthode tu dois mette à jour ton fichier, et si ton fichier est corrompu ou pas à jour, plus rien ne marche.



              ben ... moi je parle d'enregistrer le jeux dans le fichier °_0 c'est pareil partout non ?
              quand j'entends jeux de rôles j'entends

              "Texte descriptif de ou tu est
              -Action 1 possible
              -Action2 possible
              ..."

              et tu peux bien évidemment travailler avec plusieurs fichier genre 1 par piece :p
              avec un systeme de références :o
              enfin soit ^^ si tu me dis qu'il y'a mieux :p je me justifiais juste :p
              • Partager sur Facebook
              • Partager sur Twitter
                4 janvier 2009 à 2:32:09

                Ok alors c'est un petit script à usage personnel qui pourrait éventuellement subir quelques modifications...
                Je suis novice en méthodes de programmation, j'ai bien lu beaucoup de choses à propos des design pattern mais pour un projet de cette taille je préfère coder simplement. (néanmoins j'aime les codes propres)


                Pour mettre en œuvre l'idée de Snooooopy, je crée un fichier du type
                ligne_1 : attaquer_monstre();
                ligne_2 : deplacer();
                ligne_3 : competence();

                et ces méthodes je les définis dans mon fichier de code ?


                En fait pour l'instant le script servirait à simuler des combats de jeux de rôles papiers (type donjons et dragons, warhammer...) pour équilibrer les stats des monstres (histoire de ne pas attribuer les stats normales d'une hydre à un gobelin).


                Merci encore :)
                • Partager sur Facebook
                • Partager sur Twitter
                  4 janvier 2009 à 12:18:18

                  bien mon idée c'est que tu fais une série de fonction de bases pour tes monstres
                  ensuite dans ton fichier tu dis quel méthode appeler :o

                  néanmoins je te recommande de design paterne :)
                  je n'avais pas vus les choses sous l'angle que tu me montre
                  je pensais plustot a un truc style "don't vous êtes le héros" donc tu vas dans une zone on t'explique ce que tu vois et tu as plusieurs actions possibles(qui te renvoient vers d'autres zones :o


                  ici le design pattern me semble bien adapter pour ce que tu veux faire :o

                  par exemple ta class monstre contient une class "moyen de transport" qui elle contient la méthode avancer :o

                  ton fichier lui contient ça
                  [...]
                  #monstre5674:#:Nom [...]:#:type deplacement:#:déplacement max:#:deplacement min[...]
                  [...]


                  ainsi quand tu voudras créer ton monstre tu feras :
                  if(type_deplacement =="pied"){
                       MethodeDedeplacement = new Pieton(déplacement_min,déplacement_max);
                      }else if(type_deplacement =="pied+air"){
                       MethodeDedeplacement = new AerienTerrestre(déplacement_min,déplacement_max);
                      }
                  
                  [...]
                  


                  bien sur ça marche aussi avec les attaques :p mais la moi je ferais encore différents :p
                  je ferais une class "Arme" avec dedans tous les paramètres
                  genre
                  [...]
                  boolean perce_armure;
                  boolean Psychique;
                  boolean Distance;
                  [...]
                  


                  parce que ici si tu dois créer une class pour chaque type d'attaque tu est pas sortis de l'auberge ^^ vus que tu as par exemple des attaque qui ont juste perce_armure
                  mais d'autre qui ont des combinaison :o

                  donc a la limite de je ferais 2 grande class d'arme voir 3 grande class
                  Corps à corps / Distance / magie

                  par contre magie je referais pleins de sous classe. mais pas par sort par exemple je regroupe tous les sort de jet dans une seul class...
                  je ferais comme catégorie
                  ...
                  boolean Enflamée;
                  boolean gele;
                  boolean explose;
                  boolean passe_a_travers_les_murs;
                  ...
                  


                  bon voilà une idée sur comment fonctionner :p


                  je tiens a te rappeler que java est orienté POO :p donc travail en POO
                  si tu as trop la flemme de faire plus de sous class et que ton jeux ne fonctionne qu'avec des lignes de text :o tu peux faire ce qui suit :

                  tu peux simplement faire dans un fichier une zone (ligne ou bien déterminée par balise mais moi)
                  #monstre X#
                  -Nom
                  -Forcemin-Forcemax
                  -nombre_d_attaque
                  -ExplicationAttaquesepareepar :#:
                  -DegatAttaquemin-max
                  #fin monstre#


                  #monstre X#
                  -Dromaludaire
                  -30-55
                  -2
                  -Vous lance son épée dans la g**:#:balance une boule de feux
                  -4-10:#:12-20
                  #fin monstre#


                  avec ça c'est facile de transformer en text tu dois juste faire une fonction qui est capable de calculer une valeur aléatoire entre 2 valeurs ... puis tu fais

                  System.out.println(ExplicationAttaque + " Vous perdez :" + CalculDega(DegatAttaquemin-max);

                  bon ce sont juste des idées
                  je retournes bosser :p moi
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    4 janvier 2009 à 12:37:53

                    Le pattern method template permet justement d'éviter à avoir à faire des tas de if comme dans le code de snoooopy, le problème de son code est que si tu crées un nouveau moyen de déplacement, tu dois retourner ajouter un if else, et ça c'est contraire au principes poo(design for extension)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 janvier 2009 à 12:44:43

                      ben quand même hein :o lors de la création tu est obligé de déterminer quel sous class utiliser ...
                      tu seras obligé de faire au moins une fois un if ...
                      l'avantage c'est que par après tu n'auras plus qu'a appeler la méthode de cette sous class ... plus besoins de if...
                      si maintenant tu as une meilleur technique qu'un switch ou un if else pour "qu'à partir d'un fichier text ... créer un nouveau monstre" j'suis preneur :o
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        4 janvier 2009 à 12:50:59

                        Citation : snoooopy

                        ben quand même hein :o lors de la création tu est obligé de déterminer quel sous class utiliser ...



                        Non, pattern factory(la factory, peut et doit évoluer en fonction de l'évolution du programme, ça c'est normal).
                        Ou même reflexion: appel dynamique de l'enfant ad-hoc(mais alors il faut peut être mettre en oeuvre des conventions de nommage pour avoir une base de référence).
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          4 janvier 2009 à 13:06:05

                          on va méler un peu des 2 solutions:

                          factory + naming convention:

                          public Mover createMover(String movingType) {
                              return Class.forName("Mover"+movingType).newInstance;
                          


                          Appel:
                          Mover rocket = createMover("fly");
                          rocket.move();
                          


                          Comme ça même plus besoin d'entretenir la factory.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 janvier 2009 à 17:21:49

                            d'accord ^^ je savais pas qu'on pouvais transformer une String en nom de class :)
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              4 janvier 2009 à 17:24:33

                              Pas de quoi, bon amusement.

                              PS: newInstance est une méthode donc j'ai oublié ()
                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 janvier 2009 à 19:25:38

                                J'ai bien lu et relu vos réponses. Toutefois je pense qu'utiliser la méthode de shakhal risque d'être compliquée pour mon petit niveau (j'ai très peu de pratique en Java).

                                Je vais me limiter à ce que propose Snooooopy, je le sens beaucoup plus abordable.

                                Je code beaucoup au feeling ; c'est pour le moment la seule chose que je sais faire car pour faire autrement j'aurais besoin d'un "tutorial d'organisation de code".

                                En tout cas je vais essayer de tenir en compte vos remarques.

                                Merci pour le temps passé sur mon problème :)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 janvier 2009 à 19:52:26

                                  Citation : elmh

                                  J'ai bien lu et relu vos réponses. Toutefois je pense qu'utiliser la méthode de shakhal risque d'être compliquée pour mon petit niveau (j'ai très peu de pratique en Java).



                                  tu as tord :o c'est juste que on ne ta donné aucune explication ^^


                                  Citation : elmh

                                  Je code beaucoup au feeling ; c'est pour le moment la seule chose que je sais faire car pour faire autrement j'aurais besoin d'un "tutorial d'organisation de code".


                                  la chose dont j'ai peur avec le feeling, c'est que si tu n'es pas habitué :o tu ne penseras pas assez POO :o
                                  pourtant une fois que tu commence a penser POO tu te rend compte que ça te simplifie la vie :)




                                  bon pour les explications :)
                                  ce qu'a proposer shakhal;

                                  c'est tu commences par créer une class
                                  "Mover" (pour gérer le déplacement)
                                  ensuite tu créé toutes les class qui en hérite avec les nom suivant
                                  "MoverPietons"
                                  "MoverRoue"
                                  "MoverAerien"
                                  ....


                                  bon maintenant, dans ton fichier, si c'est un piétons tu enregistrera "Pietons" dans la fiche du monstre (attention ça doit être Pietons et pas piétons ou toute autre chose qui s'en rapproche:o )

                                  jusque la pas de difficultées :p

                                  Donc toi ce que tu voudrais c'est que si un monstre est Piéton,
                                  que sa class "Mover" soit une class MoverPietons
                                  dac ??

                                  bon pour faire ça tu peux faire un if (Type = Pieton){....}
                                  c'était mon idée de base :o
                                  mais il y'a plus rapide et plus simple :)




                                  shakhal t'a proposer ce code (enfin il m'a fait un exemple :p )

                                  public Mover createMover(String movingType) {
                                      return Class.forName("Mover"+movingType).newInstance();
                                  


                                  en faite faire

                                  Class.forName("Mover").newInstance();
                                  c'est la même chose que de faire
                                  new Mover();

                                  faire
                                  Class.forName("MoverPieton").newInstance();
                                  c'est la même chose que de faire
                                  new MoverPieton();


                                  donc en faite la fonction te renvois une nouvelle instance d'une class dont tu as rentré le nom :)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    4 janvier 2009 à 20:12:03

                                    C'est juste mais une petite correction: Mover serait une interface.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 janvier 2009 à 20:20:46

                                      oui je suppose que il aurait sa fonction "bouger" abstract :p
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        4 janvier 2009 à 20:22:17

                                        Je vais écrire tout ça pour mettre les choses au clair dans ma tête. J'utilise la POO dans mon code, mais peut-être que je ne découpe pas assez les tâches.

                                        En fait je ne cherche pas à faire un truc élaboré. Par contre je ne suis pas contre essayer, je m'améliorerais peut-être :)

                                        Encore merci pour l'explication.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          14 janvier 2009 à 6:13:54

                                          1269 lignes de code plus tard...
                                          J'appréhende déjà beaucoup mieux ce que vous disiez.
                                          Il me reste à créer tout ce qui tourne autour des armes (actuellement j'ai quelque chose mais c'est pas très modulable) et l'interface.

                                          Alors j'ai bien rerererelu la dernière explication de snoopy en particulier.

                                          Si j'ai bien compris j'dois créer une classe Arme avec toutes les caractéristiques possibles d'une arme. Les classes qui l'implémenteraient auront tous un nom commençant par Arme. A la limite j'veux bien mais je dois créer une classe par arme alors ?
                                          ArmeRapière, ArmeLance, ArmeLameDeBossQuiTueSaMaman ?

                                          C'est faisable mais est-ce courant dans des projets de créer autant de classes ?
                                          Et maintenant si j'dois ajouter une fonctionnalité dans Arme à laquelle je n'aurais pas pensé avant, je devrais implémenter la méthode dans chacune des classes ArmeNomDArme ?

                                          Merci encore :)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            14 janvier 2009 à 10:56:05

                                            ben si tu créé une class Arme de bases, tu peux faire des sous class qui implémenterons celle-ci
                                            qui hériterons donc déja de toutes les variable de ta class arme
                                            donc ce que tu fais dans ta classe Arme de base, toutes les ArmeNomdArme en hériterons et tu pourras y faire appel (si tu as mis tes variable en "protected" et pas en private)
                                            je vais relire le design pattern un coup pour voir si je me trompe pas sur la manière de faire :)

                                            mais ça me semble le plus logique :o

                                            edit ; enfin note, si tu ne fonctionnes qu'avec du text, tu as juste a faire une methode "Attaque(int Force){System.out.println(...);}" dans chaque arme :)
                                            ou le text change en fonction de la force :)


                                            Au passage XD pour compliquer encore un peu ton schéma :p
                                            tu devrais faire des class qui fonctionne en arbre :

                                            Interface Arme
                                            -Class Epee implements Arme
                                            --Class ClayMore implements Epee
                                            --Class katana implements Epee
                                            -Class Arc implements Arme
                                            --Class Arc_Long implements Arc



                                            fin breftt classer :) parce que comme ça tu peux faire des fonction de calcul de bases dans la sous class qui seront réutilisé par les class en bout d'arbre ...
                                            par exemple la fonction calcul de dégats, sera la même pour tous les Epee
                                            ou bien la fonction qui vérifie que l'adversaire est à la portée de l'arme ...
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Intéraction avec console

                                            × 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