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

Diff of /ambar/personaje.py

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

revision 1.16 by pabloruiz, Sun Apr 28 15:54:25 2002 UTC revision 1.17 by amoyav, Thu May 9 05:31:17 2002 UTC
# Line 64  class Personaje: Line 64  class Personaje:
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.
# Line 107  class Personaje: Line 114  class 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
# Line 828  class Personaje: Line 843  class Personaje:
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    

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

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