890 |
return ocupado |
return ocupado |
891 |
|
|
892 |
|
|
893 |
|
def objeto_en_sala(self, nombre_objeto): |
894 |
|
"""Comprueba si en la sala existe un objeto con el nombre indicado. |
895 |
|
|
896 |
|
El nombre puede ser una expresión regular simple (con * y ?, como los wilcards de DOS). |
897 |
|
|
898 |
|
Requiere: |
899 |
|
nombre_objeto != None |
900 |
|
""" |
901 |
|
# Convertir la expresion regular de tipo ?* al estilo del módulo sre. |
902 |
|
nombre_objeto = "^" + nombre_objeto.replace("?", ".").replace("*", ".*") + "$" |
903 |
|
for objeto in self.__objetos: |
904 |
|
if len(objeto["instancias"]) > 0: |
905 |
|
if sre.match(nombre_objeto, objeto["instancias"][0].nombre): |
906 |
|
resultado = 1 |
907 |
|
break |
908 |
|
else: |
909 |
|
resultado = 0 |
910 |
|
|
911 |
|
return resultado |
912 |
|
|
913 |
|
|
914 |
def buscar_objeto(self, id_objeto, n_orden=1): |
def buscar_objeto(self, id_objeto, n_orden=1): |
915 |
"""Localiza un objeto en la sala. |
"""Localiza un objeto en la sala. |
916 |
|
|
1050 |
"instancias":objetos}) |
"instancias":objetos}) |
1051 |
|
|
1052 |
|
|
1053 |
def objeto_destruido(self, objeto_destruido): |
def objeto_desaparece(self, objeto): |
1054 |
"""Un objeto contenido en esta sala ha sido destruido. |
"""Un objeto contenido en esta sala ha desaparecido de aquí. |
1055 |
|
|
1056 |
Hay que eliminarlo de la lista de instancias de la sala. Este método será llamado |
Hay que eliminarlo de la lista de instancias de la sala. Este método será llamado |
1057 |
sólo desde el propio objeto, a través del interfaz Contenedor. |
sólo desde el propio objeto, a través del interfaz Contenedor. |
1058 |
""" |
""" |
1059 |
objeto_destruido.liberar() |
objeto.liberar() |
1060 |
for i, objeto in izip(self.__objetos): |
for i, objeto in izip(self.__objetos): |
1061 |
instancias = objeto["instancias"] |
instancias = objeto["instancias"] |
1062 |
for j, instancia in izip(instancias): |
for j, instancia in izip(instancias): |
1063 |
if instancia == objeto_destruido: |
if instancia == objeto: |
1064 |
del instancias[j] |
del instancias[j] |
1065 |
if len(instancias) == 0 and objeto["probabilidad"] == 0: |
if len(instancias) == 0 and objeto["probabilidad"] == 0: |
1066 |
del self.__objetos[i] |
del self.__objetos[i] |
1067 |
break |
break |
1068 |
|
|
1069 |
|
|
1070 |
def objeto_reemplazado(self, objeto_antiguo, objeto_nuevo): |
def objeto_aparece(self, objeto): |
1071 |
"""Un objeto contenido en esta sala ha sido destruido, y reemplazado por otro. |
"""Un objeto aparece en esta sala. |
1072 |
|
|
1073 |
Hay que eliminar el antiguo de la lista de instancias de la sala, y añadir el nuevo. |
Hay que añadirlo a la lista de instancias de la sala. Este método será llamado |
1074 |
Este método será llamado sólo desde el propio objeto, a través del interfaz Contenedor. |
sólo desde el propio objeto, a través del interfaz Contenedor. |
1075 |
""" |
""" |
1076 |
objeto_antiguo.liberar() |
objeto.contener(self) |
|
for i, objeto in izip(self.__objetos): |
|
|
instancias = objeto["instancias"] |
|
|
for j, instancia in izip(instancias): |
|
|
if instancia == objeto_antiguo: |
|
|
del instancias[j] |
|
|
if len(instancias) == 0 and objeto["probabilidad"] == 0: |
|
|
del self.__objetos[i] |
|
|
break |
|
|
|
|
|
objeto_nuevo.contener(self) |
|
1077 |
|
|
1078 |
for objeto in self.__objetos: |
for objeto in self.__objetos: |
1079 |
if objeto["id"] == objeto_nuevo.id: |
if objeto["id"] == objeto.id: |
1080 |
objeto["instancias"].append(objeto_nuevo) |
objeto["instancias"].append(objeto) |
1081 |
break |
break |
1082 |
else: |
else: |
1083 |
self.__objetos.append({"id":instancia.id, |
self.__objetos.append({"id":instancia.id, |
1085 |
"maximo":0, |
"maximo":0, |
1086 |
"dificultad":dificultad, |
"dificultad":dificultad, |
1087 |
"cantidad":1, |
"cantidad":1, |
1088 |
"descripcion":objeto_nuevo.nombre, |
"descripcion":objeto.nombre, |
1089 |
"instancias":[objeto_nuevo]}) |
"instancias":[objeto]}) |
|
|
|
1090 |
|
|
|
def objeto_en_sala(self, nombre_objeto): |
|
|
"""Comprueba si en la sala existe un objeto con el nombre indicado. |
|
1091 |
|
|
1092 |
El nombre puede ser una expresión regular simple (con * y ?, como los wilcards de DOS). |
def objeto_reemplazado(self, objeto_antiguo, objeto_nuevo): |
1093 |
|
"""Un objeto contenido en esta sala es reemplazado por otro. |
1094 |
|
|
1095 |
Requiere: |
Hay que borrar el objeto antiguo de la lista de instancias de la sala, y añadir |
1096 |
nombre_objeto != None |
el nuevo. Este método será llamado sólo desde el propio objeto, a través del |
1097 |
|
interfaz Contenedor. |
1098 |
""" |
""" |
1099 |
# Convertir la expresion regular de tipo ?* al estilo del módulo sre. |
self.objeto_desaparece(objeto_antiguo) |
1100 |
nombre_objeto = "^" + nombre_objeto.replace("?", ".").replace("*", ".*") + "$" |
self.objeto_aparece(objeto_nuevo) |
|
for objeto in self.__objetos: |
|
|
if len(objeto["instancias"]) > 0: |
|
|
if sre.match(nombre_objeto, objeto["instancias"][0].nombre): |
|
|
resultado = 1 |
|
|
break |
|
|
else: |
|
|
resultado = 0 |
|
|
|
|
|
return resultado |
|
1101 |
|
|
1102 |
|
|
1103 |
def salida_cerrada(self, id_sala_destino): |
def salida_cerrada(self, id_sala_destino): |
1179 |
personaje.controlador.suceso_entorno(texto) |
personaje.controlador.suceso_entorno(texto) |
1180 |
|
|
1181 |
|
|
1182 |
|
def crear_objeto(self, id_objeto): |
1183 |
|
"""Aparece una instancia nueva de un objeto en la sala. |
1184 |
|
|
1185 |
|
Requiere: |
1186 |
|
id_objeto != None |
1187 |
|
""" |
1188 |
|
objeto = Objeto(id_objeto) |
1189 |
|
self.objeto_aparece(objeto) |
1190 |
|
|
1191 |
|
|
1192 |
|
def crear_pnj(self, id_pnj): |
1193 |
|
"""Aparece un nuevo pnj en esta sala. |
1194 |
|
|
1195 |
|
Requiere: |
1196 |
|
id_pnj != None |
1197 |
|
""" |
1198 |
|
id_unico = id_pnj + '%' + PersonajeNoJugador.nuevo_id() |
1199 |
|
escribir("Vamos a crear a " + id_unico) |
1200 |
|
self.__personajes[id_unico] = PersonajeNoJugador.nuevo(id_unico, self) |
1201 |
|
|
1202 |
|
|
1203 |
def salvar(self): |
def salvar(self): |
1204 |
"""Graba en un fichero de salas la sala con todo su contenido.""" |
"""Graba en un fichero de salas la sala con todo su contenido.""" |
1205 |
|
|