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

Diff of /ambar/objeto.py

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

revision 2.5 by amoyav, Thu Apr 10 15:08:04 2003 UTC revision 2.6 by amoyav, Sat May 31 21:24:44 2003 UTC
# Line 35  from personaje import * Line 35  from personaje import *
35  from personajejugador import *  from personajejugador import *
36  from personajenojugador import *  from personajenojugador import *
37  from interfazpnj import *  from interfazpnj import *
38  from suceso import *  from guion import *
39  from utils import *  from utils import *
40    
41    
# Line 64  class Objeto(object): Line 64  class Objeto(object):
64      CATEGORIAS = [ 'mobiliario', 'arma', 'recipiente', 'joya', 'armadura', 'herramienta',      CATEGORIAS = [ 'mobiliario', 'arma', 'recipiente', 'joya', 'armadura', 'herramienta',
65                     'vestimenta', 'escritura', 'recipìente', 'comestible', 'accesorio' ]                     'vestimenta', 'escritura', 'recipìente', 'comestible', 'accesorio' ]
66    
67      USOS = [ 'comer', 'beber', 'poner', 'lanzar', 'usar' ]      SUCESOS = [ 'personaje_come', 'personaje_bebe', 'personaje_lanza', 'personaje_usa',
68                    'personaje_pone_cabeza', 'personaje_pone_cuello', 'personaje_pone_tronco',
69                    'personaje_pone_brazo_izq', 'personaje_pone_brazo_der',
70                    'personaje_pone_mano_izq', 'personaje_pone_mano_der',
71                    'personaje_pone_dos_manos', 'personaje_pone_piernas',
72                    'personaje_pone_tobillo_izq', 'personaje_pone_tobillo_der',
73                    'personaje_pone_pie_izq', 'personaje_pone_pie_der',
74                    'personaje_quita_cabeza', 'personaje_quita_cuello', 'personaje_quita_tronco',
75                    'personaje_quita_brazo_izq', 'personaje_quita_brazo_der',
76                    'personaje_quita_mano_izq', 'personaje_quita_mano_der',
77                    'personaje_quita_dos_manos', 'personaje_quita_piernas',
78                    'personaje_quita_tobillo_izq', 'personaje_quita_tobillo_der',
79                    'personaje_quita_pie_izq', 'personaje_quita_pie_der' ]
80    
81      POSICIONES = [ 'cabeza', 'cuello', 'tronco', 'brazo-izq', 'brazo-der', 'mano-izq',  #    USOS = [ 'comer', 'beber', 'poner', 'lanzar', 'usar' ]
                    'mano-der', 'dos-manos', 'piernas', 'tobillo-izq', 'tobillo-der',  
                    'pie-izq', 'pie-der' ]  
82    
83    
84      # Atributos públicos de la clase      # Atributos públicos de la clase
# Line 220  class Objeto(object): Line 230  class Objeto(object):
230                              aura in range(0,100)                              aura in range(0,100)
231                          """)                          """)
232    
233      def __leer_usos(self): return self.__usos      def __leer_sucesos(self): return self.__sucesos
234    
235      usos = property(__leer_usos,      sucesos = property(__leer_sucesos,
236                      doc="""({String:any}[]): lista de usos del objeto.                         doc="""({String:Guion}: respuestas a los sucesos del objeto.
237    
238                          Cada uso es un diccionario:                         El índice del diccionario es el tipo del suceso, y asociado a él va un guion
239                           - "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.)                         que se ejecuta como respuesta.
240                           - "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone.  
241                           - "requisitos" (Requisito[]): lista de requisitos para poder descubrir el                         Invariantes:
242                                                         uso o realizarlo.                             sucesos != None
243                           - "sucesos" (Suceso[]): lista de sucesos que ocurren al realizar este uso.                             sucesos.keys(i) in SUCESOS
244                           """)
245                          Invariantes:  
246                              usos != None  #    def __leer_usos(self): return self.__usos
247                              len(usos) >= 0  #
248                              usos[i]["tipo"] in USOS  #    usos = property(__leer_usos,
249                              usos[i]["posicion"] in POSICIONES  #                    doc="""({String:any}[]): lista de usos del objeto.
250                              usos[i]["requisitos"] != None  #
251                              usos[i]["sucesos"] != None  #                       Cada uso es un diccionario:
252                          """  #                        - "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.)
253                          """({string:any}[]): lista de usos del objeto.  #                        - "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone.
254    #                        - "requisitos" (Requisito[]): lista de requisitos para poder descubrir el
255                          Cada uso es un diccionario:  #                                                      uso o realizarlo.
256                           - "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.)  #                        - "acciones" (Accion[]): lista de acciones que ocurren al realizar este uso.
257                           - "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone  #
258                           - "gasto" (int): el numero de cargas que consume cada uso  #                       Invariantes:
259                           - "msg" (string): el mensaje que aparece cuando se usa  #                           usos != None
260                           - "duracion" (int): el numero de segundos que dura el efecto (0 = indeterminado)  #                           len(usos) >= 0
261                           - "requisitos" ({string:any}[]): lista de requisitos del uso, siendo cada requisito  #                           usos[i]["tipo"] in USOS
262                                                            un diccionario:  #                           usos[i]["posicion"] in Personaje.POSICIONES
263                                - "atributo" (string): el atributo a comprobar  #                           usos[i]["requisitos"] != None
264                                - "valor" (int): el valor mínimo que deberá tener el atributo  #                           usos[i]["acciones"] != None
265                                - "msg" (string): el mensaje que sale si el atributo no llega al mínimo  #                       """
266                           - "efectos" ({string:any}[]): lista de efectos que produce el uso, siendo cada  ##                      """({string:any}[]): lista de usos del objeto.
267                                                         efecto un diccionario:  ##
268                                - "atributo" (string): el atributo a modificar  ##                      Cada uso es un diccionario:
269                                - "valor" (int): el número de puntos que sube o baja (si es negativo)  ##                       - "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.)
270                                - "duracion" (int): duración del efecto en segundos (0 = ilimitado)  ##                       - "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone
271                                - "msg" (string): el mensaje que sale cuando ocurre el efecto  ##                       - "gasto" (int): el numero de cargas que consume cada uso
272                                  ##                       - "msg" (string): el mensaje que aparece cuando se usa
273                          Invariantes:  ##                       - "duracion" (int): el numero de segundos que dura el efecto (0 = indeterminado)
274                              usos != None  ##                       - "requisitos" ({string:any}[]): lista de requisitos del uso, siendo cada requisito
275                              len(usos) >= 0  ##                                                        un diccionario:
276                              usos[i]["tipo"] in USOS  ##                            - "atributo" (string): el atributo a comprobar
277                              usos[i]["posicion"] in POSICIONES  ##                            - "valor" (int): el valor mínimo que deberá tener el atributo
278                              usos[i]["gasto"] >= 0  ##                            - "msg" (string): el mensaje que sale si el atributo no llega al mínimo
279                              usos[i]["msg"] != None  ##                       - "efectos" ({string:any}[]): lista de efectos que produce el uso, siendo cada
280                              usos[i]["duracion"] >= 0  ##                                                     efecto un diccionario:
281                              usos[i]["requisitos"] != None  ##                            - "atributo" (string): el atributo a modificar
282                              usos[i]["requisitos"][j]["atributo"] != None  ##                            - "valor" (int): el número de puntos que sube o baja (si es negativo)
283                              usos[i]["requisitos"][j]["valor"] in range(0,100)  ##                            - "duracion" (int): duración del efecto en segundos (0 = ilimitado)
284                              usos[i]["requisitos"][j]["msg"] != None  ##                            - "msg" (string): el mensaje que sale cuando ocurre el efecto
285                              usos[i]["efectos"] != None  ##                            
286                              usos[i]["efectos"][k]["atributo"] != None  ##                      Invariantes:
287                              usos[i]["efectos"][k]["duracion"] >= 0  ##                          usos != None
288                              usos[i]["efectos"][k]["msg"] != None  ##                          len(usos) >= 0
289                          """)  ##                          usos[i]["tipo"] in USOS
290    ##                          usos[i]["posicion"] in Personaje.POSICIONES
291    ##                          usos[i]["gasto"] >= 0
292    ##                          usos[i]["msg"] != None
293    ##                          usos[i]["duracion"] >= 0
294    ##                          usos[i]["requisitos"] != None
295    ##                          usos[i]["requisitos"][j]["atributo"] != None
296    ##                          usos[i]["requisitos"][j]["valor"] in range(0,100)
297    ##                          usos[i]["requisitos"][j]["msg"] != None
298    ##                          usos[i]["efectos"] != None
299    ##                          usos[i]["efectos"][k]["atributo"] != None
300    ##                          usos[i]["efectos"][k]["duracion"] >= 0
301    ##                          usos[i]["efectos"][k]["msg"] != None
302    ##                      """)
303    
304      # Constructor      # Constructor
305    
# Line 321  class Objeto(object): Line 344  class Objeto(object):
344    
345          elem_propiedades = elem_objeto.getElementsByTagName('propiedades')[0]          elem_propiedades = elem_objeto.getElementsByTagName('propiedades')[0]
346          self.__parsear_propiedades(elem_propiedades)          self.__parsear_propiedades(elem_propiedades)
347    
348            elem_sucesos = elem_objeto.getElementsByTagName('sucesos')[0]
349            self.__parsear_sucesos(elem_sucesos)
350                    
351          elem_usos = elem_objeto.getElementsByTagName('usos')[0]  #       elem_usos = elem_objeto.getElementsByTagName('usos')[0]
352          self.__parsear_usos(elem_usos)  #       self.__parsear_usos(elem_usos)
353                    
354          #self.__iniciar_parseador(doc_xml)          #self.__iniciar_parseador(doc_xml)
355          #self.__parsear_objeto(doc_xml)          #self.__parsear_objeto(doc_xml)
# Line 432  class Objeto(object): Line 458  class Objeto(object):
458              self.__aura = int(extraer_atributo_xml(elem_propiedades,'aura'))              self.__aura = int(extraer_atributo_xml(elem_propiedades,'aura'))
459          else:          else:
460              self.__aura = 1              self.__aura = 1
           
     
461    
     def __parsear_usos(self, elem_usos):  
         """Extrae toda la información de los usos del objeto."""  
           
         limpiar_nodos_text_xml(elem_usos)  
         self.__usos = []  
462    
463          for nodo_uso in elem_usos.childNodes[:]:      def __parsear_sucesos(self, elem_sucesos):
464            """Extrae toda la información de respuesta a sucesos del objeto."""
465    
466              uso_tipo = extraer_atributo_xml(nodo_uso,'tipo')          self.__sucesos = {}
             if nodo_uso.hasAttribute('posicion'):  
                 uso_posicion = extraer_atributo_xml(nodo_uso,'posicion')  
             else:  
                 uso_posicion = ''  
 #            if nodo_uso.hasAttribute('gasto'):  
 #               uso_gasto = int(extraer_atributo_xml(nodo_uso,'gasto'))  
 #           else:  
 #               uso_gasto = 0  
 #           if nodo_uso.hasAttribute('msg'):  
 #               uso_msg = extraer_atributo_xml(nodo_uso,'msg')  
 #            else:  
 #               if uso_tipo == 'comer':  
 #                   uso_msg = 'Te comes ' + self.__nombre  
 #               elif uso_tipo == 'beber':  
 #                   uso_msg = 'Bebes ' + self.__nombre  
 #               elif uso_tipo == 'poner':  
 #                   uso_msg = 'Te pones ' + self.__nombre + ' en ' + uso_posicion  
 #               elif uso_tipo == 'lanzar':  
 #                   uso_msg = 'Arrojas ' + self.__nombre  
 #               else:  
 #                   uso_msg = 'Usas ' + self.__nombre  
 #            if nodo_uso.hasAttribute('duracion'):  
 #               uso_duracion = int(extraer_atributo_xml(nodo_uso,'duracion'))  
 #           else:  
 #               uso_duracion = 0  
           
             #Siguiente nivel del árbol  
             limpiar_nodos_text_xml(nodo_uso)  
               
             uso_requisitos = []  
             uso_sucesos = []  
467    
468              for nodo_requi_suce in nodo_uso.childNodes[:]:          for elem_suceso in elem_sucesos.childNodes:
469                suceso = extraer_nombre_xml(elem_suceso)
470                if suceso in Objeto.SUCESOS:
471                    respuesta = Guion(elem_suceso.childNodes,
472                                      macros = [ ("$usuario", "Personaje"),
473                                                 ("$sala", "Sala"),
474                                                 ("$objeto", "Objeto") ])
475                    self.__sucesos[suceso] = respuesta
476            
477      
478    
479                  nombre_item = extraer_nombre_xml(nodo_requi_suce)  #    def __parsear_usos(self, elem_usos):
480                  if nombre_item == 'requisito':  #       """Extrae toda la información de los usos del objeto."""
481                      requisito_atrib = extraer_atributo_xml(nodo_requi_suce,'atributo')  #      
482                      requisito_valor = int(extraer_atributo_xml(nodo_requi_suce,'valor'))  #       limpiar_nodos_text_xml(elem_usos)
483                      if nodo_requi_suce.hasAttribute('msg'):  #        self.__usos = []
484                          requisito_msg = extraer_atributo_xml(nodo_requi_suce,'msg')  #
485                      else:  #       for nodo_uso in elem_usos.childNodes[:]:
486                          requisito_msg = 'No tienes suficiente ' + requisito_atrib  #
487                      uso_requisitos.append( {"atributo":requisito_atrib,  #           uso_tipo = extraer_atributo_xml(nodo_uso,'tipo')
488                                              "valor":requisito_valor,  #            if nodo_uso.hasAttribute('posicion'):
489                                              "msg":requisito_msg} )  #               uso_posicion = extraer_atributo_xml(nodo_uso,'posicion')
490                  else:  #           else:
491                      #suceso_atrib = extraer_atributo_xml(nodo_requi_suce,'atributo')  #               uso_posicion = ''
492                      #suceso_valor = int(extraer_atributo_xml(nodo_requi_suce,'valor'))  ##            if nodo_uso.hasAttribute('gasto'):
493                      #if nodo_requi_suce.hasAttribute('msg'):  ##              uso_gasto = int(extraer_atributo_xml(nodo_uso,'gasto'))
494                      #    suceso_msg = extraer_atributo_xml(nodo_requi_suce,'msg')  ##          else:
495                      #else:  ##              uso_gasto = 0
496                      #    suceso_msg = ""  ##          if nodo_uso.hasAttribute('msg'):
497                      #uso_sucesos.append( {"atributo":suceso_atrib,  ##              uso_msg = extraer_atributo_xml(nodo_uso,'msg')
498                      #                     "valor":suceso_valor,  ##            else:
499                      #                     "msg":suceso_msg} )  ##              if uso_tipo == 'comer':
500                      uso_sucesos.append(Suceso(elem_suceso = nodo_requi_suce,  ##                  uso_msg = 'Te comes ' + self.__nombre
501                                                acciones = [ "usar", "descubrir" ],  ##              elif uso_tipo == 'beber':
502                                                macros = [ ("$usuario", "Personaje"),  ##                  uso_msg = 'Bebes ' + self.__nombre
503                                                           ("$sala", "Sala"),  ##              elif uso_tipo == 'poner':
504                                                           ("$objeto", "Objeto") ]))  ##                  uso_msg = 'Te pones ' + self.__nombre + ' en ' + uso_posicion
505    ##              elif uso_tipo == 'lanzar':
506              self.__usos.append( {"tipo":uso_tipo,  ##                  uso_msg = 'Arrojas ' + self.__nombre
507                                   "posicion":uso_posicion,  ##              else:
508  #                                "gasto":uso_gasto,  ##                  uso_msg = 'Usas ' + self.__nombre
509  #                                "msg":uso_msg,  ##            if nodo_uso.hasAttribute('duracion'):
510    ##              uso_duracion = int(extraer_atributo_xml(nodo_uso,'duracion'))
511    ##          else:
512    ##              uso_duracion = 0
513    #      
514    #           #Siguiente nivel del árbol
515    #           limpiar_nodos_text_xml(nodo_uso)
516    #          
517    #           uso_requisitos = []
518    #           uso_acciones = []
519    #
520    #           for nodo_requi_suce in nodo_uso.childNodes[:]:
521    #
522    #               nombre_item = extraer_nombre_xml(nodo_requi_suce)
523    #               if nombre_item == 'requisito':
524    #                   requisito_atrib = extraer_atributo_xml(nodo_requi_suce,'atributo')
525    #                   requisito_valor = int(extraer_atributo_xml(nodo_requi_suce,'valor'))
526    #                   if nodo_requi_suce.hasAttribute('msg'):
527    #                        requisito_msg = extraer_atributo_xml(nodo_requi_suce,'msg')
528    #                    else:
529    #                       requisito_msg = 'No tienes suficiente ' + requisito_atrib
530    #                   uso_requisitos.append( {"atributo":requisito_atrib,
531    #                                           "valor":requisito_valor,
532    #                                           "msg":requisito_msg} )
533    #               else:
534    #                   #accion_atrib = extraer_atributo_xml(nodo_requi_suce,'atributo')
535    #                   #accion_valor = int(extraer_atributo_xml(nodo_requi_suce,'valor'))
536    #                    #if nodo_requi_suce.hasAttribute('msg'):
537    #                   #    accion_msg = extraer_atributo_xml(nodo_requi_suce,'msg')
538    #                   #else:
539    #                   #    accion_msg = ""
540    #                   #uso_acciones.append( {"atributo":accion_atrib,
541    #                   #                     "valor":accion_valor,
542    #                   #                     "msg":accion_msg} )
543    #                   uso_acciones.append(Accion(elem_accion = nodo_requi_suce,
544    #                                             acciones = [ "usar", "descubrir" ],
545    #                                             macros = [ ("$usuario", "Personaje"),
546    #                                                        ("$sala", "Sala"),
547    #                                                        ("$objeto", "Objeto") ]))
548    #
549    #           self.__usos.append( {"tipo":uso_tipo,
550    #                                "posicion":uso_posicion,
551    ##                               "gasto":uso_gasto,
552    ##                               "msg":uso_msg,
553  #                                "duracion":uso_duracion,  #                                "duracion":uso_duracion,
554                                   "requisitos":uso_requisitos,  #                                "requisitos":uso_requisitos,
555                                   "sucesos":uso_sucesos} )  #                                "acciones":uso_acciones} )
556    
557      # Métodos especiales      # Métodos especiales
558    
# Line 527  class Objeto(object): Line 568  class Objeto(object):
568    
569          assert(Objeto.VERSION_OBJETO == "1.0.2")          assert(Objeto.VERSION_OBJETO == "1.0.2")
570          while self.__version != "1.0.2":          while self.__version != "1.0.2":
571    
572                # La versión 1.0.1 produce una ruptura con las anteriores ya que se migra al formato
573                # de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas
574                # las salas, personajes y objetos.
575    
576                if self.__version == "1.0.2":
577                    # Versión 1.0.1 -> 1.0.2: añadir __max_cargas, borrar usos y crear sucesos.
578                    # Se crea sin sucesos, pero al activarlo se reseteará a partir del nuevo
579                    # fichero descriptor XML.
580                    self.__max_cargas = self.__cargas
581                    del self.__usos
582                    self.__sucesos = {}
583                    self.__version = "1.0.2"
584                    escribir("Convertido objeto " + self.__id + " a versión 1.0.2")
585    
586          # La versión 1.0.1 produce una ruptura con las anteriores ya que se migra al formato              raise ValueError("Cargado objeto " + self.__id + " con versión desconocida: " +
587          # de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas                               self.__version + " cuando se esperaba " + Objeto.VERSION_OBJETO)
588          # las salas, personajes y objetos.  
         #  
   
         # La versión 1.0.2 está en desarrollo...  
         # De momento, ha cambiado:  
         #  - formato de usos  
         #  - nuevo atributo privado __max_cargas  
   
             escribir("Cargado objeto " + self.__id + " con versión desconocida: " +  
                      self.__version + ", cuando se esperaba " + Objeto.VERSION_OBJETO)  
   
589    
590      # Métodos normales      # Métodos normales
591                    
# Line 567  class Objeto(object): Line 612  class Objeto(object):
612              self.__cargas = 0              self.__cargas = 0
613          if self.__cargas > self.__max_cargas:          if self.__cargas > self.__max_cargas:
614              self.__cargas = self.__max_cargas              self.__cargas = self.__max_cargas
         
615    
     def puede_comer(self, usuario):  
         """Comprueba si el usuario puede 'comer' este objeto.  
616    
617          Requiere:      def destruir(self):
618              usuario != None          """El objeto desaparece del juego."""
619          """          #%% Este tiene más miga de lo que parece, me lo iré pensando cuando pueda...
620          encontrado = 0          pass
         for uso in self.usos:  
             if uso["tipo"] == "comer":  
                 encontrado = 1  
                 for requisito in uso["requisitos"]:  
                     if not requisito.verificar({"$usuario": usuario,  
                                                 "$sala": usuario.sala,  
                                                 "$objeto": self}):  
                         return 0  
         return encontrado  
621    
622    
623        def responder_suceso_personaje(self, suceso, usuario):
624            """Todas las respuestas a sucesos de personaje son iguales, asi que las pongo aquí.
625    
626      def comer(self, usuario):          Chequea los requisitos y realiza las acciones correspondientes, y devuelve 1
627          """Realiza el uso 'comer' sobre este objeto.          si se ha podido comer con éxito, y 0 si no.
           
         Ocurren todos los sucesos asociados a este uso.  
628    
629          Requiere:          Requiere:
630              usuario != None              usuario != None
             puede_comer(usuario)  
631          """          """
632          for uso in self.usos:          if not self.__sucesos.has_key(suceso):
633              if uso["tipo"] == "comer":              return 0
634                  for suceso in uso["sucesos"]:          else:
635                      if suceso.accion == "usar":              respuesta_comer = self.__sucesos[suceso]
636                          suceso.ocurrir({"$usuario": usuario,              result =  respuesta_comer.ejecutar(macros = {"$usuario": usuario,
637                                          "$sala": usuario.sala,                                                           "$sala": usuario.sala,
638                                          "$objeto": self})                                                           "$objeto": self})
       
639    
640      def puede_usar(self, usuario):              if result == None:  # Si ninguna acción acepta o cancela explícitamente el
641          """Comprueba si el usuario puede 'usar' este objeto.                  result = 1      # suceso, se asume que se acepta
642    
643          Requiere:              return result
644              usuario != None  
645          """  
646          encontrado = 0      def personaje_come(self, usuario):
647          for uso in self.usos:          return self.responder_suceso_personaje("personaje_come", usuario)
648              if uso["tipo"] == "usar":  
649                  encontrado = 1      def personaje_bebe(self, usuario):
650            return self.responder_suceso_personaje("personaje_bebe", usuario)
651    
652        def personaje_lanza(self, usuario):
653            return self.responder_suceso_personaje("personaje_lanza", usuario)
654    
655        def personaje_usa(self, usuario):
656            return self.responder_suceso_personaje("personaje_usa", usuario)
657    
658        def personaje_pone_cabeza(self, usuario):
659            return self.responder_suceso_personaje("personaje_pone_cabeza", usuario)
660    
661        def personaje_pone_cuello(self, usuario):
662            return self.responder_suceso_personaje("personaje_pone_cuello", usuario)
663    
664        def personaje_pone_tronco(self, usuario):
665            return self.responder_suceso_personaje("personaje_pone_tronco", usuario)
666    
667        def personaje_pone_brazo_izq(self, usuario):
668            return self.responder_suceso_personaje("personaje_pone_brazo_izq", usuario)
669    
670        def personaje_pone_brazo_der(self, usuario):
671            return self.responder_suceso_personaje("personaje_pone_brazo_der", usuario)
672    
673        def personaje_pone_mano_izq(self, usuario):
674            return self.responder_suceso_personaje("personaje_pone_mano_izq", usuario)
675    
676        def personaje_pone_mano_der(self, usuario):
677            return self.responder_suceso_personaje("personaje_pone_mano_der", usuario)
678    
679        def personaje_pone_dos_manos(self, usuario):
680            return self.responder_suceso_personaje("personaje_pone_dos_manos", usuario)
681    
682        def personaje_pone_piernas(self, usuario):
683            return self.responder_suceso_personaje("personaje_pone_piernas", usuario)
684    
685        def personaje_pone_tobillo_izq(self, usuario):
686            return self.responder_suceso_personaje("personaje_pone_tobillo_izq", usuario)
687    
688        def personaje_pone_tobillo_der(self, usuario):
689            return self.responder_suceso_personaje("personaje_pone_tobillo_der", usuario)
690    
691        def personaje_pone_pie_izq(self, usuario):
692            return self.responder_suceso_personaje("personaje_pone_pie_izq", usuario)
693    
694        def personaje_pone_pie_der(self, usuario):
695            return self.responder_suceso_personaje("personaje_pone_pie_der", usuario)
696          
697        def personaje_quita_cabeza(self, usuario):
698            return self.responder_suceso_personaje("personaje_quita_cabeza", usuario)
699    
700        def personaje_quita_cuello(self, usuario):
701            return self.responder_suceso_personaje("personaje_quita_cuello", usuario)
702    
703        def personaje_quita_tronco(self, usuario):
704            return self.responder_suceso_personaje("personaje_quita_tronco", usuario)
705    
706        def personaje_quita_brazo_izq(self, usuario):
707            return self.responder_suceso_personaje("personaje_quita_brazo_izq", usuario)
708    
709        def personaje_quita_brazo_der(self, usuario):
710            return self.responder_suceso_personaje("personaje_quita_brazo_der", usuario)
711    
712        def personaje_quita_mano_izq(self, usuario):
713            return self.responder_suceso_personaje("personaje_quita_mano_izq", usuario)
714    
715        def personaje_quita_mano_der(self, usuario):
716            return self.responder_suceso_personaje("personaje_quita_mano_der", usuario)
717    
718        def personaje_quita_dos_manos(self, usuario):
719            return self.responder_suceso_personaje("personaje_quita_dos_manos", usuario)
720    
721        def personaje_quita_piernas(self, usuario):
722            return self.responder_suceso_personaje("personaje_quita_piernas", usuario)
723    
724        def personaje_quita_tobillo_izq(self, usuario):
725            return self.responder_suceso_personaje("personaje_quita_tobillo_izq", usuario)
726    
727        def personaje_quita_tobillo_der(self, usuario):
728            return self.responder_suceso_personaje("personaje_quita_tobillo_der", usuario)
729    
730        def personaje_quita_pie_izq(self, usuario):
731            return self.responder_suceso_personaje("personaje_quita_pie_izq", usuario)
732    
733        def personaje_quita_pie_der(self, usuario):
734            return self.responder_suceso_personaje("personaje_quita_pie_der", usuario)
735    
736    
737    #    def puede_comer(self, usuario):
738    #       """Comprueba si el usuario puede 'comer' este objeto.
739    #
740    #       Requiere:
741    #           usuario != None
742    #       """
743    #       encontrado = 0
744    #       for uso in self.usos:
745    #           if uso["tipo"] == "comer":
746    #               encontrado = 1
747  #               for requisito in uso["requisitos"]:  #               for requisito in uso["requisitos"]:
748  #                   if not requisito.verificar({"$usuario": usuario,  #                   if not requisito.verificar({"$usuario": usuario,
749  #                                               "$sala": usuario.sala,  #                                               "$sala": usuario.sala,
750  #                                               "$objeto": self}):  #                                               "$objeto": self}):
751  #                       return 0  #                       return 0
752          return encontrado  #       return encontrado
753    #
754    #
755    #
756      def usar(self, usuario):  #    def comer(self, usuario):
757          """Realiza el uso 'usar' sobre este objeto.  #       """Realiza el uso 'comer' sobre este objeto.
758            #      
759          Ocurren todos los sucesos asociados a este uso.  #       Ocurren todas las acciones asociados a este uso.
760    #
761          Requiere:  #       Requiere:
762              usuario != None  #           usuario != None
763              puede_usar(usuario)  #            puede_comer(usuario)
764          """  #       """
765          for uso in self.usos:  #       for uso in self.usos:
766              if uso["tipo"] == "usar":  #           if uso["tipo"] == "comer":
767                  for suceso in uso["sucesos"]:  #                for accion in uso["acciones"]:
768                      if suceso.accion == "usar":  #                   if accion.accion == "usar":
769                          suceso.ocurrir({"$usuario": usuario,  #                       accion.ejecutar({"$usuario": usuario,
770                                          "$sala": usuario.sala,  #                                       "$sala": usuario.sala,
771                                          "$objeto": self})  #                                       "$objeto": self})
772    #    
773    #
774    #    def puede_usar(self, usuario):
775    #       """Comprueba si el usuario puede 'usar' este objeto.
776    #
777    #       Requiere:
778    #           usuario != None
779    #       """
780    #       encontrado = 0
781    #       for uso in self.usos:
782    #           if uso["tipo"] == "usar":
783    #               encontrado = 1
784    ##              for requisito in uso["requisitos"]:
785    ##                  if not requisito.verificar({"$usuario": usuario,
786    ##                                              "$sala": usuario.sala,
787    ##                                              "$objeto": self}):
788    ##                      return 0
789    #       return encontrado
790    #
791    #
792    #
793    #    def usar(self, usuario):
794    #       """Realiza el uso 'usar' sobre este objeto.
795    #      
796    #       Ocurren todas las acciones asociados a este uso.
797    #
798    #       Requiere:
799    #           usuario != None
800    #            puede_usar(usuario)
801    #       """
802    #       for uso in self.usos:
803    #           if uso["tipo"] == "usar":
804    #                for accion in uso["acciones"]:
805    #                   if accion.accion == "usar":
806    #                       accion.ejecutar({"$usuario": usuario,
807    #                                       "$sala": usuario.sala,
808    #                                       "$objeto": self})
809                    
810    
811  # Código para pruebas unitarias del módulo.  # Código para pruebas unitarias del módulo.
# Line 668  if (__name__ == '__main__'): Line 833  if (__name__ == '__main__'):
833      print "estado = " + str(pocion.estado)      print "estado = " + str(pocion.estado)
834      print "aura = " + str(pocion.aura)      print "aura = " + str(pocion.aura)
835    
836      print "usos = ["      print "sucesos = ["
837      primer = 1      primer = 1
838      for uso in pocion.usos:      for suceso in pocion.sucesos.keys():
839          if primer: primer = 0          if primer: primer = 0
840          else: print ""          else: print ""
841          print " -> tipo = " + uso["tipo"]  
842          print "    posicion = " + uso["posicion"]          print " -> suceso = " + suceso
843          for suceso in uso["sucesos"]:          for respuesta in pocion.sucesos[suceso].secuencia:
844              print "    suceso tipo = " + suceso.tipo              if respuesta.__class__.__name__ == "Accion":
845              print "           accion = " + suceso.accion                  print "    * accion base = " + respuesta.base
846              print "           parametros = [",                  print "             nombre = " + respuesta.nombre
847              primer2 = 1                  print "             parametros = [",
848              for parametro in suceso.parametros:                  primer2 = 1
849                  if primer2: primer2 = 0                  for parametro in respuesta.parametros:
850                  else: print ", ",                      if primer2: primer2 = 0
851                  print parametro["nombre"] + "(" + parametro["tipo"] + ") = " + parametro["valor"],                      else: print ", ",
852              print "]"                      print parametro["nombre"] + " (" + parametro["tipo"] + ") = " + parametro["valor"],
853                    print "]"
854                elif respuesta.__class__.__name__ == "Requisito":
855                    print "    * requisito base = " + respuesta.base
856                    print "                nombre = " + respuesta.nombre
857                    print "                parametros = [",
858                    primer2 = 1
859                    for parametro in respuesta.parametros:
860                        if primer2: primer2 = 0
861                        else: print ", ",
862                        print parametro["nombre"] + " (" + parametro["tipo"] + ") = " + parametro["valor"],
863                    print "]"
864      print "]"      print "]"
865    
866    #    print "usos = ["
867    #    primer = 1
868    #    for uso in pocion.usos:
869    #       if primer: primer = 0
870    #       else: print ""
871    #       print " -> tipo = " + uso["tipo"]
872    #       print "    posicion = " + uso["posicion"]
873    #       for accion in uso["acciones"]:
874    #           print "    accion tipo = " + accion.tipo
875    #           print "           accion = " + accion.accion
876    #           print "           parametros = [",
877    #           primer2 = 1
878    #           for parametro in accion.parametros:
879    #               if primer2: primer2 = 0
880    #               else: print ", ",
881    #               print parametro["nombre"] + "(" + parametro["tipo"] + ") = " + parametro["valor"],
882    #           print "]"
883    #    print "]"
884    

Legend:
Removed from v.2.5  
changed lines
  Added in v.2.6

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