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

Diff of /ambar/objeto.py

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

revision 2.2 by amoyav, Sat Dec 7 23:09:36 2002 UTC revision 2.3 by amoyav, Sat Dec 7 23:47:25 2002 UTC
# Line 37  from personajenojugador import * Line 37  from personajenojugador import *
37  from interfazpnj import *  from interfazpnj import *
38    
39    
   
40  class Objeto(object):  class Objeto(object):
41      """Un objeto dentro del juego.      """Un objeto dentro del juego.
       
     Contiene los siguientes atributos:  
      - __id (string): identifica univocamente al objeto. No puede contener espacios.  
      - __version (int): la versión del sistema de objetos.  
      - __autor (string): identifica al autor del objeto.  
      - __comentario (string): un metacomentario acerca del objeto.  
      - __area (string): el area a la que pertenece el objeto, si es que lo necesita.  
      - __nombre (string): Una breve frase informando de qué es el objeto.  
      - __descripcion ({String:any}[]): una lista de diccionarios que contiene cada uno:  
          - "dificultad" (int): de 1 a 100  
          - "texto" (string): el contenido del item de descripcion  
      - __tipo (string): el tipo de material del objeto.  
      - __categoria (string): el tipo de uso generico del objeto.  
      - __peso (float): en kilos  
      - __volumen (float): en relación a 1 unidad de persona.  
      - __cargas (int): el número de veces que puede ser usado antes de destruirse o  
                      volverse inservible. El valor 0 indica que no tiene limite.  
      - __valor (int): en monedas de estaño.  
      - __estado (int): de 0 a 100.  
      - __aura (int): de 0 a 100  
      - __usos ({string:any}[]): lista de usos del objeto, siendo cada uso un diccionario:  
          - "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.)  
          - "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone  
          - "gasto" (int): el numero de cargas que consume cada uso  
          - "msg" (string): el mensaje que aparece cuando se usa  
          - "duracion" (int): el numero de segundos que dura el efecto (0 = indeterminado)  
          - "requisitos" ({string:any}[]): lista de requisitos del uso, siendo cada requisito  
                                           un diccionario:  
               - "atributo" (string): el atributo a comprobar  
               - "valor" (int): el valor mínimo que deberá tener el atributo  
               - "msg" (string): el mensaje que sale si el atributo no llega al mínimo  
          - "efectos" ({string:any}[]): lista de efectos que produce el uso, siendo cada  
                                        efecto un diccionario:  
               - "atributo" (string): el atributo a modificar  
               - "valor" (int): el número de puntos que sube o baja (si es negativo)  
               - "duracion" (int): duración del efecto en segundos (0 = ilimitado)  
               - "msg" (string): el mensaje que sale cuando ocurre el efecto  
      - __fecha_fichero (int): fecha de la ultima modificacion del fichero de descripcion  
42    
43      Al instanciar un objeto, se crea nuevo y se lee desde el fichero de descripcion de objeto,      Al instanciar un objeto, se crea nuevo y se lee desde el fichero de descripcion de objeto,
44      poniendolo en su estado inicial. Esta instancia podrá pasar a manos de pjs y pnjs, y se      poniendolo en su estado inicial. Esta instancia podrá pasar a manos de pjs y pnjs, y se
45      puede salvar a disco junto con la sala o el personaje que lo contiene.      puede salvar a disco junto con la sala o el personaje que lo contiene.
   
     Invariantes:  
       __id != None  
       __version != None  
       __autor != None  
       __comentario != None  
       __area != None  
       __nombre != None  
       __tipo != None  
       __categoria != None  
       __peso > 0  
       __volumen > 0  
       __cargas >= 0  
       __valor > 0  
       __estado in range(0,100)  
       __aura in range(0,100)  
     
       __tipo in TIPOS_DE_MATERIAL  
       __categoria in CATEGORIAS  
         
       __descripcion != None  
       len(__descripcion) >= 0  
       __descripcion[i]["dificultad"] in range(0,100)  
       __descripcion[i]["texto"] != None  
         
       __usos != None  
       len(__usos) >= 0  
       __usos[i]["tipo"] in USOS  
       __usos[i]["posicion"] in POSICIONES  
       __usos[i]["gasto"] >= 0  
       __usos[i]["msg"] != None  
       __usos[i]["duracion"] >= 0  
       __usos[i]["requisitos"] != None  
       __usos[i]["requisitos"][j]["atributo"] != None  
       __usos[i]["requisitos"][j]["valor"] in range(0,100)  
       __usos[i]["requisitos"][j]["msg"] != None  
       __usos[i]["efectos"] != None  
       __usos[i]["efectos"][k]["atributo"] != None  
       __usos[i]["efectos"][k]["duracion"] >= 0  
       __usos[i]["efectos"][k]["msg"] != None  
       
       __fecha_fichero >= 0  
46      """      """
47    
48      # Version del sistema de descripciones de objeto (se incrementa cada vez que cambia      # Version del sistema de descripciones de objeto (se incrementa cada vez que cambia
# Line 150  class Objeto(object): Line 69  class Objeto(object):
69                     'pie-izq', 'pie-der' ]                     'pie-izq', 'pie-der' ]
70    
71    
72        # Atributos públicos de la clase
73    
74        def __leer_id(self): return self.__id
75    
76        id = property(__leer_id,
77                      doc="""(string): identifica univocamente al objeto.
78    
79                          No puede contener espacios.
80    
81                          Invariantes:
82                              id != None
83                          """)
84    
85        def __leer_version(self): return self.__version
86    
87        version = property(__leer_version,
88                           doc="""(int): la versión del sistema de objetos.
89    
90                               Invariantes:
91                                   version != None
92                               """)
93    
94        def __leer_autor(self): return self.__autor
95    
96        autor = property(__leer_autor,
97                         doc="""autor (string): identifica al autor del objeto.
98                        
99                             Invariantes:
100                                 autor != None
101                             """)
102    
103        def __leer_comentario(self): return self.__comentario
104    
105        comentario = property(__leer_comentario,
106                              doc="""(string): un metacomentario acerca del objeto.
107                              
108                                  Invariantes:
109                                      comentario != None
110                                  """)
111                          
112        def __leer_area(self): return self.__area
113    
114        area = property(__leer_area,
115                        doc="""(string): el area a la que pertenece el objeto, si es que lo necesita.
116                        
117                            Invariantes:
118                                area != None
119                            """)
120    
121        def __leer_nombre(self): return self.__nombre
122    
123        nombre = property(__leer_nombre,
124                          doc="""(string): Una breve frase informando de qué es el objeto.
125                          
126                              Invariantes:
127                                  nombre != None
128                              """)
129    
130        def __leer_descripcion(self): return self.__descripcion
131    
132        descripcion = property(__leer_descripcion,
133                               doc="""({String:any}[]): descripción del objeto.
134    
135                                   Es una lista de diccionarios, conteniendo cada uno:
136                                    - "dificultad" (int): de 1 a 100
137                                    - "texto" (string): el contenido del item de descripcion
138                                    
139                                   Invariantes:
140                                       descripcion != None
141                                       len(descripcion) >= 0
142                                       descripcion[i]["dificultad"] in range(0,100)
143                                       descripcion[i]["texto"] != None
144                                   """)
145    
146        def __leer_tipo(self): return self.__tipo
147    
148        tipo = property(__leer_tipo,
149                        doc="""(string): el tipo de material del objeto.
150                        
151                            Invariantes:
152                                tipo != None
153                                tipo in TIPOS_DE_MATERIAL
154                            """)
155    
156        def __leer_categoria(self): return self.__categoria
157    
158        categoria = property(__leer_categoria,
159                             doc="""(string): el tipo de uso generico del objeto.
160                            
161                                 Invariantes:
162                                     categoria != None
163                                     categoria in CATEGORIAS
164                                 """)
165    
166        def __leer_peso(self): return self.__peso
167    
168        peso = property(__leer_peso,
169                        doc="""(float): peso en kilos.
170                        
171                            Invariantes:
172                                peso > 0
173                            """)
174    
175        def __leer_volumen(self): return self.__volumen
176    
177        volumen = property(__leer_volumen,
178                           doc="""(float): volumen en relación a 1 unidad de persona.
179                          
180                               Invariantes:
181                                   volumen > 0
182                               """)
183    
184        def __leer_cargas(self): return self.__cargas
185    
186        cargas = property(__leer_cargas,
187                          doc="""(int): el número de veces que puede ser usado antes de destruirse o
188                              volverse inservible. El valor 0 indica que no tiene limite.
189                              
190                              Invariantes:
191                                  cargas >= 0
192                              """)
193    
194        def __leer_valor(self): return self.__valor
195    
196        valor = property(__leer_valor,
197                         doc="""(int): en monedas de estaño.
198                        
199                             Invariantes:
200                                 valor > 0
201                             """)
202    
203        def __leer_estado(self): return self.__estado
204    
205        estado = property(__leer_estado,
206                          doc="""(int): de 0 a 100.
207                          
208                              Invariantes:
209                                  estado in range(0,100)
210                              """)
211    
212        def __leer_aura(self): return self.__aura
213    
214        aura = property(__leer_aura,
215                        doc="""(int): de 0 a 100.
216                        
217                            Invariantes:
218                                aura in range(0,100)
219                            """)
220    
221        def __leer_usos(self): return self.__usos
222    
223        usos = property(__leer_usos,
224                        doc="""({string:any}[]): lista de usos del objeto.
225    
226                            Cada uso es un diccionario:
227                             - "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.)
228                             - "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone
229                             - "gasto" (int): el numero de cargas que consume cada uso
230                             - "msg" (string): el mensaje que aparece cuando se usa
231                             - "duracion" (int): el numero de segundos que dura el efecto (0 = indeterminado)
232                             - "requisitos" ({string:any}[]): lista de requisitos del uso, siendo cada requisito
233                                                              un diccionario:
234                                  - "atributo" (string): el atributo a comprobar
235                                  - "valor" (int): el valor mínimo que deberá tener el atributo
236                                  - "msg" (string): el mensaje que sale si el atributo no llega al mínimo
237                             - "efectos" ({string:any}[]): lista de efectos que produce el uso, siendo cada
238                                                           efecto un diccionario:
239                                  - "atributo" (string): el atributo a modificar
240                                  - "valor" (int): el número de puntos que sube o baja (si es negativo)
241                                  - "duracion" (int): duración del efecto en segundos (0 = ilimitado)
242                                  - "msg" (string): el mensaje que sale cuando ocurre el efecto
243                                  
244                            Invariantes:
245                                usos != None
246                                len(usos) >= 0
247                                usos[i]["tipo"] in USOS
248                                usos[i]["posicion"] in POSICIONES
249                                usos[i]["gasto"] >= 0
250                                usos[i]["msg"] != None
251                                usos[i]["duracion"] >= 0
252                                usos[i]["requisitos"] != None
253                                usos[i]["requisitos"][j]["atributo"] != None
254                                usos[i]["requisitos"][j]["valor"] in range(0,100)
255                                usos[i]["requisitos"][j]["msg"] != None
256                                usos[i]["efectos"] != None
257                                usos[i]["efectos"][k]["atributo"] != None
258                                usos[i]["efectos"][k]["duracion"] >= 0
259                                usos[i]["efectos"][k]["msg"] != None
260                            """)
261    
262        # Constructor
263    
264      def __init__(self, id):      def __init__(self, id):
265          """Crea un objeto nuevo a partir de un fichero de descripcion de objeto.          """Crea un objeto nuevo a partir de un fichero de descripcion de objeto.
266    
# Line 158  class Objeto(object): Line 269  class Objeto(object):
269              id corresponde con un fichero existente              id corresponde con un fichero existente
270          """          """
271    
272            # Atributos privados:
273            #
274            # __fecha_fichero (int): fecha de la ultima modificacion del fichero de descripción
275            #
276            #                 Invariantes:
277            #                     __fecha_fichero >= 0
278    
279          self.__id = id            self.__id = id  
280          self.__inicializar_objeto()          self.__inicializar_objeto()
281                    
282    
     def id(self):           return self.__id  
     def version(self):      return self.__version  
     def autor(self):        return self.__autor  
     def comentario(self):   return self.__comentario  
     def area(self):         return self.__area  
     def nombre(self):       return self.__nombre  
     def descripcion(self):  return self.__descripcion  
     def tipo(self):         return self.__tipo  
     def categoria(self):    return self.__categoria  
     def peso(self):         return self.__peso  
     def volumen(self):      return self.__volumen  
     def cargas(self):       return self.__cargas  
     def valor(self):        return self.__valor  
     def estado(self):       return self.__estado  
     def aura(self):         return self.__aura  
     def usos(self):         return self.__usos  
   
   
283      def __inicializar_objeto(self):      def __inicializar_objeto(self):
284          """Rellena todos los datos del objeto a partir de su fichero de descripcion."""          """Rellena todos los datos del objeto a partir de su fichero de descripcion."""
285                    
# Line 376  class Objeto(object): Line 476  class Objeto(object):
476                                   "requisitos":uso_requisitos,                                   "requisitos":uso_requisitos,
477                                   "efectos":uso_efectos} )                                   "efectos":uso_efectos} )
478    
479        # Métodos especiales
     def activar(self):  
         """Realiza algunos chequeos periodicos de integridad del objeto.  
         Los chequeos se pueden hacer, por ejemplo, al coger el objeto.  
         """  
         archivo = os.path.join(Objeto.DIR_DESC_OBJETOS, self.__id + Objeto.EXT_DESC_OBJETOS)  
         if self.__fecha_fichero < os.path.getmtime(archivo):  
             # Si se modifica el fichero descriptor, recargarlo de nuevo  
             # reseteando completamente el objeto  
             escribir("Recargando objeto " + self.__id + " desde el fichero de descripcion")  
             self.__inicializar_objeto()  
   
480    
481      def __setstate__(self, atributos):      def __setstate__(self, atributos):
482          """Método llamado para restaurar los atributos provinientes de un pickle."""          """Método llamado para restaurar los atributos provinientes de un pickle."""
# Line 409  class Objeto(object): Line 498  class Objeto(object):
498    
499              escribir("Cargado objeto " + self.__id + " con versión desconocida: " +              escribir("Cargado objeto " + self.__id + " con versión desconocida: " +
500                       self.__version + ", cuando se esperaba " + Objeto.VERSION_OBJETO)                       self.__version + ", cuando se esperaba " + Objeto.VERSION_OBJETO)
501                
502    
503        # Métodos normales
504            
505        def activar(self):
506            """Realiza algunos chequeos periodicos de integridad del objeto.
507            Los chequeos se pueden hacer, por ejemplo, al coger el objeto.
508            """
509            archivo = os.path.join(Objeto.DIR_DESC_OBJETOS, self.__id + Objeto.EXT_DESC_OBJETOS)
510            if self.__fecha_fichero < os.path.getmtime(archivo):
511                # Si se modifica el fichero descriptor, recargarlo de nuevo
512                # reseteando completamente el objeto
513                escribir("Recargando objeto " + self.__id + " desde el fichero de descripcion")
514                self.__inicializar_objeto()
515        
516                    
517  # Código para pruebas unitarias del módulo.  # Código para pruebas unitarias del módulo.
518    

Legend:
Removed from v.2.2  
changed lines
  Added in v.2.3

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