Partage
  • Partager sur Facebook
  • Partager sur Twitter

Methode affichage d'un mini RPG texte

Sujet résolu
    6 août 2015 à 21:16:24

    Bonsoir à tous,

    je viens demander de l'aide sur le forum pour un problème, comme expliqué dans le titre, d'une méthode affichage dans un mini-rpg en texte.

    J'essaye de séparé la partie "moteur" de la partie "graphique" du jeu (sous conseil d'un ami) (Je ne sais pas si c'est important de le précisé, mais si ca peut permettre de facilité la compréhension du code, pourquoi pas.)

    Mon objectif est de permettre d'afficher Le caractère "J" (Qui correspond à la position du Joueur) à un endroit différent à chaque déplacement (Logique, si je me déplace a droite, alors le caractère "J" se doit d'être décalé a droite)

    TOUT conseil est bien entendu la bienvenus. Je vous remercie d'avance de prendre un peu de temps pour m'aider (Ou m'orienter).

    Ci-joins le code source des deux fichiers actuelle.

    Class Carte :

    class Carte():
        
        def __init__(self):
            self.structure = list()
    
            
        def generer_liste(self):
            """
        methode qui genere la map en liste a partir d'un fichier
    
            """
            
            with open ("cartejeu.txt","r") as fichier:
                structure_lvl = []
                
                for ligne in fichier:
                    ligne_lvl = []
                    
                    for j in ligne:
                        if j != '\n':
                            ligne_lvl.append(j)
    
                    structure_lvl.append(ligne_lvl)       
                self.structure = structure_lvl
                        
                                
        def affichage(self,xpos,ypos):
            """
        methode qui affiche la map a l'ecran
        
            """
            affichage = ""
            
            for ligne in self.structure:
                for j in ligne:
                    affichage += j
                affichage += '\n'
            print (affichage)
                    
            
    
    c = Carte()
    c.generer_liste()
    c.affichage(1,2)
    

    Class Joueur :

    class Joueur():
    
        def __init__(self):
            self.hp = 10
            self.attack_base = 1 #Rajouter random ici (1,3)
            self.defense_base = 2 #pareil
    
            self.posix = 0
            self.posiy = 0
            
        def mouvement(self,direction):
            """
            methode mouvement du personnage
    
            """
            if direction == up:
                self.posiy +=1
            if direction == down:
                self.posiy -=1
            if direction == left:
                self.posix -=1
            if direction == right:
                self.posix +=1
    
    
        def experience(self):
            """
            methode qui attribue l'experience du joueur lorsqu'il
            elimine a monstre
    
            """
            
            pass
    

    Et le fichier txt ressemble a ceci:

    J__M_________

    ______MM_____

    _M______MMM__

    _____________

    ___M_MMM_____

    ________MMM__

    M__M_________

    ___M___M_____

    _M______MMM__

    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2015 à 23:02:35

      Salut,

      Dans ta méthode generer_liste() tu n'as pas besoin de créer de variable intermédiaire (ici que tu appelle structure_level). Tu peux directement utiliser l'attribut d'instance structure ;):

      def generer_liste(self):
              """
          methode qui genere la map en liste a partir d'un fichier
       
              """
               
              with open ("cartejeu.txt","r") as fichier:
                  for ligne in fichier:
                      ligne_lvl = []
                       
                      for j in ligne:
                          if j != '\n':
                              ligne_lvl.append(j)
                      #J'utilise directement structure
                      self.structure.append(ligne_lvl)

      Dans ta méthode mouvement() que sont up, down, right et left? Est-ce les flèches de direction? Je ne suis pas sûr que c'est comme ça qu'elles s'appellent informatiquement parlant (mais peut-être que si au final. Je sais pas. C'est à tester).

      Sinon pour t'orienter dans la suite, il faudra sûrement que tu créé (dans l'objet Carte) une méthode qui met à jour ta carte avec la nouvelle position du joueur. Il faudra donc garder en mémoire l'ancienne position du joueur, sa nouvelle position, et la case sur laquelle le joueur est. Autrement dit, à chaque mise à jour, il faudra déplacer la lettre "J" à sa nouvelle position (en regardant bien si c'est possible: mur, limite de la carte, ...) et mettre à son ancienne position l'ancienne valeur de la case ^^

      • Partager sur Facebook
      • Partager sur Twitter
      Précepte: Le mieux est l'ennemi du bien
        9 août 2015 à 12:47:57

        Merci, effectivement ce n'étais pas nécéssaire, je l'ai donc supprimer (structure_level)

        Pour le problème d'affichage, j'ai finalement réussi a le résoudre en faisait ça :

            def affichage(self,xpos,ypos):
                """
            methode qui affiche la map a l'ecran
            
                """
                affichage = ""
                
                for i2, ligne in enumerate(self.structure):
                    for i, j in  enumerate(ligne):
                        if i2 == ypos and i == xpos:
                            
                            affichage += "J"
                        else :
                        
                            affichage += j
                    affichage += '\n'
                print (affichage)



        • Partager sur Facebook
        • Partager sur Twitter

        Methode affichage d'un mini RPG texte

        × 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