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

Diff of /ambar/personaje.py

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

revision 2.17 by TuringTest, Tue Aug 19 22:46:26 2003 UTC revision 2.18 by amoyav, Sat Aug 30 13:31:25 2003 UTC
# Line 47  class Personaje(object): Line 47  class Personaje(object):
47    
48      # Versión del sistema de personajes (se incrementa al cambiar cualquiera      # Versión del sistema de personajes (se incrementa al cambiar cualquiera
49      # de Personaje, PersonajeJugador o PersonajeNoJugador)      # de Personaje, PersonajeJugador o PersonajeNoJugador)
50      VERSION = '1.5.3'      VERSION = '1.5.4'
51    
52      # Resultados de comparar otro personaje con este      # Resultados de comparar otro personaje con este
53      COMP_INF_MAS_FUERTE   = 9      COMP_INF_MAS_FUERTE   = 9
# Line 345  class Personaje(object): Line 345  class Personaje(object):
345          # Atributos privados:          # Atributos privados:
346          #          #
347          # __max_vida (int): valor inicial de la propiedad vida, nunca podrá superar este valor          # __max_vida (int): valor inicial de la propiedad vida, nunca podrá superar este valor
348            # __tiradas ({string:int}): nombres y resultados de las tiradas realizadas por este personaje
349            # __competiciones ({string:int}): nombres y resultados de las competiciones realizadas por este
350            #                                 personaje
351    
352          self.__id = id          self.__id = id
353          self.__version = Personaje.VERSION          self.__version = Personaje.VERSION
# Line 367  class Personaje(object): Line 370  class Personaje(object):
370          self.__siguiente = None          self.__siguiente = None
371          self.__anterior = None          self.__anterior = None
372    
373            self.__tiradas = {}
374            self.__competiciones = {}
375    
376          from objeto import Objeto          from objeto import Objeto
377    
378          self.__mochila = []          self.__mochila = []
# Line 446  class Personaje(object): Line 452  class Personaje(object):
452              raise ValueError("Cargado personaje " + self.__id + " obsoleto: sin versión" +              raise ValueError("Cargado personaje " + self.__id + " obsoleto: sin versión" +
453                               " cuando se esperaba " + Personaje.VERSION)                               " cuando se esperaba " + Personaje.VERSION)
454    
455          assert(Personaje.VERSION == "1.5.3")          assert(Personaje.VERSION == "1.5.4")
456          while self.__version != "1.5.3":          while self.__version != "1.5.4":
457    
458              # La versión 1.5.1 produce una ruptura con las anteriores ya que se migra al formato              # La versión 1.5.1 produce una ruptura con las anteriores ya que se migra al formato
459              # de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas              # de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas
# Line 471  class Personaje(object): Line 477  class Personaje(object):
477                      self._PersonajeJugador__raza = self._PersonajeJugador__raza.nombre                      self._PersonajeJugador__raza = self._PersonajeJugador__raza.nombre
478                  self.__version = "1.5.3"                  self.__version = "1.5.3"
479                  escribir("Convertido personaje " + self.__id + " a versión 1.5.3")                  escribir("Convertido personaje " + self.__id + " a versión 1.5.3")
480                if self.__version == "1.5.3":
481                    # Versión 1.5.3 -> 1.5.4: añadir __tiradas y __competiciones
482                    self.__tiradas = {}
483                    self.__competiciones = {}
484                    self.__version = "1.5.4"
485                    escribir("Convertido personaje " + self.__id + " a versión 1.5.4")
486              else:              else:
487                  raise ValueError("Cargado personaje " + self.__id + " con versión desconocida: " +                  raise ValueError("Cargado personaje " + self.__id + " con versión desconocida: " +
488                                   self.__version + " cuando se esperaba " + Personaje.VERSION)                                   self.__version + " cuando se esperaba " + Personaje.VERSION)
# Line 614  class Personaje(object): Line 626  class Personaje(object):
626    
627          Si la sala destino se llena, los que vengan detrás en compañia la abandonan.          Si la sala destino se llena, los que vengan detrás en compañia la abandonan.
628    
629            Se olvidan todas las tiradas y competiciones memorizadas.
630    
631          El parametro automatico es solo para uso interno.          El parametro automatico es solo para uso interno.
632                    
633          Requiere:          Requiere:
# Line 654  class Personaje(object): Line 668  class Personaje(object):
668                          "al límite de su capacidad y no cabes. Ya no sigues a " + self.__id + ".")                          "al límite de su capacidad y no cabes. Ya no sigues a " + self.__id + ".")
669                      self.__siguiente.no_seguir()                      self.__siguiente.no_seguir()
670    
671                self.__tiradas = {}
672                self.__competiciones = {}
673    
674          except:          except:
675              escribir("Excepción imprevista durante el movimiento de un personaje.")              escribir("Excepción imprevista durante el movimiento de un personaje.")
676              escribir_excepcion()              escribir_excepcion()
# Line 987  class Personaje(object): Line 1004  class Personaje(object):
1004          return result          return result
1005    
1006    
1007      def tirada_atributo(self, atributo, modif_atributo):      def tirar_atributo(self, id_tirada, atributo, modif_atributo):
1008          """Realiza una tirada de datos basada en un atributo."""          """Realiza una tirada de datos basada en un atributo.
1009            
1010            El personaje recuerda el resultado de la tirada por su id, hasta que se mueva a otra sala.
1011            """
1012    
1013          nivel_atrib = self.__atrib[atributo] + modif_atributo          nivel_atrib = self.__atrib[atributo] + modif_atributo
1014          n_dados = floor(nivel_atrib / 6) + 1          n_dados = floor(nivel_atrib / 6) + 1
1015          tirada = nivel_atrib + tirar_dados(n_dados)          tirada = nivel_atrib + tirar_dados(n_dados)
1016    
1017          return tirada          self.__tiradas[id_tirada] = tirada
1018    
1019            return tirada
1020    
1021    
1022      def generar_dificultad(self, atributo, modif_atributo):      def generar_dificultad(self, atributo, modif_atributo):
# Line 1015  class Personaje(object): Line 1037  class Personaje(object):
1037          return dificultad          return dificultad
1038    
1039    
1040      def resultado_tirada(self, tirada, dificultad, modif_dificultad):      def resultado_tirada(self, id_tirada, dificultad, modif_dificultad=0):
1041          """Devuelve el numero de exitos o fallos de una tirada contra una dificultad."""          """Devuelve el numero de exitos o fallos de una tirada contra una dificultad."""
1042            tirada = self.__tiradas[id_tirada]
1043          diferencia = tirada - (dificultad + modif_dificultad)          diferencia = tirada - (dificultad + modif_dificultad)
1044    
1045          # esto no me convence: la distribucion de las tiradas es muy rara,          # esto no me convence: la distribucion de las tiradas es muy rara,
# Line 1039  class Personaje(object): Line 1062  class Personaje(object):
1062          Devuelve el nº de exitos (>0) si la prueba ha sido superada o el nº de          Devuelve el nº de exitos (>0) si la prueba ha sido superada o el nº de
1063          fallos (<0) si no lo ha sido.          fallos (<0) si no lo ha sido.
1064          """          """
1065          return self.resultado_tirada(self.tirada_atributo(atributo, modif_atributo),          self.tirar_atributo("prueba", atributo, modif_atributo)
1066                                       dificultad, modif_dificultad)          return self.resultado_tirada("prueba", dificultad, modif_dificultad)
1067    
1068    
1069      def competicion(self, otro_personaje, atrib_este, atrib_otro):      def competicion(self, otro_personaje, atrib_este, atrib_otro):
# Line 1053  class Personaje(object): Line 1076  class Personaje(object):
1076          Devuelve true si este personaje ha ganado la competición.          Devuelve true si este personaje ha ganado la competición.
1077          """          """
1078    
1079          tirada_este = self.tirada_atributo(atrib_este, 0)          tirada_este = self.tirar_atributo("competicion", atrib_este, 0)
1080          tirada_otro = otro_personaje.tirada_atributo(atrib_otro, 0)          tirada_otro = otro_personaje.tirar_atributo("competicion", atrib_otro, 0)
1081          if tirada_este > tirada_otro:          if tirada_este > tirada_otro:
1082              return 1              return 1
1083          else:          else:
# Line 1073  class Personaje(object): Line 1096  class Personaje(object):
1096    
1097    
1098      def resucitar(self):      def resucitar(self):
1099          """Esto es totalmente provisional, hasta que implementemos el sistema de muerte de verdad."""          """ESTO ES TOTALMENTE PROVISIONAL, HASTA QUE IMPLEMENTEMOS EL SISTEMA DE MUERTE DE VERDAD."""
1100          self.actuar_uno_mismo("Estas bastante MUERTO")          self.actuar_uno_mismo("Estas bastante MUERTO")
1101          self.actuar_uno_mismo("Pero como todavía no está hecho el código de morirse, pues vamos " + \          self.actuar_uno_mismo("Pero como todavía no está hecho el código de morirse, pues vamos " + \
1102                                "y te resucitamos por todo el morro")                                "y te resucitamos por todo el morro")
1103          self.actuar_uno_mismo("Hale, a seguir tirando")          self.actuar_uno_mismo("Hale, a seguir tirando")
1104          self.actuar("tiembla un poco, gimotea, y cae al suelo, MUERTO.")          self.actuar("tiembla un poco, gimotea, y cae al suelo, MUERTO.")
1105          self.actuar("de pronto, se levanta, se sacude el polvo, dice 'vaya, que chungo', y " + \          self.actuar("De pronto, se levanta, se sacude el polvo, dice 'vaya, que chungo', y " + \
1106                      "se encuentra de nuevo tan campante. ¿Pero esto qué es?")                      "se encuentra de nuevo tan campante. ¿Pero esto qué es?")
1107          self.__vida = self.__atrib["constitucion"] * 2          self.__vida = self.__atrib["constitucion"] * 2
1108          if getattr(self, "alimentar", None) != None:          if getattr(self, "alimentar", None) != None:
# Line 1678  class Personaje(object): Line 1701  class Personaje(object):
1701          return objeto.nombre          return objeto.nombre
1702    
1703    
1704      def objeto_destruido(self, objeto_destruido):      def objeto_desaparece(self, objeto):
1705          """Un objeto contenido en este personaje ha sido destruido.          """Un objeto contenido en este personaje ha desaparecido.
1706    
1707          Hay que eliminarlo de la mochila o del cuerpo, donde esté. Este método será llamado          Hay que eliminarlo de la mochila o del cuerpo, donde esté. No ocurre ningún suceso
1708          sólo desde el propio objeto, a través del interfaz Contenedor.          en particular. Este método será llamado sólo desde el propio objeto, a través del
1709            interfaz Contenedor.
1710          """          """
1711          objeto_destruido.liberar()          objeto.liberar()
1712    
1713          encontrado = False          encontrado = False
1714          for i, instancias in izip(self.__mochila):          for i, instancias in izip(self.__mochila):
1715              for j, instancia in izip(instancias):              for j, instancia in izip(instancias):
1716                  if instancia == objeto_destruido:                  if instancia == objeto:
1717                      del instancias[j]                      del instancias[j]
1718                      if len(instancias) == 0:                      if len(instancias) == 0:
1719                          del self.__mochila[i]                          del self.__mochila[i]
# Line 1698  class Personaje(object): Line 1722  class Personaje(object):
1722    
1723          if not encontrado:          if not encontrado:
1724              for parte in self.__cuerpo.keys():              for parte in self.__cuerpo.keys():
1725                  if self.__cuerpo[parte] == objeto_destruido:                  if self.__cuerpo[parte] == objeto:
1726                      del self.__cuerpo[parte]                      del self.__cuerpo[parte]
1727                      break                      break
1728    
1729    
1730        def objeto_aparece(self, objeto):
1731            """Un objeto ha aparecido en este personaje (transportado automáticamente).
1732    
1733            Hay que añadir el obeto a la mochila. No ocurre ningún suceso en particular.
1734            Este método será llamado sólo desde el propio objeto, a través del
1735            interfaz Contenedor.
1736            """
1737            objeto.contener(self)
1738            
1739            for instancias in self.__mochila:
1740                if instancias[0].id == objeto.id:
1741                    instancias.append(objeto)
1742                    break
1743            else:
1744                self.__mochila.append([objeto])
1745    
1746    
1747      def objeto_reemplazado(self, objeto_antiguo, objeto_nuevo):      def objeto_reemplazado(self, objeto_antiguo, objeto_nuevo):
1748          """Un objeto contenido en este personaje ha sido destruido, y reemplazado por otro.          """Un objeto contenido en este personaje ha sido destruido, y reemplazado por otro.
1749    
1750          Hay que eliminar el antiguo de la mochila o del cuerpo, donde esté, y añadir el nuevo.          Hay que eliminar el antiguo de la mochila o del cuerpo, donde esté, y añadir el nuevo
1751          Este método será llamado sólo desde el propio objeto, a través del interfaz Contenedor.          en el mismo lugar donde estaba el antiguo. No ocurre ningún suceso en particular. Este
1752            método será llamado sólo desde el propio objeto, a través del interfaz Contenedor.
1753          """          """
1754          objeto_antiguo.liberar()          objeto_antiguo.liberar()
1755    

Legend:
Removed from v.2.17  
changed lines
  Added in v.2.18

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