1 |
#!/usr/bin/env python |
#!/usr/bin/env python |
2 |
# |
# |
3 |
#Minë. Mundo Interactivo-Narrativo en Español [Tierra-Media] |
#Minë. Mundo Interactivo-Narrativo en Español [Tierra-Media] |
4 |
#Copyright (C) 2002 Pablo Ruiz Múzquiz |
#Copyright (C) 2002 Pablo Ruiz Múzquiz |
5 |
# |
# |
6 |
# |
# |
7 |
#This program is free software; you can redistribute it and/or modify |
#This program is free software; you can redistribute it and/or modify |
8 |
#it under the terms of the GNU General Public License as published by |
#it under the terms of the GNU General Public License as published by |
9 |
#the Free Software Foundation; either version 2 of the License, or |
#the Free Software Foundation; either version 2 of the License, or |
10 |
#(at your option) any later version. |
#(at your option) any later version. |
11 |
# |
# |
12 |
#This program is distributed in the hope that it will be useful, |
#This program is distributed in the hope that it will be useful, |
13 |
#but WITHOUT ANY WARRANTY; without even the implied warranty of |
#but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 |
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 |
#GNU General Public License for more details. |
#GNU General Public License for more details. |
16 |
# |
# |
17 |
#You should have received a copy of the GNU General Public License |
#You should have received a copy of the GNU General Public License |
18 |
#along with this program; if not, write to the Free Software |
#along with this program; if not, write to the Free Software |
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: raza.py |
#Fichero: raza.py |
23 |
|
|
24 |
"""Clase Raza.""" |
"""Clase Raza.""" |
25 |
|
|
26 |
from idioma import * |
from idioma import * |
27 |
|
|
28 |
|
|
29 |
class Raza: |
class Raza: |
30 |
"""Información sobre cualquiera de las razas que pueden tener los personajes. |
"""Información sobre cualquiera de las razas que pueden tener los personajes. |
31 |
|
|
32 |
Una raza se caracteriza por: |
Una raza se caracteriza por: |
33 |
- nombre (string): identificador de la raza |
- nombre (string): identificador de la raza |
34 |
- volumen_base (int): volumen típico de un personaje de esta raza |
- volumen_base (int): volumen típico de un personaje de esta raza |
35 |
- aura_base (int): aura típica de un personaje de esta raza |
- aura_base (int): aura típica de un personaje de esta raza |
36 |
- descripcion_base ({string: any}): descripción típica de un personaje de esta raza, |
- descripcion_base ({string: any}): descripción típica de un personaje de esta raza, |
37 |
en el mismo formato que la de PersonajeJugador |
en el mismo formato que la de PersonajeJugador |
38 |
- idiomas_base ({Idioma: int}): idiomas típicos que conoce un personaje de esta raza |
- idiomas_base ({Idioma: int}): idiomas típicos que conoce un personaje de esta raza |
39 |
- profesiones_prohibidas ([Profesion]): profesiones a las que no se puede acceder por raza |
- profesiones_prohibidas ([Profesion]): profesiones a las que no se puede acceder por raza |
40 |
- modif_atrib ({string: int}): modificadores a los atributos según la raza |
- modif_atrib ({string: int}): modificadores a los atributos según la raza |
41 |
- nombre_genero ({string: string}): nombre de la raza según género (masculino / femenino) |
- nombre_genero ({string: string}): nombre de la raza según género (masculino / femenino) |
42 |
|
|
43 |
Invariantes: |
Invariantes: |
44 |
nombre != None |
nombre != None |
45 |
volumen_base > 0 |
volumen_base > 0 |
46 |
aura_base in range(0,100) |
aura_base in range(0,100) |
47 |
|
|
48 |
descripcion_base != None |
descripcion_base != None |
49 |
len(descripcion_base) >= 0 |
len(descripcion_base) >= 0 |
50 |
descripcion_base[i]["dificultad"] in range(0,100) |
descripcion_base[i]["dificultad"] in range(0,100) |
51 |
descripcion_base[i]["texto"] != None |
descripcion_base[i]["texto"] != None |
52 |
|
|
53 |
idiomas_base != None |
idiomas_base != None |
54 |
len(idiomas_base) == len(Idioma_lista) |
len(idiomas_base) == len(Idioma_lista) |
55 |
idiomas_base[i] in range(1,5) |
idiomas_base[i] in range(1,5) |
56 |
|
|
57 |
profesiones_prohibidas != None |
profesiones_prohibidas != None |
58 |
len(profesiones_prohibidas) > 0 |
len(profesiones_prohibidas) > 0 |
59 |
|
|
60 |
modif_atrib != None |
modif_atrib != None |
61 |
len(modif_atrib) == 6 |
len(modif_atrib) == 6 |
62 |
|
|
63 |
nombre_genero != None |
nombre_genero != None |
64 |
len(nombre_genero) == 2 |
len(nombre_genero) == 2 |
65 |
nombre_genero[i] != None |
nombre_genero[i] != None |
66 |
""" |
""" |
67 |
|
|
68 |
def __init__(self, nombre, volumen_base, aura_base, descripcion_base, |
def __init__(self, nombre, volumen_base, aura_base, descripcion_base, |
69 |
idiomas_base, profesiones_prohibidas, modif_atrib, |
idiomas_base, profesiones_prohibidas, modif_atrib, |
70 |
nombre_genero): |
nombre_genero): |
71 |
"""Crea una nueva instancia de Raza. |
"""Crea una nueva instancia de Raza. |
72 |
|
|
73 |
No está permitido instanciar más razas aparte de las existentes |
No está permitido instanciar más razas aparte de las existentes |
74 |
dentro de Raza_lista. |
dentro de Raza_lista. |
75 |
|
|
76 |
Requiere: |
Requiere: |
77 |
Todos los parámetros satisfacen las invariantes. |
Todos los parámetros satisfacen las invariantes. |
78 |
""" |
""" |
79 |
self.nombre = nombre |
self.nombre = nombre |
80 |
self.volumen_base = volumen_base |
self.volumen_base = volumen_base |
81 |
self.aura_base = aura_base |
self.aura_base = aura_base |
82 |
self.descripcion_base = descripcion_base |
self.descripcion_base = descripcion_base |
83 |
self.idiomas_base = idiomas_base |
self.idiomas_base = idiomas_base |
84 |
self.profesiones_prohibidas = profesiones_prohibidas |
self.profesiones_prohibidas = profesiones_prohibidas |
85 |
self.modif_atrib = modif_atrib |
self.modif_atrib = modif_atrib |
86 |
self.nombre_genero = nombre_genero |
self.nombre_genero = nombre_genero |
87 |
|
|
88 |
|
|
89 |
# Lista de todas las razas definidas |
# Lista de todas las razas definidas |
90 |
Raza_lista = [ Raza(nombre = "elfo", |
Raza_lista = [ Raza(nombre = "elfo", |
91 |
volumen_base = 1, |
volumen_base = 1, |
92 |
aura_base = 65, |
aura_base = 65, |
93 |
descripcion_base = [{"dificultad": 0, |
descripcion_base = [{"dificultad": 0, |
94 |
"texto": "Un elfo de los de toda la vida."}], |
"texto": "Un elfo de los de toda la vida."}], |
95 |
idiomas_base = {Idioma_oestron:5, |
idiomas_base = {Idioma_oestron:5, |
96 |
Idioma_quenya:5, |
Idioma_quenya:5, |
97 |
Idioma_enano:0, |
Idioma_enano:0, |
98 |
Idioma_orco:0}, |
Idioma_orco:0}, |
99 |
profesiones_prohibidas = [], |
profesiones_prohibidas = [], |
100 |
modif_atrib = {"fuerza": -1, |
modif_atrib = {"fuerza": -1, |
101 |
"destreza": +2, |
"destreza": +2, |
102 |
"constitucion": -1, |
"constitucion": -1, |
103 |
"inteligencia": +0, |
"inteligencia": +0, |
104 |
"sabiduria": +1, |
"sabiduria": +1, |
105 |
"carisma": +1}, |
"carisma": +1}, |
106 |
nombre_genero = {"masculino": "el elfo", |
nombre_genero = {"masculino": "el elfo", |
107 |
"femenino": "la elfa"}), |
"femenino": "la elfa"}), |
108 |
|
|
109 |
Raza(nombre = "humano", |
Raza(nombre = "humano", |
110 |
volumen_base = 1, |
volumen_base = 1, |
111 |
aura_base = 50, |
aura_base = 50, |
112 |
descripcion_base = [{"dificultad": 0, |
descripcion_base = [{"dificultad": 0, |
113 |
"texto": "Un humano corrientillo."}], |
"texto": "Un humano corrientillo."}], |
114 |
idiomas_base = {Idioma_oestron:5, |
idiomas_base = {Idioma_oestron:5, |
115 |
Idioma_quenya:0, |
Idioma_quenya:0, |
116 |
Idioma_enano:0, |
Idioma_enano:0, |
117 |
Idioma_orco:0}, |
Idioma_orco:0}, |
118 |
profesiones_prohibidas = [], |
profesiones_prohibidas = [], |
119 |
modif_atrib = {"fuerza": +2, |
modif_atrib = {"fuerza": +2, |
120 |
"destreza": +0, |
"destreza": +0, |
121 |
"constitucion": +1, |
"constitucion": +1, |
122 |
"inteligencia": -1, |
"inteligencia": -1, |
123 |
"sabiduria": -1, |
"sabiduria": -1, |
124 |
"carisma": -1}, |
"carisma": -1}, |
125 |
nombre_genero = {"masculino": "el humano", |
nombre_genero = {"masculino": "el humano", |
126 |
"femenino": "la humana"}), |
"femenino": "la humana"}), |
127 |
|
|
128 |
Raza(nombre = "orco", |
Raza(nombre = "orco", |
129 |
volumen_base = 1, |
volumen_base = 1, |
130 |
aura_base = 35, |
aura_base = 35, |
131 |
descripcion_base = [{"dificultad": 0, |
descripcion_base = [{"dificultad": 0, |
132 |
"texto": "Un orco entrañable."}], |
"texto": "Un orco entrañable."}], |
133 |
idiomas_base = {Idioma_oestron:5, |
idiomas_base = {Idioma_oestron:5, |
134 |
Idioma_quenya:0, |
Idioma_quenya:0, |
135 |
Idioma_enano:0, |
Idioma_enano:0, |
136 |
Idioma_orco:5}, |
Idioma_orco:5}, |
137 |
profesiones_prohibidas = ["montaraz", |
profesiones_prohibidas = ["montaraz", |
138 |
"bardo", |
"bardo", |
139 |
"animista"], |
"animista"], |
140 |
modif_atrib = {"fuerza": +3, |
modif_atrib = {"fuerza": +3, |
141 |
"destreza": +1, |
"destreza": +1, |
142 |
"constitucion": +3, |
"constitucion": +3, |
143 |
"inteligencia": -2, |
"inteligencia": -2, |
144 |
"sabiduria": -2, |
"sabiduria": -2, |
145 |
"carisma": -2}, |
"carisma": -2}, |
146 |
nombre_genero = {"masculino": "el orco", |
nombre_genero = {"masculino": "el orco", |
147 |
"femenino": "la orca"}), |
"femenino": "la orca"}), |
148 |
|
|
149 |
Raza(nombre = "enano", |
Raza(nombre = "enano", |
150 |
volumen_base = 0.75, |
volumen_base = 0.75, |
151 |
aura_base = 50, |
aura_base = 50, |
152 |
descripcion_base = [{"dificultad": 0, |
descripcion_base = [{"dificultad": 0, |
153 |
"texto": "El enano de siempre."}], |
"texto": "El enano de siempre."}], |
154 |
idiomas_base = {Idioma_oestron:5, |
idiomas_base = {Idioma_oestron:5, |
155 |
Idioma_quenya:0, |
Idioma_quenya:0, |
156 |
Idioma_enano:5, |
Idioma_enano:5, |
157 |
Idioma_orco:1}, |
Idioma_orco:1}, |
158 |
profesiones_prohibidas = ["animista"], |
profesiones_prohibidas = ["animista"], |
159 |
modif_atrib = {"fuerza": +4, |
modif_atrib = {"fuerza": +4, |
160 |
"destreza": +0, |
"destreza": +0, |
161 |
"constitucion": +4, |
"constitucion": +4, |
162 |
"inteligencia": -2, |
"inteligencia": -2, |
163 |
"sabiduria": -3, |
"sabiduria": -3, |
164 |
"carisma": -2}, |
"carisma": -2}, |
165 |
nombre_genero = {"masculino": "el enano", |
nombre_genero = {"masculino": "el enano", |
166 |
"femenino": "la enana"}), |
"femenino": "la enana"}), |
167 |
|
|
168 |
Raza(nombre = "hobbit", |
Raza(nombre = "hobbit", |
169 |
volumen_base = 0.5, |
volumen_base = 0.5, |
170 |
aura_base = 50, |
aura_base = 50, |
171 |
descripcion_base = [{"dificultad": 0, |
descripcion_base = [{"dificultad": 0, |
172 |
"texto": "Un hobbit rechoncho."}], |
"texto": "Un hobbit rechoncho."}], |
173 |
idiomas_base = {Idioma_oestron:5, |
idiomas_base = {Idioma_oestron:5, |
174 |
Idioma_quenya:0, |
Idioma_quenya:0, |
175 |
Idioma_enano:0, |
Idioma_enano:0, |
176 |
Idioma_orco:0}, |
Idioma_orco:0}, |
177 |
profesiones_prohibidas = ["montaraz", |
profesiones_prohibidas = ["montaraz", |
178 |
"animista"], |
"animista"], |
179 |
modif_atrib = {"fuerza": -2, |
modif_atrib = {"fuerza": -2, |
180 |
"destreza": +2, |
"destreza": +2, |
181 |
"constitucion": -1, |
"constitucion": -1, |
182 |
"inteligencia": +1, |
"inteligencia": +1, |
183 |
"sabiduria": -1, |
"sabiduria": -1, |
184 |
"carisma": +0}, |
"carisma": +0}, |
185 |
nombre_genero = {"masculino": "el hobbit", |
nombre_genero = {"masculino": "el hobbit", |
186 |
"femenino": "la hobbit"}) ] |
"femenino": "la hobbit"}) ] |
187 |
|
|
188 |
|
|
189 |
def Raza_buscar(nombre): |
def Raza_buscar(nombre): |
190 |
"""Obtiene un raza a partir de su nombre, o None si no existe. |
"""Obtiene un raza a partir de su nombre, o None si no existe. |
191 |
|
|
192 |
Requiere: |
Requiere: |
193 |
nombre != None |
nombre != None |
194 |
""" |
""" |
195 |
for raza in Raza_lista: |
for raza in Raza_lista: |
196 |
if raza.nombre == nombre: |
if raza.nombre == nombre: |
197 |
return raza |
return raza |
198 |
return None |
return None |
199 |
|
|
200 |
|
|
201 |
# Andrés: hay dos partes del sistema de razas que no sé que hacer con ellas: |
# Andrés: hay dos partes del sistema de razas que no sé que hacer con ellas: |
202 |
# |
# |
203 |
# - Filtro de color de ojos y pelo: esto si se quiere hacer habría que |
# - Filtro de color de ojos y pelo: esto si se quiere hacer habría que |
204 |
# estudiarlo más y darle un poco más de contenido. De momento lo suprimo. |
# estudiarlo más y darle un poco más de contenido. De momento lo suprimo. |
205 |
# - Ajuste de puntos de vida por raza: esto lo dejo aparcado hasta que nos |
# - Ajuste de puntos de vida por raza: esto lo dejo aparcado hasta que nos |
206 |
# pongamos con el sistema de combate. |
# pongamos con el sistema de combate. |
207 |
# |
# |
208 |
# Aquí copio el código que había al respecto en PersonajeJugador.py |
# Aquí copio el código que había al respecto en PersonajeJugador.py |
209 |
# |
# |
210 |
# class PJElfo(PersonajeJugador): |
# class PJElfo(PersonajeJugador): |
211 |
# def vida_ajustada(self, vida): return vida + self.nivel * 4 |
# def vida_ajustada(self, vida): return vida + self.nivel * 4 |
212 |
# |
# |
213 |
# class PJHumano(PersonajeJugador): |
# class PJHumano(PersonajeJugador): |
214 |
# def vida_ajustada(self, vida): return vida + self.nivel * 5 |
# def vida_ajustada(self, vida): return vida + self.nivel * 5 |
215 |
# |
# |
216 |
# class PJOrco(PersonajeJugador): |
# class PJOrco(PersonajeJugador): |
217 |
# def color_de_ojos_ajustado(self, color_de_ojos): |
# def color_de_ojos_ajustado(self, color_de_ojos): |
218 |
# if color_de_ojos in ['verde', 'azul']: |
# if color_de_ojos in ['verde', 'azul']: |
219 |
# print "Lo siento, un orco no puede tener los ojos de color", color_de_ojos |
# print "Lo siento, un orco no puede tener los ojos de color", color_de_ojos |
220 |
# print "Tus ojos serán de color negro" |
# print "Tus ojos serán de color negro" |
221 |
# return 'negro' |
# return 'negro' |
222 |
# else: |
# else: |
223 |
# return color_de_ojos |
# return color_de_ojos |
224 |
# def color_de_pelo_ajustado(self, color_de_pelo): |
# def color_de_pelo_ajustado(self, color_de_pelo): |
225 |
# if color_de_pelo in ['rubio', 'pelirrojo']: # esto es una pijada |
# if color_de_pelo in ['rubio', 'pelirrojo']: # esto es una pijada |
226 |
# print "Lo siento, un orco no puede tener el pelo de color", color_de_pelo |
# print "Lo siento, un orco no puede tener el pelo de color", color_de_pelo |
227 |
# print "Tu pelo será de color negro" |
# print "Tu pelo será de color negro" |
228 |
# return 'negro' |
# return 'negro' |
229 |
# else: |
# else: |
230 |
# return color_de_pelo |
# return color_de_pelo |
231 |
# def vida_ajustada(self, vida): return vida + self.nivel * 5 |
# def vida_ajustada(self, vida): return vida + self.nivel * 5 |
232 |
# |
# |
233 |
# class PJEnano(PersonajeJugador): |
# class PJEnano(PersonajeJugador): |
234 |
# def vida_ajustada(self, vida): return vida + self.nivel * 6 |
# def vida_ajustada(self, vida): return vida + self.nivel * 6 |
235 |
# |
# |
236 |
# class PJHobbit(PersonajeJugador): |
# class PJHobbit(PersonajeJugador): |
237 |
# def vida_ajustada(self, vida): return vida + self.nivel * 6 |
# def vida_ajustada(self, vida): return vida + self.nivel * 6 |
238 |
|
|
239 |
|
|
240 |
# Código para pruebas unitarias del módulo. |
# Código para pruebas unitarias del módulo. |
241 |
|
|
242 |
if (__name__ == '__main__'): |
if (__name__ == '__main__'): |
243 |
for nombre_raza in [raza.nombre for raza in Raza_lista]: |
for nombre_raza in [raza.nombre for raza in Raza_lista]: |
244 |
raza = Raza_buscar(nombre_raza) |
raza = Raza_buscar(nombre_raza) |
245 |
print "Raza: " + raza.nombre |
print "Raza: " + raza.nombre |
246 |
print " volumen_base = " + str(raza.volumen_base) |
print " volumen_base = " + str(raza.volumen_base) |
247 |
print " aura_base = " + str(raza.aura_base) |
print " aura_base = " + str(raza.aura_base) |
248 |
print " descripcion_base = " + str(raza.descripcion_base) |
print " descripcion_base = " + str(raza.descripcion_base) |
249 |
print " idiomas_base = " + str(raza.idiomas_base) |
print " idiomas_base = " + str(raza.idiomas_base) |
250 |
print " profesiones_prohibidas = " + str(raza.profesiones_prohibidas) |
print " profesiones_prohibidas = " + str(raza.profesiones_prohibidas) |
251 |
print " modif_atrib = " + str(raza.modif_atrib) |
print " modif_atrib = " + str(raza.modif_atrib) |
252 |
print " nombre_genero = " + str(raza.nombre_genero) |
print " nombre_genero = " + str(raza.nombre_genero) |
253 |
|
|