/[ambar]/ambar/sala.py
ViewVC logotype

Diff of /ambar/sala.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2.6 by amoyav, Thu Apr 10 15:08:04 2003 UTC revision 2.7 by amoyav, Wed Apr 23 08:03:29 2003 UTC
# Line 759  class Sala(object): Line 759  class Sala(object):
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:
# Line 810  class Sala(object): Line 950  class Sala(object):
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):

Legend:
Removed from v.2.6  
changed lines
  Added in v.2.7

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26