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

Diff of /ambar/sala.py

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

revision 2.10 by amoyav, Sat Jul 5 23:25:52 2003 UTC revision 2.11 by amoyav, Tue Jul 8 06:17:46 2003 UTC
# Line 62  class Sala(object): Line 62  class Sala(object):
62      EXT_SALAS = ''      EXT_SALAS = ''
63    
64    
65      TIPOS_SALA = { "Población" : [  "calle",    "callejón",     "plaza",      TIPOS_SALA = { "Población" : [  "calle", "callejón", "plaza",
66                                      "portal",   "pasadizo",     "arco",                                      "portal", "pasadizo", "arco",
67                                      "puerto",   "embarcadero",  "azotea" ],                                      "puerto", "embarcadero", "azotea" ],
68    
69                  "Edificio" : [ "salón","habitación","pasillo",                     "Edificio" : [ "salón", "habitación", "pasillo",
70                                  "escaleras","vestíbulo","cuarto sin ventanas",                                    "escaleras", "vestíbulo", "cuarto sin ventanas",
71                                  "sótano", "calabozo", "alcantarilla", "tejado",                                    "sótano", "calabozo", "alcantarilla", "tejado",
72                                  "balcón", "letrina" ],                                    "balcón", "letrina" ],
73                                    
74                  "Campo" : [ "llanura", "bosque", "claro de bosque", "colina",                     "Campo" : [ "llanura", "bosque", "claro de bosque", "colina",
75                              "valle", "pantano", "páramo", "desierto" ],                                 "valle", "pantano", "páramo", "desierto" ],
                               
                 "Agua" : [ "ribera", "costa", "acantilado", "cala", "rio",  
                             "lago", "mar", "islote" ],  
76                                    
77                  "Montaña" : [ "cima", "ladera", "promontorio", "grieta",                     "Agua" : [ "ribera", "costa", "acantilado", "cala", "rio",
78                                  "desfiladero", "quebrada", "abismo", "cornisa" ],                                "lago", "mar", "islote" ],
79                                    
80                  "Caverna" : ["entrada", "cueva", "pasadizo", "sima",                     "Montaña" : [ "cima", "ladera", "promontorio", "grieta",
81                                  "rio subterráneo", "lago subterráneo"]                                   "desfiladero", "quebrada", "abismo", "cornisa" ],
82                 }                  
83                       "Caverna" : [ "entrada", "cueva", "pasadizo", "sima",
84                                     "rio subterráneo", "lago subterráneo"]
85                      }
86                    
87    
88      # Métodos estáticos      # Métodos estáticos
89    
90      def cargar(id):      def cargar(id):
# Line 112  class Sala(object): Line 113  class Sala(object):
113      # Atributos públicos de la clase      # Atributos públicos de la clase
114    
115      def __leer_id(self): return self.__id      def __leer_id(self): return self.__id
       
116      def __set_id(self,id): self.__id = id      def __set_id(self,id): self.__id = id
117        
118      id = property(__leer_id,__set_id,      id = property(__leer_id,__set_id,
119                    doc="""(string): identifica univocamente a la sala.                    doc="""(string): identifica univocamente a la sala.
120    
# Line 125  class Sala(object): Line 126  class Sala(object):
126                        """)                        """)
127    
128      def __leer_version(self): return self.__version      def __leer_version(self): return self.__version
       
129      def __set_version(self,version): self.__version = version      def __set_version(self,version): self.__version = version
130            
131      version = property(__leer_version, __set_version,      version = property(__leer_version, __set_version,
# Line 136  class Sala(object): Line 136  class Sala(object):
136                             """)                             """)
137    
138      def __leer_autor(self): return self.__autor      def __leer_autor(self): return self.__autor
   
139      def __set_autor(self,autor): self.__autor = autor      def __set_autor(self,autor): self.__autor = autor
140                    
141      autor = property(__leer_autor, __set_autor,      autor = property(__leer_autor, __set_autor,
# Line 147  class Sala(object): Line 146  class Sala(object):
146                           """)                           """)
147    
148      def __leer_area(self): return self.__area      def __leer_area(self): return self.__area
   
149      def __set_area(self, area): self.__area =area      def __set_area(self, area): self.__area =area
150            
151      area = property(__leer_area, __set_area,      area = property(__leer_area, __set_area,
# Line 158  class Sala(object): Line 156  class Sala(object):
156                          """)                          """)
157    
158      def __leer_comentario(self): return self.__comentario      def __leer_comentario(self): return self.__comentario
       
159      def __set_comentario(self, comentario): self.__comentario = comentario      def __set_comentario(self, comentario): self.__comentario = comentario
160            
161      comentario = property(__leer_comentario, __set_comentario,      comentario = property(__leer_comentario, __set_comentario,
# Line 169  class Sala(object): Line 166  class Sala(object):
166                                """)                                """)
167    
168      def __leer_nombre(self): return self.__nombre      def __leer_nombre(self): return self.__nombre
       
169      def __set_nombre(self,nombre): self.__nombre = nombre      def __set_nombre(self,nombre): self.__nombre = nombre
170            
171      nombre = property(__leer_nombre,__set_nombre,      nombre = property(__leer_nombre,__set_nombre,
# Line 181  class Sala(object): Line 177  class Sala(object):
177                            """)                            """)
178    
179      def __leer_aura(self): return self.__aura      def __leer_aura(self): return self.__aura
   
180      def __set_aura(self, aura): self.__aura = aura      def __set_aura(self, aura): self.__aura = aura
181            
182      aura = property(__leer_aura, __set_aura,      aura = property(__leer_aura, __set_aura,
# Line 193  class Sala(object): Line 188  class Sala(object):
188                          """)                          """)
189    
190      def __leer_tipo(self): return self.__tipo      def __leer_tipo(self): return self.__tipo
       
191      def __set_tipo(self, tipo): self.__tipo = tipo      def __set_tipo(self, tipo): self.__tipo = tipo
192            
193      tipo = property(__leer_tipo,__set_tipo,      tipo = property(__leer_tipo,__set_tipo,
# Line 201  class Sala(object): Line 195  class Sala(object):
195                          """)                          """)
196    
197      def __leer_subtipo(self): return self.__subtipo      def __leer_subtipo(self): return self.__subtipo
     
198      def __set_subtipo(self, subtipo): self.__subtipo = subtipo      def __set_subtipo(self, subtipo): self.__subtipo = subtipo
199    
200      subtipo = property(__leer_subtipo,__set_subtipo,      subtipo = property(__leer_subtipo,__set_subtipo,
# Line 209  class Sala(object): Line 202  class Sala(object):
202                             """)                             """)
203    
204      def __leer_volumen(self): return self.__volumen      def __leer_volumen(self): return self.__volumen
205            def __set_volumen(self, volumen): self.__volumen = float(volumen)
     def __set_volumen(self, volumen):  
         self.__volumen = float(volumen)  
         print("volumen: "+`self.volumen`)  
206    
207      volumen = property(__leer_volumen,__set_volumen,      volumen = property(__leer_volumen,__set_volumen,
208                         doc="""(float): volumen total que puede contener                         doc="""(float): volumen total que puede contener
# Line 223  class Sala(object): Line 213  class Sala(object):
213                             """)                             """)
214    
215      def __leer_luz(self): return self.__luz      def __leer_luz(self): return self.__luz
   
216      def __set_luz(self, luz): self.__luz = luz      def __set_luz(self, luz): self.__luz = luz
217    
218      luz = property(__leer_luz, __set_luz,      luz = property(__leer_luz, __set_luz,
# Line 235  class Sala(object): Line 224  class Sala(object):
224                         """)                         """)
225    
226      def __leer_combate(self): return self.__combate      def __leer_combate(self): return self.__combate
   
227      def __set_combate(self, combate): self.__combate = combate      def __set_combate(self, combate): self.__combate = combate
228    
229      combate = property(__leer_combate, __set_combate,      combate = property(__leer_combate, __set_combate,
# Line 246  class Sala(object): Line 234  class Sala(object):
234                             """)                             """)
235    
236      def __leer_ocultabilidad(self): return self.__ocultabilidad      def __leer_ocultabilidad(self): return self.__ocultabilidad
   
237      def __set_ocultabilidad(self, ocultabilidad): self.__ocultabilidad = ocultabilidad      def __set_ocultabilidad(self, ocultabilidad): self.__ocultabilidad = ocultabilidad
238    
239      ocultabilidad = property(__leer_ocultabilidad,__set_ocultabilidad,      ocultabilidad = property(__leer_ocultabilidad,__set_ocultabilidad,
# Line 385  class Sala(object): Line 372  class Sala(object):
372    
373      def __leer_elem_sal(self): return self.__elem_sal      def __leer_elem_sal(self): return self.__elem_sal
374            
375      elem_sal=property(__leer_elem_sal, doc=""" """)      elem_sal = property(__leer_elem_sal, doc=""" """)
376            
377      # Constructor          # ^ Esto que es, me lo podria uste explicar ???
378      #def __init__(self, conservar_arbol_xml = 0):          #   (por cierto, no existe ningun self.__elem_sal en ningún sitio...)
379      #tenemos que hacer un constructor que parta de cero          
380                            
381      def __init__(self, id, conservar_arbol_xml = 0):      def __init__(self, id, conservar_arbol_xml = 0):
382          """Crea una sala nueva a partir de un fichero de descripción de sala.          """Crea una sala nueva a partir de un fichero de descripción de sala.
# Line 405  class Sala(object): Line 392  class Sala(object):
392          #          #
393          #                 Invariantes:          #                 Invariantes:
394          #                     __fecha_fichero >= 0          #                     __fecha_fichero >= 0
395            #
396            # __arbol_xml (minidom.Document, opcional): arbol XML leido del fichero de descripcion.
397    
398          self.__id = id          self.__id = id
399          self.__inicializar_sala(conservar_arbol_xml)          self.__inicializar_sala(conservar_arbol_xml)
# Line 417  class Sala(object): Line 406  class Sala(object):
406          self.__personajes = {}          self.__personajes = {}
407          self.__n_jugadores = 0            self.__n_jugadores = 0  
408    
   
         # Atributos privados:  
         #  
         # __arbol_xml (minidom.Document, opcional): arbol XML leido del fichero de descripcion.  
   
409          archivo = os.path.join(Sala.DIR_DESC_SALAS, self.__id.split('-')[0],          archivo = os.path.join(Sala.DIR_DESC_SALAS, self.__id.split('-')[0],
410                                 self.__id + Sala.EXT_DESC_SALAS)                                 self.__id + Sala.EXT_DESC_SALAS)
411    
# Line 487  class Sala(object): Line 471  class Sala(object):
471          else:          else:
472              self.__comentario = ""              self.__comentario = ""
473                    
474    
475      def __parsear_id(self, elem_id):      def __parsear_id(self, elem_id):
476          """Extrae el id de la sala"""          """Extrae el id de la sala"""
477          id_fichero = extraer_contenido_xml(elem_id)          id_fichero = extraer_contenido_xml(elem_id)
478          if id_fichero != self.__id:          if id_fichero != self.__id:
479              raise ValueError("El id no coincide con el nombre del fichero")              raise ValueError("El id no coincide con el nombre del fichero")
480    
481    
482      def __parsear_nombre(self, elem_nombre):      def __parsear_nombre(self, elem_nombre):
483          """Extrae el nombre de la sala"""          """Extrae el nombre de la sala"""
484          self.__nombre = extraer_contenido_xml(elem_nombre)          self.__nombre = extraer_contenido_xml(elem_nombre)
485    
486    
487      def __parsear_propiedades(self, elem_propiedades):        def __parsear_propiedades(self, elem_propiedades):  
488          """Extrae las propiedades globales de la sala."""          """Extrae las propiedades globales de la sala."""
489          if elem_propiedades.hasAttribute('aura'):          if elem_propiedades.hasAttribute('aura'):
# Line 574  class Sala(object): Line 561  class Sala(object):
561              else:              else:
562                  dif_salida = 0                  dif_salida = 0
563              #GPT: no gestiono lo siguiente con if pq no se las posibles excepciones que se pueden dar              #GPT: no gestiono lo siguiente con if pq no se las posibles excepciones que se pueden dar
564              try:              try:
565                  tipo_cierre_salida = extraer_atributo_xml(nodo_salida,'tipo_cierre')                  tipo_cierre_salida = extraer_atributo_xml(nodo_salida,'tipo_cierre')
566              except:              except:
567                  tipo_cierre_salida = "ninguno"                  tipo_cierre_salida = "ninguno"
568              try:              try:
569                  datos_cierre_salida = extraer_atributo_xml(nodo_salida,'datos_cierre')                  datos_cierre_salida = extraer_atributo_xml(nodo_salida,'datos_cierre')
570              except:              except:
571                  datos_cierre_salida = ""                  datos_cierre_salida = ""
572              try:              try:
573                  mensaje_cerrado_salida = extraer_atributo_xml(nodo_salida,'mensaje_cerrado')                  mensaje_cerrado_salida = extraer_atributo_xml(nodo_salida,'mensaje_cerrado')
574              except:              except:
575                  mensaje_cerrado_salida = "Algo te impide pasar"                  mensaje_cerrado_salida = "Algo te impide pasar"
576                                    
577              id_salida = extraer_atributo_xml(nodo_salida,'id')              id_salida = extraer_atributo_xml(nodo_salida,'id')
578              desc_salida = extraer_contenido_xml(nodo_salida)              desc_salida = extraer_contenido_xml(nodo_salida)
579    
580              self.__salidas.append({"direccion": direccion_salida,              self.__salidas.append({"direccion": direccion_salida,
581                                     "dificultad": dif_salida,                                     "dificultad": dif_salida,
582                                     "id": id_salida,                                     "id": id_salida,
583                                     "descripcion": desc_salida,                                     "descripcion": desc_salida,
584                                     "tipo_cierre": tipo_cierre_salida,                                     "tipo_cierre": tipo_cierre_salida,
585                                     "datos_cierre": datos_cierre_salida,                                     "datos_cierre": datos_cierre_salida,
586                                     "mensaje_cerrado": mensaje_cerrado_salida})                                     "mensaje_cerrado": mensaje_cerrado_salida})
587    
588    
# Line 861  class Sala(object): Line 848  class Sala(object):
848          return ocupado          return ocupado
849    
850    
851      def coger_objeto(self, n_objeto, n_instancia):      def buscar_objeto(self, id_objeto, n_orden=1):
852          """Sacar una instancia de un objeto de la sala.          """Localiza un objeto en la sala.
853    
854          n_objeto es el numero de orden dentro de los objetos de la sala, y n_instancia          - id_objeto es el identificador del objeto. Puede haber varios objetos distintos
855          es el numero de la instancia, ambos empezando por cero.            con el mismo id
856            - n_orden sirve para distinguir el objeto si hay mas de uno con el mismo id
857    
858          Devuelve una instancia de clase Objeto.          Devuelve el indice dentro de la lista de objetos de la sala que apunta al objeto buscado.
859    
860            Lanza ExcepcionDeJuego si no se encuentra.
861    
862          Requiere:          Requiere:
863              n_objeto in range(0, len(self.objetos)-1)              id_objeto != None
864              n_instancia in range(0, len(self.objetos[n_objeto]["instancias"])-1)              n_orden >= 1
865    
866          Asegura:          Asegura:
867              return != None              return in range(0, len(self.objetos))
868          """          """
869            encontrados = 0
870            n_objeto = -1
871    
872            for objeto in self.__objetos:
873                n_objeto = n_objeto + 1
874                if len(objeto["instancias"]) > 0:
875                    if normalizar_id(id_objeto) == extraer_id(objeto["instancias"][0].nombre):
876                        encontrados = encontrados + 1
877                        if encontrados == n_orden:
878                            break
879                        
880            if encontrados == 0:
881                raise ExcepcionDeJuego("No hay en la sala ningún objeto con identificativo " +
882                                       id_objeto)
883            elif encontrados < n_orden:
884                raise ExcepcionDeJuego("No hay en la sala suficientes objetos con identificativo " +
885                                       id_objeto + ", solo hay " + str(encontrados))
886    
887            else:
888                return n_objeto
889    
890    
891        def coger(self, n_objeto, n_instancia=1, cantidad=1):
892            """Sacar una o varias instancias de un objeto de la sala.
893            
894            - n_objeto es el número de orden del objeto dentro de la sala
895            - n_instancia es el número de orden de la primera instancia a extraer
896            - cantidad es el número de instancias a extraer
897    
898            Devuelve una lista con las instancias extraidas.
899    
900            Lanza ExcepcionDeJuego si no puede sacarlas (por ejemplo, se han pedido
901            más instancias de las que hay).
902    
903            Requiere:
904                n_objeto in range(0, len(self.objetos))
905                n_instancia >= 1
906                cantidad >= 1
907    
908            Asegura:
909                return != None
910                len(return) == cantidad
911            """
912          objeto = self.__objetos[n_objeto]          objeto = self.__objetos[n_objeto]
913    
914          instancia = objeto["instancias"][n_instancia]          if (n_instancia + cantidad - 1) > len(objeto["instancias"]):
915                raise ExcepcionDeJuego("No hay " + str(n_instancia + cantidad - 1) +
916                                       " instancias de ese objeto, solo hay " +
917                                       str(len(objeto["instancias"])))
918    
919            objetos_cogidos = []
920    
921            instancias = objeto["instancias"]
922            for i in range(0, cantidad):
923                objetos_cogidos.append(instancias[n_instancia-1])
924                instancias[n_instancia-1].activar()
925                del instancias[n_instancia-1]
926    
927          del objeto["instancias"][n_instancia]          if len(instancias) == 0 and objeto["probabilidad"] == 0:
         if len(objeto["instancias"]) == 0 and objeto["probabilidad"] == 0:  
928              del self.__objetos[n_objeto]              del self.__objetos[n_objeto]
929    
930          instancia.activar()          return objetos_cogidos
   
         return instancia  
931    
932    
933      def dejar_objeto(self, instancia, dificultad = 0):      def dejar(self, objetos, dificultad = 0):
934          """Soltar un objeto en la sala.          """Soltar una o varias instancias de un objeto en la sala.
935    
936          instancia es de clase Objeto. Si ya habia mas instancias con el mismo id en la sala,          Si dificultad != 0, el objeto queda escondido (excepto si ya había
937          se añade a la lista, y si no, se crea un item nuevo en self.objetos.          más instancias de ese mismo objeto anteriormente en la sala).
938    
939          Requiere:          Requiere:
940              instancia != None              objetos != None
941                len(objetos) >= 1
942              dificultad in range(0, 100)              dificultad in range(0, 100)
943          """          """
944          encontrado = 0          encontrado = 0
945                    
946          for objeto in self.__objetos:          for objeto in self.__objetos:
947              if objeto["id"] == instancia.id:              if objeto["id"] == objetos[0].id:
948                  encontrado = 1                  encontrado = 1
949                  objeto["instancias"].append(instancia)                  objeto["instancias"].extend(objetos)
950                  break                  break
951    
952          if not encontrado:          if not encontrado:
# Line 912  class Sala(object): Line 954  class Sala(object):
954                                     "probabilidad":0,                                     "probabilidad":0,
955                                     "maximo":0,                                     "maximo":0,
956                                     "dificultad":dificultad,                                     "dificultad":dificultad,
957                                     "instancias":[instancia]})                                     "instancias":objetos})
958    
959    
960      def salida_cerrada(self, id_sala_destino):      def salida_cerrada(self, id_sala_destino):
# Line 972  class Sala(object): Line 1014  class Sala(object):
1014                          return (id_llave, salida["mensaje_cerrado"])                          return (id_llave, salida["mensaje_cerrado"])
1015    
1016    
1017        def cambiar_aura(self, puntos):
1018            """Modifica el valor de la propiedad aura."""
1019            self.__aura += puntos
1020    
1021    
1022        def ambiente(self, texto, rango_salas=0):
1023            """Ocurre algo que lo ven todos los personajes en esta sala y adyacentes.
1024    
1025            rango_de_salas es la distancia a la que se percibe el suceso (0 = sólo sala origen,
1026            1 = salas a distancia 1, etc.)
1027            
1028            Requiere:
1029                texto != None
1030                rango_de_salas >= 0
1031            """
1032            sala = self
1033            # Ahora tengo que buscar por ahí el algoritmo de recorrido de grafos sin repeticiones,
1034            # con distancia limitada, pero no tengo ganas. Ya lo haré un día de estos.
1035            for personaje in [ p for p in sala.personajes.values() if p.controlador != None]:
1036                personaje.controlador.suceso_entorno(texto)
1037    
1038    
1039      def salvar(self):      def salvar(self):
1040          """Graba en un fichero de salas la sala con todo su contenido."""          """Graba en un fichero de salas la sala con todo su contenido."""
1041                    

Legend:
Removed from v.2.10  
changed lines
  Added in v.2.11

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