759 |
return ocupado |
return ocupado |
760 |
|
|
761 |
|
|
762 |
def coger_objeto(self, n_objeto, n_instancia): |
def buscar_objeto(self, id_objeto, n_orden=1): |
763 |
"""Sacar una instancia de un objeto de la sala. |
"""Localiza un objeto en la sala. |
764 |
|
|
765 |
n_objeto es el numero de orden dentro de los objetos de la sala, y n_instancia |
- id_objeto es el identificador del objeto. Puede haber varios objetos distintos |
766 |
es el numero de la instancia, ambos empezando por cero. |
con el mismo id |
767 |
|
- n_orden sirve para distinguir el objeto si hay mas de uno con el mismo id |
768 |
|
|
769 |
Devuelve una instancia de clase Objeto. |
Devuelve el indice dentro de la lista de objetos de la sala que apunta al objeto buscado. |
770 |
|
|
771 |
|
Lanza ExcepcionDeJuego si no se encuentra. |
772 |
|
|
773 |
Requiere: |
Requiere: |
774 |
n_objeto in range(0, len(self.objetos)-1) |
id_objeto != None |
775 |
n_instancia in range(0, len(self.objetos[n_objeto]["instancias"])-1) |
n_orden >= 1 |
776 |
|
|
777 |
Asegura: |
Asegura: |
778 |
return != None |
return in range(0, len(self.objetos)) |
779 |
""" |
""" |
780 |
|
encontrados = 0 |
781 |
|
n_objeto = -1 |
782 |
|
|
783 |
|
for objeto in self.__objetos: |
784 |
|
n_objeto = n_objeto + 1 |
785 |
|
if len(objeto["instancias"]) > 0: |
786 |
|
if normalizar_id(id_objeto) == extraer_id(objeto["instancias"][0].nombre): |
787 |
|
encontrados = encontrados + 1 |
788 |
|
if encontrados == n_orden: |
789 |
|
break |
790 |
|
|
791 |
|
if encontrados == 0: |
792 |
|
raise ExcepcionDeJuego("No hay en la sala ningún objeto con identificativo " + |
793 |
|
id_objeto) |
794 |
|
elif encontrados < n_orden: |
795 |
|
raise ExcepcionDeJuego("No hay en la sala suficientes objetos con identificativo " + |
796 |
|
id_objeto + ", solo hay " + str(encontrados)) |
797 |
|
|
798 |
|
else: |
799 |
|
return n_objeto |
800 |
|
|
801 |
|
|
802 |
|
def coger(self, n_objeto, n_instancia=1, cantidad=1): |
803 |
|
"""Sacar una o varias instancias de un objeto de la sala. |
804 |
|
|
805 |
|
- n_objeto es el número de orden del objeto dentro de la sala |
806 |
|
- n_instancia es el número de orden de la primera instancia a extraer |
807 |
|
- cantidad es el número de instancias a extraer |
808 |
|
|
809 |
|
Devuelve una lista con las instancias extraidas. |
810 |
|
|
811 |
|
Lanza ExcepcionDeJuego si no puede sacarlas (por ejemplo, se han pedido |
812 |
|
más instancias de las que hay). |
813 |
|
|
814 |
|
Requiere: |
815 |
|
n_objeto in range(0, len(self.objetos)) |
816 |
|
n_instancia >= 1 |
817 |
|
cantidad >= 1 |
818 |
|
|
819 |
|
Asegura: |
820 |
|
return != None |
821 |
|
len(return) == cantidad |
822 |
|
""" |
823 |
objeto = self.__objetos[n_objeto] |
objeto = self.__objetos[n_objeto] |
824 |
|
|
825 |
instancia = objeto["instancias"][n_instancia] |
if (n_instancia + cantidad - 1) > len(objeto["instancias"]): |
826 |
|
raise ExcepcionDeJuego("No hay " + str(n_instancia + cantidad - 1) + |
827 |
|
" instancias de ese objeto, solo hay " + |
828 |
|
str(len(objeto["instancias"]))) |
829 |
|
|
830 |
|
objetos_cogidos = [] |
831 |
|
|
832 |
|
instancias = objeto["instancias"] |
833 |
|
for i in range(0, cantidad): |
834 |
|
objetos_cogidos.append(instancias[n_instancia-1]) |
835 |
|
instancias[n_instancia-1].activar() |
836 |
|
del instancias[n_instancia-1] |
837 |
|
|
838 |
del objeto["instancias"][n_instancia] |
if len(instancias) == 0 and objeto["probabilidad"] == 0: |
|
if len(objeto["instancias"]) == 0 and objeto["probabilidad"] == 0: |
|
839 |
del self.__objetos[n_objeto] |
del self.__objetos[n_objeto] |
840 |
|
|
841 |
instancia.activar() |
return objetos_cogidos |
842 |
|
|
|
return instancia |
|
843 |
|
|
844 |
|
|
845 |
def dejar_objeto(self, instancia, dificultad = 0): |
#%% def coger(self, id_objeto, cantidad=1, n_orden=1, n_instancia=1): |
846 |
"""Soltar un objeto en la sala. |
#%% """Extraer una o mas instancias de un objeto de la sala. |
847 |
|
#%% |
848 |
|
#%% - id_objeto es el identificador del objeto. Puede haber varios objetos distintos |
849 |
|
#%% con el mismo id |
850 |
|
#%% - cantidad es el numero de instancias a extraer |
851 |
|
#%% - n_orden sirve para distinguir el objeto si hay mas de uno con el mismo id |
852 |
|
#%% - n_instancia es para elegir una instancia concreta, si hay mas de una |
853 |
|
#%% |
854 |
|
#%% Devuelve una lista con todas las instancias extraidas. |
855 |
|
#%% |
856 |
|
#%% Lanza ExcepcionDeJuego si no se puede coger (el id no existe, se piden mas instancias de las |
857 |
|
#%% que hay, etc.) |
858 |
|
#%% |
859 |
|
#%% Requiere: |
860 |
|
#%% id_objeto != None |
861 |
|
#%% cantidad >= 1 |
862 |
|
#%% n_orden >= 1 |
863 |
|
#%% n_instancia >= 1 |
864 |
|
#%% |
865 |
|
#%% Asegura: |
866 |
|
#%% return != None |
867 |
|
#%% """ |
868 |
|
#%% objetos_extraidos = [] |
869 |
|
#%% encontrados = 0 |
870 |
|
#%% n_objeto = -1 |
871 |
|
#%% |
872 |
|
#%% for objeto in self.__objetos: |
873 |
|
#%% n_objeto = n_objeto + 1 |
874 |
|
#%% instancias = objeto["instancias"] |
875 |
|
#%% if len(instancias) > 0: |
876 |
|
#%% if normalizar_id(id_objeto) == extraer_id(instancias[0].nombre): |
877 |
|
#%% encontrados = encontrados + 1 |
878 |
|
#%% if encontrados == n_orden: |
879 |
|
#%% |
880 |
|
#%% # Hemos encontrado el objeto, ahora vemos si hay instancias |
881 |
|
#%% # suficientes. |
882 |
|
#%% if (n_instancia + cantidad - 1) > len(instancias): |
883 |
|
#%% raise ExcepcionDeJuego("No hay " + str(n_instancia + cantidad - 1) + |
884 |
|
#%% " instancias de ese objeto, solo hay " + |
885 |
|
#%% str(len(instancias))) |
886 |
|
#%% else: |
887 |
|
#%% for i in range(0, cantidad): |
888 |
|
#%% instancia = self.coger_un_objeto(n_objeto, n_instancia - 1) |
889 |
|
#%% objetos_extraidos.append(instancia) |
890 |
|
#%% |
891 |
|
#%% break |
892 |
|
#%% |
893 |
|
#%% if encontrados == 0: |
894 |
|
#%% raise ExcepcionDeJuego("No hay en la sala ningún objeto con identificativo " + |
895 |
|
#%% id_objeto) |
896 |
|
#%% elif encontrados < n_orden: |
897 |
|
#%% raise ExcepcionDeJuego("No hay en la sala suficientes objetos con identificativo " + |
898 |
|
#%% id_objeto + ", solo hay " + str(encontrados)) |
899 |
|
#%% |
900 |
|
#%% |
901 |
|
#%% def coger_un_objeto(self, n_objeto, n_instancia): |
902 |
|
#%% """Sacar una instancia de un objeto de la sala. |
903 |
|
#%% |
904 |
|
#%% n_objeto es el numero de orden dentro de los objetos de la sala, y n_instancia |
905 |
|
#%% es el numero de la instancia, ambos empezando por cero. |
906 |
|
#%% |
907 |
|
#%% Devuelve una instancia de clase Objeto. |
908 |
|
#%% |
909 |
|
#%% Requiere: |
910 |
|
#%% n_objeto in range(0, len(self.objetos)-1) |
911 |
|
#%% n_instancia in range(0, len(self.objetos[n_objeto]["instancias"])-1) |
912 |
|
#%% |
913 |
|
#%% Asegura: |
914 |
|
#%% return != None |
915 |
|
#%% """ |
916 |
|
#%% objeto = self.__objetos[n_objeto] |
917 |
|
#%% |
918 |
|
#%% instancia = objeto["instancias"][n_instancia] |
919 |
|
#%% |
920 |
|
#%% del objeto["instancias"][n_instancia] |
921 |
|
#%% if len(objeto["instancias"]) == 0 and objeto["probabilidad"] == 0: |
922 |
|
#%% del self.__objetos[n_objeto] |
923 |
|
#%% |
924 |
|
#%% instancia.activar() |
925 |
|
#%% |
926 |
|
#%% return instancia |
927 |
|
|
928 |
instancia es de clase Objeto. Si ya habia mas instancias con el mismo id en la sala, |
|
929 |
se añade a la lista, y si no, se crea un item nuevo en self.objetos. |
def dejar(self, objetos, dificultad = 0): |
930 |
|
"""Soltar una o varias instancias de un objeto en la sala. |
931 |
|
|
932 |
|
Si dificultad != 0, el objeto queda escondido (excepto si ya había |
933 |
|
más instancias de ese mismo objeto anteriormente en la sala). |
934 |
|
|
935 |
Requiere: |
Requiere: |
936 |
instancia != None |
objetos != None |
937 |
|
len(objetos) >= 1 |
938 |
dificultad in range(0, 100) |
dificultad in range(0, 100) |
939 |
""" |
""" |
940 |
encontrado = 0 |
encontrado = 0 |
941 |
|
|
942 |
for objeto in self.__objetos: |
for objeto in self.__objetos: |
943 |
if objeto["id"] == instancia.id: |
if objeto["id"] == objetos[0].id: |
944 |
encontrado = 1 |
encontrado = 1 |
945 |
objeto["instancias"].append(instancia) |
objeto["instancias"].extend(objetos) |
946 |
break |
break |
947 |
|
|
948 |
if not encontrado: |
if not encontrado: |
950 |
"probabilidad":0, |
"probabilidad":0, |
951 |
"maximo":0, |
"maximo":0, |
952 |
"dificultad":dificultad, |
"dificultad":dificultad, |
953 |
"instancias":[instancia]}) |
"instancias":objetos}) |
954 |
|
|
955 |
|
|
956 |
|
#%% def dejar_objeto(self, instancia, dificultad = 0): |
957 |
|
#%% """Soltar un objeto en la sala. |
958 |
|
#%% |
959 |
|
#%% instancia es de clase Objeto. Si ya habia mas instancias con el mismo id en la sala, |
960 |
|
#%% se añade a la lista, y si no, se crea un item nuevo en self.objetos. |
961 |
|
#%% |
962 |
|
#%% Requiere: |
963 |
|
#%% instancia != None |
964 |
|
#%% dificultad in range(0, 100) |
965 |
|
#%% """ |
966 |
|
#%% encontrado = 0 |
967 |
|
#%% |
968 |
|
#%% for objeto in self.__objetos: |
969 |
|
#%% if objeto["id"] == instancia.id: |
970 |
|
#%% encontrado = 1 |
971 |
|
#%% objeto["instancias"].append(instancia) |
972 |
|
#%% break |
973 |
|
#%% |
974 |
|
#%% if not encontrado: |
975 |
|
#%% self.__objetos.append({"id":instancia.id, |
976 |
|
#%% "probabilidad":0, |
977 |
|
#%% "maximo":0, |
978 |
|
#%% "dificultad":dificultad, |
979 |
|
#%% "instancias":[instancia]}) |
980 |
|
|
981 |
|
|
982 |
def salida_cerrada(self, id_sala_destino): |
def salida_cerrada(self, id_sala_destino): |