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: |
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 |
|
|
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 |
|
|
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: |
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: |
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: |
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__'): |