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

Diff of /ambar/personaje.py

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

revision 2.15 by amoyav, Sat Jul 5 23:25:52 2003 UTC revision 2.16 by amoyav, Wed Jul 30 14:17:58 2003 UTC
# Line 656  class Personaje(object): Line 656  class Personaje(object):
656    
657          except:          except:
658    
659              # Si hay algún error en los avisos, intentamos mover el objeto              # Si hay algún error en los avisos, intentamos mover el pesonaje
660              # a un estado consistente (cumpliendo todas las invariantes)              # a un estado consistente (cumpliendo todas las invariantes)
661              # antes de cascar              # antes de cascar
662              if self.__sala != sala_destino:              if self.__sala != sala_destino:
# Line 1365  class Personaje(object): Line 1365  class Personaje(object):
1365          return objeto.nombre          return objeto.nombre
1366    
1367    
1368        def usar_con(self, id_objeto, n_orden=1, n_instancia=1,
1369                     id_objeto2=None, n_orden2=1, n_instancia2=1,
1370                     sigilo=0):
1371            """Usa una instancia de un objeto de la mochila, con otra instancia de objeto,
1372            que puede estar en la mochila o en la sala.
1373    
1374            Resto de información del método igual que comer().
1375            """
1376            n_objeto = self.buscar_en_mochila(id_objeto, n_orden)
1377            objeto = self.acceder_a_mochila(n_objeto, n_instancia)
1378    
1379            try:
1380                n_objeto2 = self.buscar_en_mochila(id_objeto2, n_orden2)
1381                objeto2 = self.acceder_a_mochila(n_objeto2, n_instancia2)
1382            except ExcepcionDeJuego:
1383                n_objeto2 = self.__sala.buscar_objeto(id_objeto2, n_orden2)
1384                objeto2 = self.__sala.acceder_a_objeto(n_objeto2, n_instancia2)
1385    
1386            result = objeto.personaje_usa_con(self, objeto2)
1387            if result == 0:
1388                raise ExcepcionDeJuego("No puedes usar este objeto.")
1389            else:
1390                if not sigilo:
1391                    #%% aquí habría que hacer una tirada en algún sitio...
1392                    self.actuar("usa " + objeto.nombre + " con " + objeto2.nombre)
1393    
1394            return objeto.nombre
1395    
1396    
1397      def meter_en_mochila(self, objetos):      def meter_en_mochila(self, objetos):
1398          """Introducir una o varias instancias de un objeto en la mochila del personaje.          """Introducir una o varias instancias de un objeto en la mochila del personaje.
1399    
# Line 1372  class Personaje(object): Line 1401  class Personaje(object):
1401              objetos != None              objetos != None
1402              len(objetos) >= 1              len(objetos) >= 1
1403          """          """
1404          encontrado = 0          for objeto in objetos:
1405                objeto.contener(self)
1406    
1407          for instancias in self.__mochila:          for instancias in self.__mochila:
1408              if instancias[0].id == objetos[0].id:              if instancias[0].id == objetos[0].id:
                 encontrado = 1  
1409                  instancias.extend(objetos)                  instancias.extend(objetos)
1410                  break                  break
1411            else:
         if not encontrado:  
1412              self.__mochila.append(objetos)              self.__mochila.append(objetos)
1413    
1414    
# Line 1482  class Personaje(object): Line 1511  class Personaje(object):
1511    
1512          for i in range(0, cantidad):          for i in range(0, cantidad):
1513              objetos_sacados.append(instancias[n_instancia-1])              objetos_sacados.append(instancias[n_instancia-1])
1514                instancias[n_instancia-1].activar()
1515                instancias[n_instancia-1].liberar()
1516              del instancias[n_instancia-1]              del instancias[n_instancia-1]
1517    
1518          if len(instancias) == 0:          if len(instancias) == 0:
# Line 1594  class Personaje(object): Line 1625  class Personaje(object):
1625              raise ExcepcionDeJuego("No te puedes poner este objeto en esa posicion.")              raise ExcepcionDeJuego("No te puedes poner este objeto en esa posicion.")
1626          else:          else:
1627              objeto = self.sacar_de_mochila(n_objeto, n_instancia, 1)[0]              objeto = self.sacar_de_mochila(n_objeto, n_instancia, 1)[0]
1628                objeto.contener(self)
1629              self.__cuerpo[posicion] = objeto              self.__cuerpo[posicion] = objeto
1630              self.actuar_uno_mismo("Te pones " + objeto.nombre + " en " + posicion)              self.actuar_uno_mismo("Te pones " + objeto.nombre + " en " + posicion)
1631              if not sigilo:              if not sigilo:
# Line 1632  class Personaje(object): Line 1664  class Personaje(object):
1664              raise ExcepcionDeJuego("No te puedes quitar este objeto de esa posicion.")              raise ExcepcionDeJuego("No te puedes quitar este objeto de esa posicion.")
1665          else:          else:
1666              del self.__cuerpo[posicion]              del self.__cuerpo[posicion]
1667                objeto.liberar()
1668              self.meter_en_mochila([objeto])              self.meter_en_mochila([objeto])
1669              self.actuar_uno_mismo("Te quitas " + objeto.nombre + " de " + posicion)              self.actuar_uno_mismo("Te quitas " + objeto.nombre + " de " + posicion)
1670              if not sigilo:              if not sigilo:
# Line 1641  class Personaje(object): Line 1674  class Personaje(object):
1674          return objeto.nombre          return objeto.nombre
1675    
1676    
1677        def objeto_destruido(self, objeto_destruido):
1678            """Un objeto contenido en este personaje ha sido destruido.
1679    
1680            Hay que eliminarlo de la mochila o del cuerpo, donde esté. Este método será llamado
1681            sólo desde el propio objeto, a través del interfaz Contenedor.
1682            """
1683            objeto_destruido.liberar()
1684    
1685            encontrado = False
1686            for i, instancias in izip(self.__mochila):
1687                for j, instancia in izip(instancias):
1688                    if instancia == objeto_destruido:
1689                        del instancias[j]
1690                        if len(instancias) == 0:
1691                            del self.__mochila[i]
1692                        encontrado = True
1693                        break
1694    
1695            if not encontrado:
1696                for parte in self.__cuerpo.keys():
1697                    if self.__cuerpo[parte] == objeto_destruido:
1698                        del self.__cuerpo[parte]
1699                        break
1700    
1701    
1702        def objeto_reemplazado(self, objeto_antiguo, objeto_nuevo):
1703            """Un objeto contenido en este personaje ha sido destruido, y reemplazado por otro.
1704    
1705            Hay que eliminar el antiguo de la mochila o del cuerpo, donde esté, y añadir el nuevo.
1706            Este método será llamado sólo desde el propio objeto, a través del interfaz Contenedor.
1707            """
1708            objeto_antiguo.liberar()
1709    
1710            encontrado = False
1711            for i, instancias in izip(self.__mochila):
1712                for j, instancia in izip(instancias):
1713                    if instancia == objeto_antiguo:
1714                        del instancias[j]
1715                        if len(instancias) == 0:
1716                            del self.__mochila[i]
1717                        encontrado = True
1718                        break
1719    
1720            if not encontrado:
1721                for parte in self.__cuerpo.keys():
1722                    if self.__cuerpo[parte] == objeto_antiguo:
1723                        del self.__cuerpo[parte]
1724                        break
1725            else:
1726                parte = None
1727    
1728            objeto_nuevo.contener(self)
1729            
1730            if parte == None:
1731                for instancias in self.__mochila:
1732                    if instancias[0].id == objeto_nuevo.id:
1733                        instancias.append(objeto_nuevo)
1734                        break
1735                else:
1736                    self.__mochila.append([objeto_nuevo])
1737            else:
1738                self.__cuerpo[parte] = objeto_nuevo
1739    
1740    
1741  # Código para pruebas unitarias del módulo.  # Código para pruebas unitarias del módulo.
1742    
1743  if (__name__ == '__main__'):  if (__name__ == '__main__'):

Legend:
Removed from v.2.15  
changed lines
  Added in v.2.16

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