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

Diff of /ambar/personajejugador.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 Jul 5 23:25:52 2003 UTC
# Line 25  Line 25 
25    
26  import sys  import sys
27  from personaje import *  from personaje import *
28    from cronomine import *
29    
30  class PersonajeJugador(Personaje):  class PersonajeJugador(Personaje):
31      """Cualquier personaje controlado por un jugador.      """Cualquier personaje controlado por un jugador.
# Line 218  class PersonajeJugador(Personaje): Line 219  class PersonajeJugador(Personaje):
219                                  silencio in ["si", "no"]                                  silencio in ["si", "no"]
220                              """)                              """)
221    
222        def __leer_hambre(self): return self.__hambre
223    
224        hambre = property(__leer_hambre,
225                          doc="""(int): nivel de hambre del personaje (de 0 = satisfecho
226                              a 15 = muriendose de hambre).
227    
228                              Invariantes:
229                                  hambre in range(0, 16)
230                              """)
231    
232    
233        def __leer_mensaje_hambre(self):
234            return self.__raza.niveles_hambre[int(self.__hambre)]["mensaje"]
235    
236        mensaje_hambre = property(__leer_mensaje_hambre,
237                                  doc="""(string): texto que refleja el hambre que tiene
238                                      el personaje.
239    
240                                      Invariantes:
241                                          mensaje_hambre != None
242                                      """)
243    
244    
245        def __leer_sed(self): return self.__sed
246    
247        sed = property(__leer_sed,
248                       doc="""(int): nivel de sed del personaje (de 0 = satisfecho
249                              a 15 = muriendose de sed).
250    
251                              Invariantes:
252                                  sed in range(0, 16)
253                              """)
254    
255    
256        def __leer_mensaje_sed(self):
257            return self.__raza.niveles_sed[int(self.__sed)]["mensaje"]
258    
259        mensaje_sed = property(__leer_mensaje_sed,
260                               doc="""(string): texto que refleja el sed que tiene
261                                   el personaje.
262    
263                                   Invariantes:
264                                       mensaje_sed != None
265                                   """)
266    
267      # Constructor      # Constructor
268    
269      def __init__(self, id, clave, es_maia, nombre, descripcion, experiencia, nivel, vida,      def __init__(self, id, clave, es_maia, nombre, descripcion, experiencia, nivel, vida,
# Line 235  class PersonajeJugador(Personaje): Line 281  class PersonajeJugador(Personaje):
281          Personaje.__init__(self, id, sala, nombre, descripcion, experiencia, nivel, vida,          Personaje.__init__(self, id, sala, nombre, descripcion, experiencia, nivel, vida,
282                             volumen, estado, aura, controlador, atrib, idiomas, idioma_base)                             volumen, estado, aura, controlador, atrib, idiomas, idioma_base)
283    
284            # Atributos privados:
285            #
286            # - __crono_subir_hambre(CronoMine): cronometro que cada vez que vence, sube
287            #                                    un nivel de hambre
288            # - __crono_msg_hambre(CronoMine): cronometro que cada vez que vence, muestra
289            #                                  un mensaje de hambre y produce daño
290            # - __crono_subir_sed(CronoMine): cronometro que cada vez que vence, sube
291            #                                 un nivel de sed
292            # - __crono_msg_sed(CronoMine): cronometro que cada vez que vence, muestra
293            #                               un mensaje de sed y produce daño
294            #
295            # Invariantes:
296            #   self.__crono_subir_hambre != None
297            #   self.__crono_subir_sed != None
298    
299          self.__clave = clave          self.__clave = clave
300          self.__es_maia = es_maia          self.__es_maia = es_maia
301          self.__raza = raza          self.__raza = raza
# Line 246  class PersonajeJugador(Personaje): Line 307  class PersonajeJugador(Personaje):
307          self.__color_de_ojos = color_de_ojos          self.__color_de_ojos = color_de_ojos
308          self.__color_de_pelo = color_de_pelo          self.__color_de_pelo = color_de_pelo
309          self.__silencio = 'no'          self.__silencio = 'no'
310            self.__hambre = 0
311            self.__sed = 0
312    
313            self.__crono_subir_hambre = None
314            self.__crono_subir_sed = None
315            self.__crono_msg_hambre = None
316            self.__crono_msg_sed = None
317    
318            self.__efectos_hambre()
319            self.__efectos_sed()
320    
321          # Dos opciones según el personaje venga ya controlado o no          # Dos opciones según el personaje venga ya controlado o no
322          if self._Personaje__controlador == None:          if self._Personaje__controlador == None:
# Line 260  class PersonajeJugador(Personaje): Line 331  class PersonajeJugador(Personaje):
331              self._Personaje__sala.entrar_personaje(self)  # se asume que el limbo tiene              self._Personaje__sala.entrar_personaje(self)  # se asume que el limbo tiene
332                                                            # capacidad de volumen infinita                                                            # capacidad de volumen infinita
333    
334                # Al estar en el limbo, los cronometros estan pausados
335                self._PersonajeJugador__crono_subir_hambre.pausar()
336                self._PersonajeJugador__crono_subir_sed.pausar()
337                if self._PersonajeJugador__crono_msg_hambre != None:
338                    self._PersonajeJugador__crono_msg_hambre.pausar()
339                if self._PersonajeJugador__crono_msg_sed != None:
340                    self._PersonajeJugador__crono_msg_sed.pausar()
341    
342              self.actuar_global("ha sido creado")              self.actuar_global("ha sido creado")
343    
344          else:          else:
# Line 278  class PersonajeJugador(Personaje): Line 357  class PersonajeJugador(Personaje):
357                                                            # capacidad de volumen infinita                                                            # capacidad de volumen infinita
358    
359    
360        # métodos normales
361    
362        def alimentar(self, puntos_nutritivos):
363            """Se reduce el nivel de hambre de un personaje.
364            
365            El nivel reducido depende de la raza (para un humano, 1 punto nutritivo =
366            1 nivel de hambre). Si llega a 0, el exceso de puntos nutritivos se
367            pierde.
368    
369            Requiere:
370                puntos_nutritivos > 0
371            """
372            self.__hambre -= puntos_nutritivos / self.__raza.puntos_nutritivos
373            if self.__hambre < 0:
374                self.__hambre = 0
375            self.__efectos_hambre()
376    
377    
378        def hidratar(self, puntos_hidratantes):
379            """Se reduce el nivel de sed de un personaje.
380            
381            El nivel reducido depende de la raza (para un humano, 1 punto hidratante =
382            1 nivel de sed). Si llega a 0, el exceso de puntos hidratantes se
383            pierde.
384    
385            Requiere:
386                puntos_hidratantes > 0
387            """
388            self.__sed -= puntos_hidratantes / self.__raza.puntos_hidratantes
389            if self.__sed < 0:
390                self.__sed = 0
391            self.__efectos_sed()
392    
393    
394        # Métodos privados
395    
396        def __efectos_hambre(self):
397            """Ejecuta los efectos correspondientes según nivel de hambre."""
398            
399            from mundo import Mundo
400    
401            # Iniciar el cronometro para subir al siguiente nivel de hambre
402            tiempo_subir_hambre = self.__raza.tiempo_hambre
403            self.__crono_subir_hambre = CronoMine(Mundo.cronoMine_control,
404                                                  FechaHoraMineRel(horas = tiempo_subir_hambre),
405                                                  self.__vencido_crono_subir_hambre)
406    
407            # Comprobar los datos del nivel actual de hambre
408            hambre_int = int(self.__hambre)
409            nivel_hambre = self.__raza.niveles_hambre[hambre_int]
410            if nivel_hambre["horas"] > 0:
411                # Si hay efectos, enviar el mensaje, producir el daño e iniciar
412                # el cronometro para el siguiente mensaje.
413                self.actuar_uno_mismo(nivel_hambre["mensaje"])
414                self.danar(nivel_hambre["puntos_dano"])
415                self.__crono_msg_hambre = CronoMine(Mundo.cronoMine_control,
416                                                    FechaHoraMineRel(horas = nivel_hambre["horas"]),
417                                                    self.__vencido_crono_msg_hambre)
418            else:
419                # Si no, destruir el crono, si lo hay
420                if self.__crono_msg_hambre != None:
421                    self.__crono_msg_hambre.parar()
422                    self.__crono_msg_hambre = None
423    
424    
425        def __vencido_crono_subir_hambre(self, crono):
426            """Realiza las acciones que ocurren al subir un nivel de hambre."""
427            self.__hambre += 1
428            if self.__hambre > 15:
429                self.__hambre = 15
430            self.__efectos_hambre()
431            escribir('El personaje ' + self.id + ' aumenta un nivel de hambre.')
432    
433    
434        def __vencido_crono_msg_hambre(self, crono):
435            """Realiza las acciones que ocurren al mostrar un mensaje de hambre."""
436    
437            from mundo import Mundo
438    
439            hambre_int = int(self.__hambre)
440            nivel_hambre = self.__raza.niveles_hambre[hambre_int]
441            if nivel_hambre["horas"] > 0:
442                # Si hay efectos, enviar el mensaje, producir el daño e iniciar
443                # el cronometro para el siguiente mensaje.
444                self.actuar_uno_mismo(nivel_hambre["mensaje"])
445                self.danar(nivel_hambre["puntos_dano"])
446                self.__crono_msg_hambre = CronoMine(Mundo.cronoMine_control,
447                                                    FechaHoraMineRel(horas = nivel_hambre["horas"]),
448                                                    self.__vencido_crono_msg_hambre)
449    
450        def __efectos_sed(self):
451            """Ejecuta los efectos correspondientes según nivel de sed."""
452            
453            from mundo import Mundo
454    
455            # Iniciar el cronometro para subir al siguiente nivel de sed
456            tiempo_subir_sed = self.__raza.tiempo_sed
457            self.__crono_subir_sed = CronoMine(Mundo.cronoMine_control,
458                                                  FechaHoraMineRel(horas = tiempo_subir_sed),
459                                                  self.__vencido_crono_subir_sed)
460    
461            # Comprobar los datos del nivel actual de sed
462            sed = int(self.__sed)
463            nivel_sed = self.__raza.niveles_sed[sed]
464            if nivel_sed["horas"] > 0:
465                # Si hay efectos, enviar el mensaje, producir el daño e iniciar
466                # el cronometro para el siguiente mensaje.
467                self.__actuar_uno_mismo(nivel_sed["mensaje"])
468                self.__danar(nivel_sed["puntos_dano"])
469                self.__crono_msg_sed = CronoMine(Mundo.cronoMine_control,
470                                                    FechaHoraMineRel(horas = nivel_sed["horas"]),
471                                                    self.__vencido_crono_msg_sed)
472            else:
473                # Si no, destruir el crono, si lo hay
474                if self.__crono_msg_sed != None:
475                    self.__crono_msg_sed.parar()
476                    self.__crono_msg_sed = None
477    
478    
479        def __vencido_crono_subir_sed(self, crono):
480            """Realiza las acciones que ocurren al subir un nivel de sed."""
481            self.__sed += 1
482            if self.__sed > 15:
483                self.__sed = 15
484            self.__efectos_sed()
485            escribir('El personaje ' + self.id + ' aumenta un nivel de sed.')
486    
487    
488        def __vencido_crono_msg_sed(self, crono):
489            """Realiza las acciones que ocurren al mostrar un mensaje de sed."""
490            
491            from mundo import Mundo
492    
493            sed = int(self.__sed)
494            nivel_sed = self.__raza.niveles_sed[sed]
495            if nivel_sed["horas"] > 0:
496                # Si hay efectos, enviar el mensaje, producir el daño e iniciar
497                # el cronometro para el siguiente mensaje.
498                self.__actuar_uno_mismo(nivel_sed["mensaje"])
499                self.__danar(nivel_sed["puntos_dano"])
500                self.__crono_msg_sed = CronoMine(Mundo.cronoMine_control,
501                                                    FechaHoraMineRel(horas = nivel_sed["horas"]),
502                                                    self.__vencido_crono_msg_sed)
503    
504    
505  # Código para pruebas unitarias del módulo.  # Código para pruebas unitarias del módulo.
506    
507  if (__name__ == '__main__'):  if (__name__ == '__main__'):

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