64 |
ninguna compañia o va el último) |
ninguna compañia o va el último) |
65 |
- anterior (Personaje): el personaje que va delante de el en la compañia (None si no está en |
- anterior (Personaje): el personaje que va delante de el en la compañia (None si no está en |
66 |
ninguna compañía o va el primero) |
ninguna compañía o va el primero) |
67 |
|
- mochila (Objeto[][]): lista de todos los objetos que va cargando el personaje. Es lista |
68 |
|
doble porque si hay varios objetos con el mismo id, van agrupados. |
69 |
|
- cuerpo ({String:Objeto}): mapa con las partes del cuerpo del PJ, indicando el objeto que |
70 |
|
lleva puesto en cada parte, o None si no lleva nada. Las partes |
71 |
|
o posiciones son: cabeza, cuello, tronco, brazo-izq, brazo-der, |
72 |
|
mano-izq, mano-der, dos-manos, piernas, tobillo-izq, tobillo-der, |
73 |
|
pie-izq y pie-der. |
74 |
|
|
75 |
Un personaje puede ser controlado por cualquier clase, siempre y cuando ésta implemente |
Un personaje puede ser controlado por cualquier clase, siempre y cuando ésta implemente |
76 |
el interfaz Controlador, para que pueda responder a los eventos que genera un personaje. |
el interfaz Controlador, para que pueda responder a los eventos que genera un personaje. |
114 |
siguiente != None -> siguiente.anterior == self |
siguiente != None -> siguiente.anterior == self |
115 |
anterior != None -> anterior.siguiente == self |
anterior != None -> anterior.siguiente == self |
116 |
controlador == None -> ( siguiente == None and anterior == None ) |
controlador == None -> ( siguiente == None and anterior == None ) |
117 |
|
|
118 |
|
mochila != None |
119 |
|
mochila[i] != None |
120 |
|
len(mochila[i] > 0) |
121 |
|
mochila[i][j] != None |
122 |
|
|
123 |
|
cuerpo != None |
124 |
|
len(cuerpo) == 13 |
125 |
""" |
""" |
126 |
|
|
127 |
# Versión del sistema de personajes (se incrementa al cambiar cualquiera |
# Versión del sistema de personajes (se incrementa al cambiar cualquiera |
843 |
return result |
return result |
844 |
|
|
845 |
|
|
846 |
|
def meter_en_mochila(self, objeto): |
847 |
|
"""Introducir un objeto en la mochila del personaje. |
848 |
|
|
849 |
|
Requiere: |
850 |
|
objeto != None |
851 |
|
""" |
852 |
|
encontrado = 0 |
853 |
|
for lista_instancias in self.mochila: |
854 |
|
if lista_instancias[0].id == objeto.id: |
855 |
|
encontrado = 1 |
856 |
|
lista_instancias.append(objeto) |
857 |
|
break |
858 |
|
|
859 |
|
if not encontrado: |
860 |
|
self.mochila.append([objeto]) |
861 |
|
|
862 |
|
|
863 |
|
def sacar_de_mochila(self, id_objeto, n_orden = 1): |
864 |
|
"""Sacar un objeto de la mochila del personaje. |
865 |
|
|
866 |
|
Si hay mas de una instancia con el mismo id, se puede elegir cual de |
867 |
|
ellas (1 = la primera, 2 = la segunda, etc.) |
868 |
|
|
869 |
|
Requiere: |
870 |
|
id_objeto pertenece a un objeto existente en la mochila. |
871 |
|
n_orden esta dentro de rango |
872 |
|
""" |
873 |
|
objeto = None |
874 |
|
|
875 |
|
for lista_instancias in self.mochila: |
876 |
|
if lista_instancias[0].id == id_objeto: |
877 |
|
objeto = lista_instancias[n_orden - 1] |
878 |
|
del lista_instancias[n_orden - 1] |
879 |
|
break |
880 |
|
|
881 |
|
return objeto |
882 |
|
|
883 |
|
|
884 |
|
def reservar_posicion(self, posicion): |
885 |
|
"""Quitar todos los objetos necesarios para poder ponerse uno nuevo en |
886 |
|
la posicion indicada. |
887 |
|
|
888 |
|
Normalmenet solo habra que quitar el objeto que ya este en esa posicion, |
889 |
|
si hay alguno. Pero con las posiciones "mano-izq", "mano-der" y "dos-manos" |
890 |
|
puede haber que quitar mas de uno. |
891 |
|
|
892 |
|
Requiere: |
893 |
|
posicion in self.cuerpo.keys() |
894 |
|
|
895 |
|
Asegura: |
896 |
|
return != None |
897 |
|
""" |
898 |
|
objetos_quitados = [] |
899 |
|
|
900 |
|
if self.cuerpo[posicion] != None: |
901 |
|
objetos_quitados.append(self.cuerpo[posicion]) |
902 |
|
self.quitarse(posicion) |
903 |
|
|
904 |
|
if posicion == "dos-manos": |
905 |
|
if self.cuerpo["mano-izq"] != None: |
906 |
|
objetos_quitados.append(self.cuerpo["mano-izq"]) |
907 |
|
self.quitarse("mano-izq") |
908 |
|
if self.cuerpo["mano-der"] != None: |
909 |
|
objetos_quitados.append(self.cuerpo["mano-der"]) |
910 |
|
self.quitarse("mano-der") |
911 |
|
|
912 |
|
if posicion == "mano-izq" or posicion == "mano-der": |
913 |
|
if self.cuerpo["dos-manos"] != None: |
914 |
|
objetos_quitados.append(self.cuerpo["dos-manos"]) |
915 |
|
self.quitarse("dos-manos") |
916 |
|
|
917 |
|
return objetos_quitados |
918 |
|
|
919 |
|
|
920 |
|
def ponerse(objeto, posicion): |
921 |
|
"""Ponerse un objeto en una posicion del cuerpo. |
922 |
|
|
923 |
|
En esta funcion ocurren todos los efectos asociados a esta operacion. |
924 |
|
|
925 |
|
Requiere: |
926 |
|
objeto != None |
927 |
|
posicion in self.cuerpo.keys() |
928 |
|
el objeto se puede poner en esa posicion |
929 |
|
el personaje cumple los requisitos del uso |
930 |
|
self.cuerpo[posicion] == None |
931 |
|
|
932 |
|
Asegura: |
933 |
|
self.cuerpo[posicion] == objeto |
934 |
|
""" |
935 |
|
self.cuerpo[posicion] = objeto |
936 |
|
|
937 |
|
for uso in objeto.usos: |
938 |
|
if uso["tipo"] == "ponerse" and uso["posicion"] == posicion: |
939 |
|
|
940 |
|
self.cuerpo[posicion] = objeto |
941 |
|
|
942 |
|
if uso["descripcion"] != None: |
943 |
|
self.controlador.habla_unomismo(uso["descripcion"]) |
944 |
|
else: |
945 |
|
descripcion = "Te pones " + objeto.nombre + " en " + posicion |
946 |
|
self.controlador.habla_unomismo(descripcion) |
947 |
|
|
948 |
|
for efecto in uso["efectos"]: |
949 |
|
#... |
950 |
|
pass |
951 |
|
|
952 |
|
break |
953 |
|
|
954 |
|
|
955 |
|
def quitarse(posicion): |
956 |
|
"""Quitarse el objeto que esté en una posición del cuerpo. |
957 |
|
|
958 |
|
Aquí desaparecen todos los efectos permanentes asociados a la operación de ponerse |
959 |
|
el objeto. Devuelve el objeto quitado. |
960 |
|
|
961 |
|
Requiere: |
962 |
|
posicion in self.cuerpo.keys() |
963 |
|
self.cuerpo[posicion] != None |
964 |
|
|
965 |
|
Asegura: |
966 |
|
self.cuerpo[posicion] == None |
967 |
|
return != None |
968 |
|
""" |
969 |
|
objeto = self.cuerpo[posicion] |
970 |
|
del self.cuerpo[posicion] |
971 |
|
|
972 |
|
for uso in objeto.usos: |
973 |
|
if uso["tipo"] == "ponerse" and uso["posicion"] == posicion: |
974 |
|
descripcion = "Te quitas " + objeto.nombre + " de " + posicion |
975 |
|
self.controlador.habla_unomismo(descripcion) |
976 |
|
|
977 |
|
for efecto in uso["efectos"]: |
978 |
|
#... |
979 |
|
pass |
980 |
|
|
981 |
|
break |
982 |
|
|
983 |
|
|
984 |
# Código para pruebas unitarias del módulo. |
# Código para pruebas unitarias del módulo. |
985 |
|
|