/[ambar]/ambar/personajenojugador.py
ViewVC logotype

Diff of /ambar/personajenojugador.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by pabloruiz, Wed Jan 23 09:01:43 2002 UTC revision 1.4 by amoyav, Tue Aug 13 08:28:27 2002 UTC
# Line 29  DIR_DESC_PNJS = 'desc_pnjs' Line 29  DIR_DESC_PNJS = 'desc_pnjs'
29    
30    
31  class PersonajeNoJugador(Personaje):  class PersonajeNoJugador(Personaje):
32      """Cualquier personaje (monstruo), no controlado por un jugador.      """Cualquier personaje no controlado por un jugador.
33    
34        Los PNJs siempre tienen un controlador activo, excepto cuando son guardados a disco
35        al volcarse junto con una sala. Al ser recuperados, se les vuelve a acoplar
36        inmediatamente un controlador.
37            
38      Contiene los atributos comunes de un personaje, y ademas:      Contiene los atributos comunes de un personaje, y ademas:
39       - posesion (string): nombre del objeto que guarda este personaje       - posesion (string): nombre del objeto que guarda este personaje
40            
41        Invariantes:
42            id tiene formato "id_fichero%clave_unica"
43            posesion != None
44            controlador != None
45      """      """
46    
47      def __init__(self, nombre):      def __init__(self, id, sala):
48          Personaje.__init__(self, nombre)          """Método para crear un nuevo personaje no jugador.
49            
50          fichero = open(path.join(DIR_DESC_PNJS, self.nombre), "r")          Al crearlo se le debe pasar un id unico, que no se repita dentro del juego
51          peo = fichero.readline() # ignorar la primera linea (el nombre ya lo tenemos)          en ninguna otra instancia. Para ello, se añade al id que identifica el fichero
52          self.nombre_largo = fichero.readline()[:-1]          un simbolo % y un numero obtenido con PersonajeNoJugador_nuevo_id().
53          self.experiencia = int(fichero.readline())  
54          self.vida = int(fichero.readline())          Requiere:
55          self.atrib["fuerza"] = int(fichero.readline())            id tiene formato "id_fichero%clave_unica"
56          self.atrib["destreza"] = int(fichero.readline())            sala != None
57          self.atrib["constitucion"] = int(fichero.readline())          """
58          self.atrib["inteligencia"] = int(fichero.readline())          Personaje.__init__(self, id, sala)
59          self.atrib["sabiduria"] = int(fichero.readline())  
60          self.atrib["carisma"] = int(fichero.readline())          # DUMMY: de momento rellenamos los atributos a piñon.
61          self.posesion = fichero.readline()[:-1]          self.__dict__["nombre"] = "La Tutora"
62          fichero.close()          self.__dict__["descripcion"] = [{"dificultad":0, "texto":"Una anciana mujer, de aspecto respetable. Va vestida con una túnica encapuchada."}]
63            self.__dict__["experiencia"] = 0
64            self.__dict__["nivel"] = 0
65            self.__dict__["vida"] = 1
66            self.__dict__["volumen"] = 1
67            self.__dict__["estado"] = "vivo"
68            self.__dict__["controlador"] = None
69            self.__dict__["atrib"] = { "fuerza":10,
70                                       "destreza":10,
71                                       "constitucion":10,
72                                       "inteligencia":10,
73                                       "sabiduria":10,
74                                       "carisma":10 }
75            self.__dict__["idiomas"] = { Idioma_oestron:5,
76                                         Idioma_enano:3,
77                                         Idioma_quenya:3,
78                                         Idioma_orco:3 }
79    
80            self.posesion = ""
81    
82            self.controlador_automatico()
83    
84    
85        def controlador_automatico(self):
86            """Instancia un controlador automatico para este PNJ y se lo acopla.
87    
88                    El tipo de controlador vendra determinado por los atributos de este
89            PNJ segun se leen del fichero de descripcion.
90    
91            Requiere:
92                self.controlador == None
93    
94            Asegura:
95                self.controlador != None
96            """
97            # De momento, a piñon tambien.
98            if self.id.split('%')[0] == "tutora":
99                    from interfazpnjhablante import InterfazPNJHablante
100                    controlador = InterfazPNJHablante(self.id)
101                    controlador.controlar_personaje(self)
102            else:
103                    from interfazpnj import InterfazPNJ
104                    controlador = InterfazPNJ()
105                    controlador.controlar_personaje(self)
106    
107    
108    # Metodos que se refieren a la clase pero tienen ambito de clase,
109    # y no de instancia
110    
111    def PersonajeNoJugador_nuevo_id():
112        global PersonajeNoJugador_contador_de_ids
113        PersonajeNoJugador_contador_de_ids += 1
114        return str(PersonajeNoJugador_contador_de_ids)
115    
116    
117    PersonajeNoJugador_contador_de_ids = 0
118    
119  # Código para pruebas unitarias del módulo.  # Código para pruebas unitarias del módulo.
120    
121  if (__name__ == '__main__'):  if (__name__ == '__main__'):
122      enc = PersonajeNoJugador("murcielago")      print "No hay prueba unitaria de módulo."
123      print ''  
     print 'Cargado pnj'  
     print ' nombre = ' + str(enc.nombre)  
     print ' nombre_largo = ' + str(enc.nombre_largo)  
     print ' experiencia = ' + str(enc.experiencia)  
     print ' nivel = ' + str(enc.nivel)  
     print ' vida = ' + str(enc.vida)  
     print ' volumen = ' + str(enc.volumen)  
     print ' atributos =', enc.atrib  
     print ' estado = ' + str(enc.estado)  
     print ' posesion = ' + str(enc.posesion)  

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26