35 |
from personajejugador import * |
from personajejugador import * |
36 |
from personajenojugador import * |
from personajenojugador import * |
37 |
from interfazpnj import * |
from interfazpnj import * |
38 |
from suceso import * |
from guion import * |
39 |
from utils import * |
from utils import * |
40 |
|
|
41 |
|
|
64 |
CATEGORIAS = [ 'mobiliario', 'arma', 'recipiente', 'joya', 'armadura', 'herramienta', |
CATEGORIAS = [ 'mobiliario', 'arma', 'recipiente', 'joya', 'armadura', 'herramienta', |
65 |
'vestimenta', 'escritura', 'recipìente', 'comestible', 'accesorio' ] |
'vestimenta', 'escritura', 'recipìente', 'comestible', 'accesorio' ] |
66 |
|
|
67 |
USOS = [ 'comer', 'beber', 'poner', 'lanzar', 'usar' ] |
SUCESOS = [ 'personaje_come', 'personaje_bebe', 'personaje_lanza', 'personaje_usa', |
68 |
|
'personaje_pone_cabeza', 'personaje_pone_cuello', 'personaje_pone_tronco', |
69 |
|
'personaje_pone_brazo_izq', 'personaje_pone_brazo_der', |
70 |
|
'personaje_pone_mano_izq', 'personaje_pone_mano_der', |
71 |
|
'personaje_pone_dos_manos', 'personaje_pone_piernas', |
72 |
|
'personaje_pone_tobillo_izq', 'personaje_pone_tobillo_der', |
73 |
|
'personaje_pone_pie_izq', 'personaje_pone_pie_der', |
74 |
|
'personaje_quita_cabeza', 'personaje_quita_cuello', 'personaje_quita_tronco', |
75 |
|
'personaje_quita_brazo_izq', 'personaje_quita_brazo_der', |
76 |
|
'personaje_quita_mano_izq', 'personaje_quita_mano_der', |
77 |
|
'personaje_quita_dos_manos', 'personaje_quita_piernas', |
78 |
|
'personaje_quita_tobillo_izq', 'personaje_quita_tobillo_der', |
79 |
|
'personaje_quita_pie_izq', 'personaje_quita_pie_der' ] |
80 |
|
|
81 |
POSICIONES = [ 'cabeza', 'cuello', 'tronco', 'brazo-izq', 'brazo-der', 'mano-izq', |
# USOS = [ 'comer', 'beber', 'poner', 'lanzar', 'usar' ] |
|
'mano-der', 'dos-manos', 'piernas', 'tobillo-izq', 'tobillo-der', |
|
|
'pie-izq', 'pie-der' ] |
|
82 |
|
|
83 |
|
|
84 |
# Atributos públicos de la clase |
# Atributos públicos de la clase |
230 |
aura in range(0,100) |
aura in range(0,100) |
231 |
""") |
""") |
232 |
|
|
233 |
def __leer_usos(self): return self.__usos |
def __leer_sucesos(self): return self.__sucesos |
234 |
|
|
235 |
usos = property(__leer_usos, |
sucesos = property(__leer_sucesos, |
236 |
doc="""({String:any}[]): lista de usos del objeto. |
doc="""({String:Guion}: respuestas a los sucesos del objeto. |
237 |
|
|
238 |
Cada uso es un diccionario: |
El índice del diccionario es el tipo del suceso, y asociado a él va un guion |
239 |
- "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.) |
que se ejecuta como respuesta. |
240 |
- "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone. |
|
241 |
- "requisitos" (Requisito[]): lista de requisitos para poder descubrir el |
Invariantes: |
242 |
uso o realizarlo. |
sucesos != None |
243 |
- "sucesos" (Suceso[]): lista de sucesos que ocurren al realizar este uso. |
sucesos.keys(i) in SUCESOS |
244 |
|
""") |
245 |
Invariantes: |
|
246 |
usos != None |
# def __leer_usos(self): return self.__usos |
247 |
len(usos) >= 0 |
# |
248 |
usos[i]["tipo"] in USOS |
# usos = property(__leer_usos, |
249 |
usos[i]["posicion"] in POSICIONES |
# doc="""({String:any}[]): lista de usos del objeto. |
250 |
usos[i]["requisitos"] != None |
# |
251 |
usos[i]["sucesos"] != None |
# Cada uso es un diccionario: |
252 |
""" |
# - "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.) |
253 |
"""({string:any}[]): lista de usos del objeto. |
# - "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone. |
254 |
|
# - "requisitos" (Requisito[]): lista de requisitos para poder descubrir el |
255 |
Cada uso es un diccionario: |
# uso o realizarlo. |
256 |
- "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.) |
# - "acciones" (Accion[]): lista de acciones que ocurren al realizar este uso. |
257 |
- "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone |
# |
258 |
- "gasto" (int): el numero de cargas que consume cada uso |
# Invariantes: |
259 |
- "msg" (string): el mensaje que aparece cuando se usa |
# usos != None |
260 |
- "duracion" (int): el numero de segundos que dura el efecto (0 = indeterminado) |
# len(usos) >= 0 |
261 |
- "requisitos" ({string:any}[]): lista de requisitos del uso, siendo cada requisito |
# usos[i]["tipo"] in USOS |
262 |
un diccionario: |
# usos[i]["posicion"] in Personaje.POSICIONES |
263 |
- "atributo" (string): el atributo a comprobar |
# usos[i]["requisitos"] != None |
264 |
- "valor" (int): el valor mínimo que deberá tener el atributo |
# usos[i]["acciones"] != None |
265 |
- "msg" (string): el mensaje que sale si el atributo no llega al mínimo |
# """ |
266 |
- "efectos" ({string:any}[]): lista de efectos que produce el uso, siendo cada |
## """({string:any}[]): lista de usos del objeto. |
267 |
efecto un diccionario: |
## |
268 |
- "atributo" (string): el atributo a modificar |
## Cada uso es un diccionario: |
269 |
- "valor" (int): el número de puntos que sube o baja (si es negativo) |
## - "tipo" (string): el tipo de uso ("comer", "poner", "lanzar", etc.) |
270 |
- "duracion" (int): duración del efecto en segundos (0 = ilimitado) |
## - "posicion" (string): si el uso es "poner", en que parte del cuerpo se pone |
271 |
- "msg" (string): el mensaje que sale cuando ocurre el efecto |
## - "gasto" (int): el numero de cargas que consume cada uso |
272 |
|
## - "msg" (string): el mensaje que aparece cuando se usa |
273 |
Invariantes: |
## - "duracion" (int): el numero de segundos que dura el efecto (0 = indeterminado) |
274 |
usos != None |
## - "requisitos" ({string:any}[]): lista de requisitos del uso, siendo cada requisito |
275 |
len(usos) >= 0 |
## un diccionario: |
276 |
usos[i]["tipo"] in USOS |
## - "atributo" (string): el atributo a comprobar |
277 |
usos[i]["posicion"] in POSICIONES |
## - "valor" (int): el valor mínimo que deberá tener el atributo |
278 |
usos[i]["gasto"] >= 0 |
## - "msg" (string): el mensaje que sale si el atributo no llega al mínimo |
279 |
usos[i]["msg"] != None |
## - "efectos" ({string:any}[]): lista de efectos que produce el uso, siendo cada |
280 |
usos[i]["duracion"] >= 0 |
## efecto un diccionario: |
281 |
usos[i]["requisitos"] != None |
## - "atributo" (string): el atributo a modificar |
282 |
usos[i]["requisitos"][j]["atributo"] != None |
## - "valor" (int): el número de puntos que sube o baja (si es negativo) |
283 |
usos[i]["requisitos"][j]["valor"] in range(0,100) |
## - "duracion" (int): duración del efecto en segundos (0 = ilimitado) |
284 |
usos[i]["requisitos"][j]["msg"] != None |
## - "msg" (string): el mensaje que sale cuando ocurre el efecto |
285 |
usos[i]["efectos"] != None |
## |
286 |
usos[i]["efectos"][k]["atributo"] != None |
## Invariantes: |
287 |
usos[i]["efectos"][k]["duracion"] >= 0 |
## usos != None |
288 |
usos[i]["efectos"][k]["msg"] != None |
## len(usos) >= 0 |
289 |
""") |
## usos[i]["tipo"] in USOS |
290 |
|
## usos[i]["posicion"] in Personaje.POSICIONES |
291 |
|
## usos[i]["gasto"] >= 0 |
292 |
|
## usos[i]["msg"] != None |
293 |
|
## usos[i]["duracion"] >= 0 |
294 |
|
## usos[i]["requisitos"] != None |
295 |
|
## usos[i]["requisitos"][j]["atributo"] != None |
296 |
|
## usos[i]["requisitos"][j]["valor"] in range(0,100) |
297 |
|
## usos[i]["requisitos"][j]["msg"] != None |
298 |
|
## usos[i]["efectos"] != None |
299 |
|
## usos[i]["efectos"][k]["atributo"] != None |
300 |
|
## usos[i]["efectos"][k]["duracion"] >= 0 |
301 |
|
## usos[i]["efectos"][k]["msg"] != None |
302 |
|
## """) |
303 |
|
|
304 |
# Constructor |
# Constructor |
305 |
|
|
344 |
|
|
345 |
elem_propiedades = elem_objeto.getElementsByTagName('propiedades')[0] |
elem_propiedades = elem_objeto.getElementsByTagName('propiedades')[0] |
346 |
self.__parsear_propiedades(elem_propiedades) |
self.__parsear_propiedades(elem_propiedades) |
347 |
|
|
348 |
|
elem_sucesos = elem_objeto.getElementsByTagName('sucesos')[0] |
349 |
|
self.__parsear_sucesos(elem_sucesos) |
350 |
|
|
351 |
elem_usos = elem_objeto.getElementsByTagName('usos')[0] |
# elem_usos = elem_objeto.getElementsByTagName('usos')[0] |
352 |
self.__parsear_usos(elem_usos) |
# self.__parsear_usos(elem_usos) |
353 |
|
|
354 |
#self.__iniciar_parseador(doc_xml) |
#self.__iniciar_parseador(doc_xml) |
355 |
#self.__parsear_objeto(doc_xml) |
#self.__parsear_objeto(doc_xml) |
458 |
self.__aura = int(extraer_atributo_xml(elem_propiedades,'aura')) |
self.__aura = int(extraer_atributo_xml(elem_propiedades,'aura')) |
459 |
else: |
else: |
460 |
self.__aura = 1 |
self.__aura = 1 |
|
|
|
|
|
|
461 |
|
|
|
def __parsear_usos(self, elem_usos): |
|
|
"""Extrae toda la información de los usos del objeto.""" |
|
|
|
|
|
limpiar_nodos_text_xml(elem_usos) |
|
|
self.__usos = [] |
|
462 |
|
|
463 |
for nodo_uso in elem_usos.childNodes[:]: |
def __parsear_sucesos(self, elem_sucesos): |
464 |
|
"""Extrae toda la información de respuesta a sucesos del objeto.""" |
465 |
|
|
466 |
uso_tipo = extraer_atributo_xml(nodo_uso,'tipo') |
self.__sucesos = {} |
|
if nodo_uso.hasAttribute('posicion'): |
|
|
uso_posicion = extraer_atributo_xml(nodo_uso,'posicion') |
|
|
else: |
|
|
uso_posicion = '' |
|
|
# if nodo_uso.hasAttribute('gasto'): |
|
|
# uso_gasto = int(extraer_atributo_xml(nodo_uso,'gasto')) |
|
|
# else: |
|
|
# uso_gasto = 0 |
|
|
# if nodo_uso.hasAttribute('msg'): |
|
|
# uso_msg = extraer_atributo_xml(nodo_uso,'msg') |
|
|
# else: |
|
|
# if uso_tipo == 'comer': |
|
|
# uso_msg = 'Te comes ' + self.__nombre |
|
|
# elif uso_tipo == 'beber': |
|
|
# uso_msg = 'Bebes ' + self.__nombre |
|
|
# elif uso_tipo == 'poner': |
|
|
# uso_msg = 'Te pones ' + self.__nombre + ' en ' + uso_posicion |
|
|
# elif uso_tipo == 'lanzar': |
|
|
# uso_msg = 'Arrojas ' + self.__nombre |
|
|
# else: |
|
|
# uso_msg = 'Usas ' + self.__nombre |
|
|
# if nodo_uso.hasAttribute('duracion'): |
|
|
# uso_duracion = int(extraer_atributo_xml(nodo_uso,'duracion')) |
|
|
# else: |
|
|
# uso_duracion = 0 |
|
|
|
|
|
#Siguiente nivel del árbol |
|
|
limpiar_nodos_text_xml(nodo_uso) |
|
|
|
|
|
uso_requisitos = [] |
|
|
uso_sucesos = [] |
|
467 |
|
|
468 |
for nodo_requi_suce in nodo_uso.childNodes[:]: |
for elem_suceso in elem_sucesos.childNodes: |
469 |
|
suceso = extraer_nombre_xml(elem_suceso) |
470 |
|
if suceso in Objeto.SUCESOS: |
471 |
|
respuesta = Guion(elem_suceso.childNodes, |
472 |
|
macros = [ ("$usuario", "Personaje"), |
473 |
|
("$sala", "Sala"), |
474 |
|
("$objeto", "Objeto") ]) |
475 |
|
self.__sucesos[suceso] = respuesta |
476 |
|
|
477 |
|
|
478 |
|
|
479 |
nombre_item = extraer_nombre_xml(nodo_requi_suce) |
# def __parsear_usos(self, elem_usos): |
480 |
if nombre_item == 'requisito': |
# """Extrae toda la información de los usos del objeto.""" |
481 |
requisito_atrib = extraer_atributo_xml(nodo_requi_suce,'atributo') |
# |
482 |
requisito_valor = int(extraer_atributo_xml(nodo_requi_suce,'valor')) |
# limpiar_nodos_text_xml(elem_usos) |
483 |
if nodo_requi_suce.hasAttribute('msg'): |
# self.__usos = [] |
484 |
requisito_msg = extraer_atributo_xml(nodo_requi_suce,'msg') |
# |
485 |
else: |
# for nodo_uso in elem_usos.childNodes[:]: |
486 |
requisito_msg = 'No tienes suficiente ' + requisito_atrib |
# |
487 |
uso_requisitos.append( {"atributo":requisito_atrib, |
# uso_tipo = extraer_atributo_xml(nodo_uso,'tipo') |
488 |
"valor":requisito_valor, |
# if nodo_uso.hasAttribute('posicion'): |
489 |
"msg":requisito_msg} ) |
# uso_posicion = extraer_atributo_xml(nodo_uso,'posicion') |
490 |
else: |
# else: |
491 |
#suceso_atrib = extraer_atributo_xml(nodo_requi_suce,'atributo') |
# uso_posicion = '' |
492 |
#suceso_valor = int(extraer_atributo_xml(nodo_requi_suce,'valor')) |
## if nodo_uso.hasAttribute('gasto'): |
493 |
#if nodo_requi_suce.hasAttribute('msg'): |
## uso_gasto = int(extraer_atributo_xml(nodo_uso,'gasto')) |
494 |
# suceso_msg = extraer_atributo_xml(nodo_requi_suce,'msg') |
## else: |
495 |
#else: |
## uso_gasto = 0 |
496 |
# suceso_msg = "" |
## if nodo_uso.hasAttribute('msg'): |
497 |
#uso_sucesos.append( {"atributo":suceso_atrib, |
## uso_msg = extraer_atributo_xml(nodo_uso,'msg') |
498 |
# "valor":suceso_valor, |
## else: |
499 |
# "msg":suceso_msg} ) |
## if uso_tipo == 'comer': |
500 |
uso_sucesos.append(Suceso(elem_suceso = nodo_requi_suce, |
## uso_msg = 'Te comes ' + self.__nombre |
501 |
acciones = [ "usar", "descubrir" ], |
## elif uso_tipo == 'beber': |
502 |
macros = [ ("$usuario", "Personaje"), |
## uso_msg = 'Bebes ' + self.__nombre |
503 |
("$sala", "Sala"), |
## elif uso_tipo == 'poner': |
504 |
("$objeto", "Objeto") ])) |
## uso_msg = 'Te pones ' + self.__nombre + ' en ' + uso_posicion |
505 |
|
## elif uso_tipo == 'lanzar': |
506 |
self.__usos.append( {"tipo":uso_tipo, |
## uso_msg = 'Arrojas ' + self.__nombre |
507 |
"posicion":uso_posicion, |
## else: |
508 |
# "gasto":uso_gasto, |
## uso_msg = 'Usas ' + self.__nombre |
509 |
# "msg":uso_msg, |
## if nodo_uso.hasAttribute('duracion'): |
510 |
|
## uso_duracion = int(extraer_atributo_xml(nodo_uso,'duracion')) |
511 |
|
## else: |
512 |
|
## uso_duracion = 0 |
513 |
|
# |
514 |
|
# #Siguiente nivel del árbol |
515 |
|
# limpiar_nodos_text_xml(nodo_uso) |
516 |
|
# |
517 |
|
# uso_requisitos = [] |
518 |
|
# uso_acciones = [] |
519 |
|
# |
520 |
|
# for nodo_requi_suce in nodo_uso.childNodes[:]: |
521 |
|
# |
522 |
|
# nombre_item = extraer_nombre_xml(nodo_requi_suce) |
523 |
|
# if nombre_item == 'requisito': |
524 |
|
# requisito_atrib = extraer_atributo_xml(nodo_requi_suce,'atributo') |
525 |
|
# requisito_valor = int(extraer_atributo_xml(nodo_requi_suce,'valor')) |
526 |
|
# if nodo_requi_suce.hasAttribute('msg'): |
527 |
|
# requisito_msg = extraer_atributo_xml(nodo_requi_suce,'msg') |
528 |
|
# else: |
529 |
|
# requisito_msg = 'No tienes suficiente ' + requisito_atrib |
530 |
|
# uso_requisitos.append( {"atributo":requisito_atrib, |
531 |
|
# "valor":requisito_valor, |
532 |
|
# "msg":requisito_msg} ) |
533 |
|
# else: |
534 |
|
# #accion_atrib = extraer_atributo_xml(nodo_requi_suce,'atributo') |
535 |
|
# #accion_valor = int(extraer_atributo_xml(nodo_requi_suce,'valor')) |
536 |
|
# #if nodo_requi_suce.hasAttribute('msg'): |
537 |
|
# # accion_msg = extraer_atributo_xml(nodo_requi_suce,'msg') |
538 |
|
# #else: |
539 |
|
# # accion_msg = "" |
540 |
|
# #uso_acciones.append( {"atributo":accion_atrib, |
541 |
|
# # "valor":accion_valor, |
542 |
|
# # "msg":accion_msg} ) |
543 |
|
# uso_acciones.append(Accion(elem_accion = nodo_requi_suce, |
544 |
|
# acciones = [ "usar", "descubrir" ], |
545 |
|
# macros = [ ("$usuario", "Personaje"), |
546 |
|
# ("$sala", "Sala"), |
547 |
|
# ("$objeto", "Objeto") ])) |
548 |
|
# |
549 |
|
# self.__usos.append( {"tipo":uso_tipo, |
550 |
|
# "posicion":uso_posicion, |
551 |
|
## "gasto":uso_gasto, |
552 |
|
## "msg":uso_msg, |
553 |
# "duracion":uso_duracion, |
# "duracion":uso_duracion, |
554 |
"requisitos":uso_requisitos, |
# "requisitos":uso_requisitos, |
555 |
"sucesos":uso_sucesos} ) |
# "acciones":uso_acciones} ) |
556 |
|
|
557 |
# Métodos especiales |
# Métodos especiales |
558 |
|
|
568 |
|
|
569 |
assert(Objeto.VERSION_OBJETO == "1.0.2") |
assert(Objeto.VERSION_OBJETO == "1.0.2") |
570 |
while self.__version != "1.0.2": |
while self.__version != "1.0.2": |
571 |
|
|
572 |
|
# La versión 1.0.1 produce una ruptura con las anteriores ya que se migra al formato |
573 |
|
# de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas |
574 |
|
# las salas, personajes y objetos. |
575 |
|
|
576 |
|
if self.__version == "1.0.2": |
577 |
|
# Versión 1.0.1 -> 1.0.2: añadir __max_cargas, borrar usos y crear sucesos. |
578 |
|
# Se crea sin sucesos, pero al activarlo se reseteará a partir del nuevo |
579 |
|
# fichero descriptor XML. |
580 |
|
self.__max_cargas = self.__cargas |
581 |
|
del self.__usos |
582 |
|
self.__sucesos = {} |
583 |
|
self.__version = "1.0.2" |
584 |
|
escribir("Convertido objeto " + self.__id + " a versión 1.0.2") |
585 |
|
|
586 |
# La versión 1.0.1 produce una ruptura con las anteriores ya que se migra al formato |
raise ValueError("Cargado objeto " + self.__id + " con versión desconocida: " + |
587 |
# de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas |
self.__version + " cuando se esperaba " + Objeto.VERSION_OBJETO) |
588 |
# las salas, personajes y objetos. |
|
|
# |
|
|
|
|
|
# La versión 1.0.2 está en desarrollo... |
|
|
# De momento, ha cambiado: |
|
|
# - formato de usos |
|
|
# - nuevo atributo privado __max_cargas |
|
|
|
|
|
escribir("Cargado objeto " + self.__id + " con versión desconocida: " + |
|
|
self.__version + ", cuando se esperaba " + Objeto.VERSION_OBJETO) |
|
|
|
|
589 |
|
|
590 |
# Métodos normales |
# Métodos normales |
591 |
|
|
612 |
self.__cargas = 0 |
self.__cargas = 0 |
613 |
if self.__cargas > self.__max_cargas: |
if self.__cargas > self.__max_cargas: |
614 |
self.__cargas = self.__max_cargas |
self.__cargas = self.__max_cargas |
|
|
|
615 |
|
|
|
def puede_comer(self, usuario): |
|
|
"""Comprueba si el usuario puede 'comer' este objeto. |
|
616 |
|
|
617 |
Requiere: |
def destruir(self): |
618 |
usuario != None |
"""El objeto desaparece del juego.""" |
619 |
""" |
#%% Este tiene más miga de lo que parece, me lo iré pensando cuando pueda... |
620 |
encontrado = 0 |
pass |
|
for uso in self.usos: |
|
|
if uso["tipo"] == "comer": |
|
|
encontrado = 1 |
|
|
for requisito in uso["requisitos"]: |
|
|
if not requisito.verificar({"$usuario": usuario, |
|
|
"$sala": usuario.sala, |
|
|
"$objeto": self}): |
|
|
return 0 |
|
|
return encontrado |
|
621 |
|
|
622 |
|
|
623 |
|
def responder_suceso_personaje(self, suceso, usuario): |
624 |
|
"""Todas las respuestas a sucesos de personaje son iguales, asi que las pongo aquí. |
625 |
|
|
626 |
def comer(self, usuario): |
Chequea los requisitos y realiza las acciones correspondientes, y devuelve 1 |
627 |
"""Realiza el uso 'comer' sobre este objeto. |
si se ha podido comer con éxito, y 0 si no. |
|
|
|
|
Ocurren todos los sucesos asociados a este uso. |
|
628 |
|
|
629 |
Requiere: |
Requiere: |
630 |
usuario != None |
usuario != None |
|
puede_comer(usuario) |
|
631 |
""" |
""" |
632 |
for uso in self.usos: |
if not self.__sucesos.has_key(suceso): |
633 |
if uso["tipo"] == "comer": |
return 0 |
634 |
for suceso in uso["sucesos"]: |
else: |
635 |
if suceso.accion == "usar": |
respuesta_comer = self.__sucesos[suceso] |
636 |
suceso.ocurrir({"$usuario": usuario, |
result = respuesta_comer.ejecutar(macros = {"$usuario": usuario, |
637 |
"$sala": usuario.sala, |
"$sala": usuario.sala, |
638 |
"$objeto": self}) |
"$objeto": self}) |
|
|
|
639 |
|
|
640 |
def puede_usar(self, usuario): |
if result == None: # Si ninguna acción acepta o cancela explícitamente el |
641 |
"""Comprueba si el usuario puede 'usar' este objeto. |
result = 1 # suceso, se asume que se acepta |
642 |
|
|
643 |
Requiere: |
return result |
644 |
usuario != None |
|
645 |
""" |
|
646 |
encontrado = 0 |
def personaje_come(self, usuario): |
647 |
for uso in self.usos: |
return self.responder_suceso_personaje("personaje_come", usuario) |
648 |
if uso["tipo"] == "usar": |
|
649 |
encontrado = 1 |
def personaje_bebe(self, usuario): |
650 |
|
return self.responder_suceso_personaje("personaje_bebe", usuario) |
651 |
|
|
652 |
|
def personaje_lanza(self, usuario): |
653 |
|
return self.responder_suceso_personaje("personaje_lanza", usuario) |
654 |
|
|
655 |
|
def personaje_usa(self, usuario): |
656 |
|
return self.responder_suceso_personaje("personaje_usa", usuario) |
657 |
|
|
658 |
|
def personaje_pone_cabeza(self, usuario): |
659 |
|
return self.responder_suceso_personaje("personaje_pone_cabeza", usuario) |
660 |
|
|
661 |
|
def personaje_pone_cuello(self, usuario): |
662 |
|
return self.responder_suceso_personaje("personaje_pone_cuello", usuario) |
663 |
|
|
664 |
|
def personaje_pone_tronco(self, usuario): |
665 |
|
return self.responder_suceso_personaje("personaje_pone_tronco", usuario) |
666 |
|
|
667 |
|
def personaje_pone_brazo_izq(self, usuario): |
668 |
|
return self.responder_suceso_personaje("personaje_pone_brazo_izq", usuario) |
669 |
|
|
670 |
|
def personaje_pone_brazo_der(self, usuario): |
671 |
|
return self.responder_suceso_personaje("personaje_pone_brazo_der", usuario) |
672 |
|
|
673 |
|
def personaje_pone_mano_izq(self, usuario): |
674 |
|
return self.responder_suceso_personaje("personaje_pone_mano_izq", usuario) |
675 |
|
|
676 |
|
def personaje_pone_mano_der(self, usuario): |
677 |
|
return self.responder_suceso_personaje("personaje_pone_mano_der", usuario) |
678 |
|
|
679 |
|
def personaje_pone_dos_manos(self, usuario): |
680 |
|
return self.responder_suceso_personaje("personaje_pone_dos_manos", usuario) |
681 |
|
|
682 |
|
def personaje_pone_piernas(self, usuario): |
683 |
|
return self.responder_suceso_personaje("personaje_pone_piernas", usuario) |
684 |
|
|
685 |
|
def personaje_pone_tobillo_izq(self, usuario): |
686 |
|
return self.responder_suceso_personaje("personaje_pone_tobillo_izq", usuario) |
687 |
|
|
688 |
|
def personaje_pone_tobillo_der(self, usuario): |
689 |
|
return self.responder_suceso_personaje("personaje_pone_tobillo_der", usuario) |
690 |
|
|
691 |
|
def personaje_pone_pie_izq(self, usuario): |
692 |
|
return self.responder_suceso_personaje("personaje_pone_pie_izq", usuario) |
693 |
|
|
694 |
|
def personaje_pone_pie_der(self, usuario): |
695 |
|
return self.responder_suceso_personaje("personaje_pone_pie_der", usuario) |
696 |
|
|
697 |
|
def personaje_quita_cabeza(self, usuario): |
698 |
|
return self.responder_suceso_personaje("personaje_quita_cabeza", usuario) |
699 |
|
|
700 |
|
def personaje_quita_cuello(self, usuario): |
701 |
|
return self.responder_suceso_personaje("personaje_quita_cuello", usuario) |
702 |
|
|
703 |
|
def personaje_quita_tronco(self, usuario): |
704 |
|
return self.responder_suceso_personaje("personaje_quita_tronco", usuario) |
705 |
|
|
706 |
|
def personaje_quita_brazo_izq(self, usuario): |
707 |
|
return self.responder_suceso_personaje("personaje_quita_brazo_izq", usuario) |
708 |
|
|
709 |
|
def personaje_quita_brazo_der(self, usuario): |
710 |
|
return self.responder_suceso_personaje("personaje_quita_brazo_der", usuario) |
711 |
|
|
712 |
|
def personaje_quita_mano_izq(self, usuario): |
713 |
|
return self.responder_suceso_personaje("personaje_quita_mano_izq", usuario) |
714 |
|
|
715 |
|
def personaje_quita_mano_der(self, usuario): |
716 |
|
return self.responder_suceso_personaje("personaje_quita_mano_der", usuario) |
717 |
|
|
718 |
|
def personaje_quita_dos_manos(self, usuario): |
719 |
|
return self.responder_suceso_personaje("personaje_quita_dos_manos", usuario) |
720 |
|
|
721 |
|
def personaje_quita_piernas(self, usuario): |
722 |
|
return self.responder_suceso_personaje("personaje_quita_piernas", usuario) |
723 |
|
|
724 |
|
def personaje_quita_tobillo_izq(self, usuario): |
725 |
|
return self.responder_suceso_personaje("personaje_quita_tobillo_izq", usuario) |
726 |
|
|
727 |
|
def personaje_quita_tobillo_der(self, usuario): |
728 |
|
return self.responder_suceso_personaje("personaje_quita_tobillo_der", usuario) |
729 |
|
|
730 |
|
def personaje_quita_pie_izq(self, usuario): |
731 |
|
return self.responder_suceso_personaje("personaje_quita_pie_izq", usuario) |
732 |
|
|
733 |
|
def personaje_quita_pie_der(self, usuario): |
734 |
|
return self.responder_suceso_personaje("personaje_quita_pie_der", usuario) |
735 |
|
|
736 |
|
|
737 |
|
# def puede_comer(self, usuario): |
738 |
|
# """Comprueba si el usuario puede 'comer' este objeto. |
739 |
|
# |
740 |
|
# Requiere: |
741 |
|
# usuario != None |
742 |
|
# """ |
743 |
|
# encontrado = 0 |
744 |
|
# for uso in self.usos: |
745 |
|
# if uso["tipo"] == "comer": |
746 |
|
# encontrado = 1 |
747 |
# for requisito in uso["requisitos"]: |
# for requisito in uso["requisitos"]: |
748 |
# if not requisito.verificar({"$usuario": usuario, |
# if not requisito.verificar({"$usuario": usuario, |
749 |
# "$sala": usuario.sala, |
# "$sala": usuario.sala, |
750 |
# "$objeto": self}): |
# "$objeto": self}): |
751 |
# return 0 |
# return 0 |
752 |
return encontrado |
# return encontrado |
753 |
|
# |
754 |
|
# |
755 |
|
# |
756 |
def usar(self, usuario): |
# def comer(self, usuario): |
757 |
"""Realiza el uso 'usar' sobre este objeto. |
# """Realiza el uso 'comer' sobre este objeto. |
758 |
|
# |
759 |
Ocurren todos los sucesos asociados a este uso. |
# Ocurren todas las acciones asociados a este uso. |
760 |
|
# |
761 |
Requiere: |
# Requiere: |
762 |
usuario != None |
# usuario != None |
763 |
puede_usar(usuario) |
# puede_comer(usuario) |
764 |
""" |
# """ |
765 |
for uso in self.usos: |
# for uso in self.usos: |
766 |
if uso["tipo"] == "usar": |
# if uso["tipo"] == "comer": |
767 |
for suceso in uso["sucesos"]: |
# for accion in uso["acciones"]: |
768 |
if suceso.accion == "usar": |
# if accion.accion == "usar": |
769 |
suceso.ocurrir({"$usuario": usuario, |
# accion.ejecutar({"$usuario": usuario, |
770 |
"$sala": usuario.sala, |
# "$sala": usuario.sala, |
771 |
"$objeto": self}) |
# "$objeto": self}) |
772 |
|
# |
773 |
|
# |
774 |
|
# def puede_usar(self, usuario): |
775 |
|
# """Comprueba si el usuario puede 'usar' este objeto. |
776 |
|
# |
777 |
|
# Requiere: |
778 |
|
# usuario != None |
779 |
|
# """ |
780 |
|
# encontrado = 0 |
781 |
|
# for uso in self.usos: |
782 |
|
# if uso["tipo"] == "usar": |
783 |
|
# encontrado = 1 |
784 |
|
## for requisito in uso["requisitos"]: |
785 |
|
## if not requisito.verificar({"$usuario": usuario, |
786 |
|
## "$sala": usuario.sala, |
787 |
|
## "$objeto": self}): |
788 |
|
## return 0 |
789 |
|
# return encontrado |
790 |
|
# |
791 |
|
# |
792 |
|
# |
793 |
|
# def usar(self, usuario): |
794 |
|
# """Realiza el uso 'usar' sobre este objeto. |
795 |
|
# |
796 |
|
# Ocurren todas las acciones asociados a este uso. |
797 |
|
# |
798 |
|
# Requiere: |
799 |
|
# usuario != None |
800 |
|
# puede_usar(usuario) |
801 |
|
# """ |
802 |
|
# for uso in self.usos: |
803 |
|
# if uso["tipo"] == "usar": |
804 |
|
# for accion in uso["acciones"]: |
805 |
|
# if accion.accion == "usar": |
806 |
|
# accion.ejecutar({"$usuario": usuario, |
807 |
|
# "$sala": usuario.sala, |
808 |
|
# "$objeto": self}) |
809 |
|
|
810 |
|
|
811 |
# Código para pruebas unitarias del módulo. |
# Código para pruebas unitarias del módulo. |
833 |
print "estado = " + str(pocion.estado) |
print "estado = " + str(pocion.estado) |
834 |
print "aura = " + str(pocion.aura) |
print "aura = " + str(pocion.aura) |
835 |
|
|
836 |
print "usos = [" |
print "sucesos = [" |
837 |
primer = 1 |
primer = 1 |
838 |
for uso in pocion.usos: |
for suceso in pocion.sucesos.keys(): |
839 |
if primer: primer = 0 |
if primer: primer = 0 |
840 |
else: print "" |
else: print "" |
841 |
print " -> tipo = " + uso["tipo"] |
|
842 |
print " posicion = " + uso["posicion"] |
print " -> suceso = " + suceso |
843 |
for suceso in uso["sucesos"]: |
for respuesta in pocion.sucesos[suceso].secuencia: |
844 |
print " suceso tipo = " + suceso.tipo |
if respuesta.__class__.__name__ == "Accion": |
845 |
print " accion = " + suceso.accion |
print " * accion base = " + respuesta.base |
846 |
print " parametros = [", |
print " nombre = " + respuesta.nombre |
847 |
primer2 = 1 |
print " parametros = [", |
848 |
for parametro in suceso.parametros: |
primer2 = 1 |
849 |
if primer2: primer2 = 0 |
for parametro in respuesta.parametros: |
850 |
else: print ", ", |
if primer2: primer2 = 0 |
851 |
print parametro["nombre"] + "(" + parametro["tipo"] + ") = " + parametro["valor"], |
else: print ", ", |
852 |
print "]" |
print parametro["nombre"] + " (" + parametro["tipo"] + ") = " + parametro["valor"], |
853 |
|
print "]" |
854 |
|
elif respuesta.__class__.__name__ == "Requisito": |
855 |
|
print " * requisito base = " + respuesta.base |
856 |
|
print " nombre = " + respuesta.nombre |
857 |
|
print " parametros = [", |
858 |
|
primer2 = 1 |
859 |
|
for parametro in respuesta.parametros: |
860 |
|
if primer2: primer2 = 0 |
861 |
|
else: print ", ", |
862 |
|
print parametro["nombre"] + " (" + parametro["tipo"] + ") = " + parametro["valor"], |
863 |
|
print "]" |
864 |
print "]" |
print "]" |
865 |
|
|
866 |
|
# print "usos = [" |
867 |
|
# primer = 1 |
868 |
|
# for uso in pocion.usos: |
869 |
|
# if primer: primer = 0 |
870 |
|
# else: print "" |
871 |
|
# print " -> tipo = " + uso["tipo"] |
872 |
|
# print " posicion = " + uso["posicion"] |
873 |
|
# for accion in uso["acciones"]: |
874 |
|
# print " accion tipo = " + accion.tipo |
875 |
|
# print " accion = " + accion.accion |
876 |
|
# print " parametros = [", |
877 |
|
# primer2 = 1 |
878 |
|
# for parametro in accion.parametros: |
879 |
|
# if primer2: primer2 = 0 |
880 |
|
# else: print ", ", |
881 |
|
# print parametro["nombre"] + "(" + parametro["tipo"] + ") = " + parametro["valor"], |
882 |
|
# print "]" |
883 |
|
# print "]" |
884 |
|
|