19 |
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
20 |
# |
# |
21 |
# |
# |
22 |
#Fichero: personajenojugador.py |
#Fichero: personajenojugador.py |
23 |
|
|
24 |
"""Clase PersonajeNoJugador.""" |
"""Clase PersonajeNoJugador.""" |
25 |
|
|
26 |
from os import path |
from os import path |
27 |
from personaje import * |
from personaje import * |
28 |
|
|
29 |
|
|
30 |
DIR_DESC_PNJS = 'desc_pnjs' |
DIR_DESC_PNJS = 'desc_pnjs' |
31 |
|
|
32 |
|
|
33 |
class PersonajeNoJugador(Personaje): |
class PersonajeNoJugador(Personaje): |
34 |
"""Cualquier personaje no controlado por un jugador. |
"""Cualquier personaje no controlado por un jugador. |
35 |
|
|
36 |
Los PNJs siempre tienen un controlador activo, excepto cuando son guardados a disco |
Los PNJs siempre tienen un controlador activo, excepto cuando son guardados a disco |
37 |
al volcarse junto con una sala. Al ser recuperados, se les vuelve a acoplar |
al volcarse junto con una sala. Al ser recuperados, se les vuelve a acoplar |
38 |
inmediatamente un controlador. |
inmediatamente un controlador. |
39 |
|
|
40 |
Contiene los atributos comunes de un personaje, y ademas: |
Contiene los atributos comunes de un personaje, y ademas: |
41 |
- posesion (string): nombre del objeto que guarda este personaje |
- posesion (string): nombre del objeto que guarda este personaje |
42 |
|
|
43 |
Invariantes: |
Invariantes: |
44 |
id tiene formato "id_fichero%clave_unica" |
id tiene formato "id_fichero%clave_unica" |
45 |
posesion != None |
posesion != None |
46 |
controlador != None |
controlador != None |
47 |
""" |
""" |
48 |
|
|
49 |
def __init__(self, id, sala): |
def __init__(self, id, sala): |
50 |
"""Método para crear un nuevo personaje no jugador. |
"""Método para crear un nuevo personaje no jugador. |
51 |
|
|
52 |
Al crearlo se le debe pasar un id unico, que no se repita dentro del juego |
Al crearlo se le debe pasar un id unico, que no se repita dentro del juego |
53 |
en ninguna otra instancia. Para ello, se añade al id que identifica el fichero |
en ninguna otra instancia. Para ello, se añade al id que identifica el fichero |
54 |
un simbolo % y un numero obtenido con PersonajeNoJugador_nuevo_id(). |
un simbolo % y un numero obtenido con PersonajeNoJugador_nuevo_id(). |
55 |
|
|
56 |
Requiere: |
Requiere: |
57 |
id tiene formato "id_fichero%clave_unica" |
id tiene formato "id_fichero%clave_unica" |
58 |
sala != None |
sala != None |
59 |
""" |
""" |
60 |
Personaje.__init__(self, id, sala) |
Personaje.__init__(self, id, sala) |
61 |
|
|
62 |
# DUMMY: de momento rellenamos los atributos a piñon. |
# DUMMY: de momento rellenamos los atributos a piñon. |
63 |
self.__dict__["nombre"] = "La Tutora" |
self.__dict__["nombre"] = "La Tutora" |
64 |
self.__dict__["descripcion"] = [{"dificultad":0, "texto":"Una anciana mujer, de aspecto respetable. Va vestida con una túnica encapuchada."}] |
self.__dict__["descripcion"] = [{"dificultad":0, "texto":"Una anciana mujer, de aspecto respetable. Va vestida con una túnica encapuchada."}] |
65 |
self.__dict__["experiencia"] = 0 |
self.__dict__["experiencia"] = 0 |
66 |
self.__dict__["nivel"] = 0 |
self.__dict__["nivel"] = 0 |
67 |
self.__dict__["vida"] = 1 |
self.__dict__["vida"] = 1 |
68 |
self.__dict__["volumen"] = 1 |
self.__dict__["volumen"] = 1 |
69 |
self.__dict__["estado"] = "vivo" |
self.__dict__["estado"] = "vivo" |
70 |
self.__dict__["controlador"] = None |
self.__dict__["controlador"] = None |
71 |
self.__dict__["atrib"] = { "fuerza":10, |
self.__dict__["atrib"] = { "fuerza":10, |
72 |
"destreza":10, |
"destreza":10, |
73 |
"constitucion":10, |
"constitucion":10, |
74 |
"inteligencia":10, |
"inteligencia":10, |
75 |
"sabiduria":10, |
"sabiduria":10, |
76 |
"carisma":10 } |
"carisma":10 } |
77 |
self.__dict__["idiomas"] = { Idioma_oestron:5, |
self.__dict__["idiomas"] = { Idioma_oestron:5, |
78 |
Idioma_enano:3, |
Idioma_enano:3, |
79 |
Idioma_quenya:3, |
Idioma_quenya:3, |
80 |
Idioma_orco:3 } |
Idioma_orco:3 } |
81 |
|
|
82 |
self.posesion = "" |
self.posesion = "" |
83 |
|
|
84 |
self.controlador_automatico() |
self.controlador_automatico() |
85 |
|
|
86 |
|
|
87 |
def controlador_automatico(self): |
def controlador_automatico(self): |
88 |
"""Instancia un controlador automatico para este PNJ y se lo acopla. |
"""Instancia un controlador automatico para este PNJ y se lo acopla. |
89 |
|
|
90 |
El tipo de controlador vendra determinado por los atributos de este |
El tipo de controlador vendra determinado por los atributos de este |
91 |
PNJ segun se leen del fichero de descripcion. |
PNJ segun se leen del fichero de descripcion. |
92 |
|
|
93 |
Requiere: |
Requiere: |
94 |
self.controlador == None |
self.controlador == None |
95 |
|
|
96 |
Asegura: |
Asegura: |
97 |
self.controlador != None |
self.controlador != None |
98 |
""" |
""" |
99 |
# De momento, a piñon tambien. |
# De momento, a piñon tambien. |
100 |
if self.id.split('%')[0] == "tutora": |
if self.id.split('%')[0] == "tutora": |
101 |
from interfazpnjhablante import InterfazPNJHablante |
from interfazpnjhablante import InterfazPNJHablante |
102 |
controlador = InterfazPNJHablante(self.id) |
self.controlador = InterfazPNJHablante(self.id) |
103 |
controlador.controlar_personaje(self) |
self.controlador.controlar_personaje(self) |
104 |
else: |
else: |
105 |
from interfazpnj import InterfazPNJ |
from interfazpnj import InterfazPNJ |
106 |
controlador = InterfazPNJ() |
self.controlador = InterfazPNJ() |
107 |
controlador.controlar_personaje(self) |
self.controlador.controlar_personaje(self) |
108 |
|
|
109 |
|
|
110 |
# Metodos que se refieren a la clase pero tienen ambito de clase, |
# Metodos que se refieren a la clase pero tienen ambito de clase, |
111 |
# y no de instancia |
# y no de instancia |
112 |
|
|
113 |
def PersonajeNoJugador_nuevo_id(): |
def PersonajeNoJugador_nuevo_id(): |
114 |
global PersonajeNoJugador_contador_de_ids |
global PersonajeNoJugador_contador_de_ids |
115 |
PersonajeNoJugador_contador_de_ids += 1 |
PersonajeNoJugador_contador_de_ids += 1 |
116 |
return str(PersonajeNoJugador_contador_de_ids) |
return str(PersonajeNoJugador_contador_de_ids) |
117 |
|
|
118 |
|
|
119 |
PersonajeNoJugador_contador_de_ids = 0 |
PersonajeNoJugador_contador_de_ids = 0 |
120 |
|
|
121 |
# Código para pruebas unitarias del módulo. |
# Código para pruebas unitarias del módulo. |
122 |
|
|
123 |
if (__name__ == '__main__'): |
if (__name__ == '__main__'): |
124 |
print "No hay prueba unitaria de módulo." |
print "No hay prueba unitaria de módulo." |
125 |
|
|