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

Diff of /ambar/interfazpnj.py

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

revision 1.4 by amoyav, Mon Apr 8 21:01:51 2002 UTC revision 1.5 by amoyav, Tue Aug 13 08:28:27 2002 UTC
# Line 33  from timer import * Line 33  from timer import *
33  class InterfazPNJ(Controlador):  class InterfazPNJ(Controlador):
34      """Interfaz controla directamente a una instancia de clase PersonajeNoJugador.      """Interfaz controla directamente a una instancia de clase PersonajeNoJugador.
35    
36      El control es automátic, no necesita intervención de ningún jugador. De momento      El control es automático, no necesita intervención de ningún jugador. De momento
37      es muy básico, sólo sabe quedarse quieto en una sala y responder a un ataque.      es muy básico, sólo sabe quedarse quieto en una sala y responder a un ataque.
38            
39      La clase funciona como una maquina de estados, que acepta los siguientes      La clase funciona como una maquina de estados, que acepta los siguientes
# Line 47  class InterfazPNJ(Controlador): Line 47  class InterfazPNJ(Controlador):
47       - susurra_pesonaje: otro personaje susurra algo a éste.       - susurra_pesonaje: otro personaje susurra algo a éste.
48       - grita_personaje: otro personaje dice algo a todos los personajes del mundo       - grita_personaje: otro personaje dice algo a todos los personajes del mundo
49       - ataca_personaje: otro personaje ataca a este       - ataca_personaje: otro personaje ataca a este
50        
51      Contiene los siguientes atributos:      Contiene los siguientes atributos:
52            
53       - personaje (Personaje): el personaje que controlamos       - __personaje (Personaje): el personaje que controlamos
54       - estado (string): el estado en el que se encuentra el interfaz       - __estado (string): el estado en el que se encuentra el interfaz
55       - sub_estado (int): algunos estados tienen fases intermedias. Si no, None.       - __sub_estado (int): algunos estados tienen fases intermedias. Si no, None.
56       - timer (Timer): temporizador usado opcionalmente       - __timer (Timer): temporizador usado opcionalmente
57       - oponente (Personaje): otro personaje con quien el nuestro está combatiendo       - __oponente (Personaje): otro personaje con quien el nuestro está combatiendo
58            
59       Los siguientes atributos provocan ajustes automáticos al ser modificados:       Los siguientes atributos provocan ajustes automáticos al ser modificados:
60    
61       - personaje: se modifica también al personaje para que tenga a este interfaz como       - __personaje: se modifica también al personaje para que tenga a este interfaz como
62                    controlador                    controlador
63       """       """
64    
65    
66      def __init__(self):      def __init__(self):
67          self.__dict__["personaje"] = None  # El personaje se inicializa más tarde          """Crea un interfaz nuevo para un personaje recien creado o cargado de disco."""
68          self.__dict__["estado"] = ""          self.__personaje = None
69          self.__dict__["sub_estado"] = None          self.__estado = ""
70          self.__dict__["timer"] = None          self.__sub_estado = None
71          self.__dict__["oponente"] = None          self.__timer = None
72            self.__oponente = None
73          self.estado_normal()          self.estado_normal()
   
   
     def __setattr__(self, name, value):  
         """Realiza ajustes automáticos al modificar cualquier parámetro"""  
   
         if name == "personaje":  
             # Si es personaje, liberar al anterior y controlar al nuevo.  
             if (self.personaje != None): self.personaje.controlador = None  
             self.__dict__["personaje"] = value  
             if (self.personaje != None): self.personaje.controlador = self  
         else:  
             # En otro caso, asignar y ya esta  
             self.__dict__[name] = value  
74                            
75                            
76      def __del__(self):      def __del__(self):
77          """Realiza ajustes automáticos al ser destruido"""          """Realiza ajustes automáticos al ser destruido"""
78                    if self.__personaje != None:
79          # Liberar al personaje que estamos controlando              self.liberar_personaje()
80          self.personaje = None  
81    
82        def personaje(self):
83            return self.__personaje
84    
85    
86        def controlar_personaje(self, personaje):
87            """Pasar a estar controlando un personaje.
88            
89            Requiere:
90              self.__personaje == None
91              personaje != None
92            """
93            self.__personaje = personaje
94            self.__personaje.controlar(self)
95    
96    
97        def liberar_personaje(self):
98            """Soltar al personaje actual y dejarlo libre.
99    
100            Requiere:
101              self.__personaje != None
102            """
103            self.__personaje.liberar()
104            self.__personaje = None
105                    
106                    
107      # ----------------------------      # ----------------------------
# Line 111  class InterfazPNJ(Controlador): Line 123  class InterfazPNJ(Controlador):
123          nombre_sala_destino -- el nombre de la sala a donde va          nombre_sala_destino -- el nombre de la sala a donde va
124          """          """
125          pass  # aqui no se me ocurre nada          pass  # aqui no se me ocurre nada
126    
127    
128        def describir_entorno(self, mensaje):
129            """Metodo llamado cuando un personaje describe una accion.
130                    
131            personaje -- el personaje que actçua.
132            acción -- el texto que escribe.
133            """
134            
135            pass # aqui tampoco se me ocurre nada, en principio
136    
137                                                    
138                                                    
139      def actua_personaje(self, personaje, accion):      def actua_personaje(self, personaje, accion):
# Line 139  class InterfazPNJ(Controlador): Line 162  class InterfazPNJ(Controlador):
162          """          """
163          pass  # se podría hacer que los PNJ entiendan conversaciones          pass  # se podría hacer que los PNJ entiendan conversaciones
164    
165    
166      def susurra_personaje(self, personaje, mensaje):      def susurra_personaje(self, personaje, mensaje):
167          """Metodo llamado cuando otro personaje susurra algo a éste.          """Metodo llamado cuando otro personaje susurra algo a éste.
168                    
# Line 163  class InterfazPNJ(Controlador): Line 187  class InterfazPNJ(Controlador):
187          personaje -- el personaje que ha atacado.          personaje -- el personaje que ha atacado.
188          """          """
189                    
190          # Llamar a la función correspondiente según estado  #%% funciones de combate desactivadas
191          nombre_func = "ataque_" + self.estado  #%%        # Llamar a la función correspondiente según estado
192          if self.sub_estado != None: nombre_func += "_" + str(self.sub_estado)  #%%        nombre_func = "ataque_" + self.estado
193            #%%        if self.sub_estado != None: nombre_func += "_" + str(self.sub_estado)
194          func = getattr(self, nombre_func, None)  #%%        
195          if func == None:  #%%        func = getattr(self, nombre_func, None)
196              print "ERROR: recibido ataque en estado " + self.estado + \  #%%        if func == None:
197                    ((self.sub_estado != None and "_" + str(self.sub_estado)) or "") + \  #%%            print "ERROR: recibido ataque en estado " + self.estado + \
198                    ((self.personaje != None and  "(" + self.personaje.nombre + ")") or "")  #%%                  ((self.sub_estado != None and "_" + str(self.sub_estado)) or "") + \
199          else:  #%%                  ((self.personaje != None and  "(" + self.personaje.nombre + ")") or "")
200              func(personaje, result)  #%%        else:
201    #%%            func(personaje, result)
202                    
203                    
204      def lanzar_timer(self, segundos):      def lanzar_timer(self, segundos):
# Line 214  class InterfazPNJ(Controlador): Line 239  class InterfazPNJ(Controlador):
239          self.sub_estado = None          self.sub_estado = None
240                            
241                            
242      def ataque_normal(self, personaje, result):  #%% funciones de combate desactivadas
243          # Al recibir un ataque, pasamos inmediantamente a estado combate  #%%    def ataque_normal(self, personaje, result):
244            #%%        # Al recibir un ataque, pasamos inmediantamente a estado combate
245          self.oponente = personaje  #%%        
246          self.cbt_empieza_combate_defiendes()  #%%        self.oponente = personaje
247          self.cbt_te_pegan(result)  #%%        self.cbt_empieza_combate_defiendes()
248            #%%        self.cbt_te_pegan(result)
249          if (self.personaje.estado == "muerto") or (self.oponente.estado == "muerto"):  #%%        
250              self.cbt_termina_combate()  #%%        if (self.personaje.estado == "muerto") or (self.oponente.estado == "muerto"):
251              self.estado_normal()  #%%            self.cbt_termina_combate()
252          else:  #%%            self.estado_normal()
253              # Al poner un timer de 3 segundos, el combate funciona como  #%%        else:
254              # una sucesion de golpes alternados cada 3 segundos.  #%%            # Al poner un timer de 3 segundos, el combate funciona como
255              self.lanzar_timer(3)  #%%            # una sucesion de golpes alternados cada 3 segundos.
256              self.estado_combate()  #%%            self.lanzar_timer(3)
257    #%%            self.estado_combate()
258    #%%
259      # --------------  #%%
260      # ESTADO COMBATE  #%%    # --------------
261      # --------------  #%%    # ESTADO COMBATE
262                #%%    # --------------
263                #%%            
264      def estado_combate(self):  #%%            
265          self.estado = "combate"  #%%    def estado_combate(self):
266          self.sub_estado = None  #%%        self.estado = "combate"
267    #%%        self.sub_estado = None
268    #%%
269      def ataque_combate(self, oponente, result):  #%%
270          self.cbt_te_pegan(result)          #%%    def ataque_combate(self, oponente, result):
271          if (self.personaje.estado == "muerto") or (self.oponente.estado == "muerto"):  #%%        self.cbt_te_pegan(result)        
272              self.cbt_termina_combate()  #%%        if (self.personaje.estado == "muerto") or (self.oponente.estado == "muerto"):
273              self.estado_normal()  #%%            self.cbt_termina_combate()
274          else:  #%%            self.estado_normal()
275              self.estado_combate()  #%%        else:
276                #%%            self.estado_combate()
277            #%%            
278      def timeout_combate(self):  #%%        
279          self.cbt_pegar()          #%%    def timeout_combate(self):
280          if (self.personaje.estado == "muerto") or (self.oponente.estado == "muerto"):  #%%        self.cbt_pegar()        
281              self.cbt_termina_combate()  #%%        if (self.personaje.estado == "muerto") or (self.oponente.estado == "muerto"):
282              self.estado_normal()  #%%            self.cbt_termina_combate()
283          else:  #%%            self.estado_normal()
284              self.lanzar_timer(6)  #%%        else:
285              self.estado_combate()            #%%            self.lanzar_timer(6)
286            #%%            self.estado_combate()          
287            #%%        
288      def cbt_empieza_combate_defiendes(self):  #%%        
289          pass  #%%    def cbt_empieza_combate_defiendes(self):
290    #%%        pass
291            #%%
292      def cbt_pegar(self):  #%%        
293          self.personaje.hablar("\n" + color(33) + "\n" + self.personaje.nombre +  #%%    def cbt_pegar(self):
294                                " ataca a " + self.oponente.nombre + finl)  #%%        self.personaje.hablar("\n" + color(33) + "\n" + self.personaje.nombre +
295            #%%                              " ataca a " + self.oponente.nombre + finl)
296          result = self.personaje.ataque_fisico(self.oponente)  #%%        
297            #%%        result = self.personaje.ataque_fisico(self.oponente)
298          if result == Personaje.ATAQUE_EXITO:  #%%        
299              self.personaje.hablar(self.personaje.nombre + " ha conseguido golpear")  #%%        if result == Personaje.ATAQUE_EXITO:
300          elif result == Personaje.ATAQUE_FALLADO:  #%%            self.personaje.hablar(self.personaje.nombre + " ha conseguido golpear")
301              self.personaje.hablar(self.personaje.nombre + " ha fallado, su ataque no hace nada")  #%%        elif result == Personaje.ATAQUE_FALLADO:
302          elif result == Personaje.ATAQUE_CRITICO:  #%%            self.personaje.hablar(self.personaje.nombre + " ha fallado, su ataque no hace nada")
303              self.personaje.hablar(self.personaje.nombre + " ha ejecutado un golpe impresionante")  #%%        elif result == Personaje.ATAQUE_CRITICO:
304          elif result == Personaje.ATAQUE_PIFIA:  #%%            self.personaje.hablar(self.personaje.nombre + " ha ejecutado un golpe impresionante")
305              self.personaje.hablar("¡" + self.personaje.nombre + " ha fallado estrepitosamente, se daña a si mismo/a!")  #%%        elif result == Personaje.ATAQUE_PIFIA:
306          else:  #%%            self.personaje.hablar("¡" + self.personaje.nombre + " ha fallado estrepitosamente, se daña a si mismo/a!")
307              print "ERROR: recibido resultado de combate " + str(result) + \  #%%        else:
308                    " (" + self.personaje.nombre + ")"  #%%            print "ERROR: recibido resultado de combate " + str(result) + \
309                      #%%                  " (" + self.personaje.nombre + ")"
310          self.personaje.hablar("A " + self.personaje.nombre + " le quedan " +  #%%                  
311                                str(self.personaje.vida) + " puntos de vida")  #%%        self.personaje.hablar("A " + self.personaje.nombre + " le quedan " +
312          self.personaje.hablar("Y a " + self.oponente.nombre + " le quedan " +  #%%                              str(self.personaje.vida) + " puntos de vida")
313                                str(self.oponente.vida) + " puntos de vida")  #%%        self.personaje.hablar("Y a " + self.oponente.nombre + " le quedan " +
314                      #%%                              str(self.oponente.vida) + " puntos de vida")
315          if self.oponente.estado == "muerto":  #%%                  
316              self.cbt_oponente_muerto()  #%%        if self.oponente.estado == "muerto":
317          elif self.personaje.estado == "muerto":  #%%            self.cbt_oponente_muerto()
318              self.cbt_personaje_muerto()  #%%        elif self.personaje.estado == "muerto":
319                #%%            self.cbt_personaje_muerto()
320        #%%            
321      def cbt_te_pegan(self, result):  #%%    
322          if self.oponente.estado == "muerto":  #%%    def cbt_te_pegan(self, result):
323              self.cbt_oponente_muerto()  #%%        if self.oponente.estado == "muerto":
324          elif self.personaje.estado == "muerto":  #%%            self.cbt_oponente_muerto()
325              self.cbt_personaje_muerto()  #%%        elif self.personaje.estado == "muerto":
326                                  #%%            self.cbt_personaje_muerto()
327        #%%                              
328      def cbt_oponente_muerto(self):  #%%    
329          self.personaje.hablar("\n" + color(31) + self.oponente.nombre +  #%%    def cbt_oponente_muerto(self):
330                                " ha muerto. RIP." + finl)  #%%        self.personaje.hablar("\n" + color(31) + self.oponente.nombre +
331          # puntos de experiencia, objetos... (aún sin hacer)  #%%                              " ha muerto. RIP." + finl)
332            #%%        # puntos de experiencia, objetos... (aún sin hacer)
333            #%%        
334      def cbt_personaje_muerto(self):  #%%        
335          # pues no se, habra que ver que hacemos aqui  #%%    def cbt_personaje_muerto(self):
336          pass  #%%        # pues no se, habra que ver que hacemos aqui
337            #%%        pass
338            #%%        
339      def cbt_termina_combate(self):  #%%        
340          self.oponente = None  #%%    def cbt_termina_combate(self):
341          if self.timer != None:  #%%        self.oponente = None
342              self.timer.stop()  #%%        if self.timer != None:
343              self.timer = None  #%%            self.timer.stop()
344    #%%            self.timer = None
345    
346    
347  # Código para pruebas unitarias del módulo.  # Código para pruebas unitarias del módulo.

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

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