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 |
# |
# |
23 |
#Fichero: dialogo.py |
#Fichero: dialogo.py |
24 |
|
|
25 |
"""Clase Dialogo.""" |
"""Clase Dialogo.""" |
26 |
|
|
27 |
|
|
28 |
class Dialogo: |
class Dialogo: |
29 |
"""Clase base que representa un dialogo mantenido con el jugador |
"""Clase base que representa un dialogo mantenido con el jugador |
30 |
a través de una conexión de socket. |
a través de una conexión de socket. |
31 |
|
|
32 |
Responde a los eventos de socket, y también a los del controlador |
Responde a los eventos de socket, y también a los del controlador |
33 |
de un personaje. Tiene implementaciones por defecto de las respuestas |
de un personaje. Tiene implementaciones por defecto de las respuestas |
34 |
a todos los eventos, que generan un error. Hay que redefinir todas |
a todos los eventos, que generan un error. Hay que redefinir todas |
35 |
las respuestas a eventos que se espera que ocurran. |
las respuestas a eventos que se espera que ocurran. |
36 |
|
|
37 |
Los eventos de controlador tienen una respuesta única, pero los de |
Los eventos de controlador tienen una respuesta única, pero los de |
38 |
socket tienen una respuesta distinta para cada estado. Las subclases |
socket tienen una respuesta distinta para cada estado. Las subclases |
39 |
deberán definir un método por cada estado, llamado comando_<estado> |
deberán definir un método por cada estado, llamado comando_<estado> |
40 |
(por ejemplo, comando_0, comando_1, etc.). |
(por ejemplo, comando_0, comando_1, etc.). |
41 |
|
|
42 |
Contiene los siguientes atributos: |
Contiene los siguientes atributos: |
43 |
- __padre(InterfazPJ): el interfaz al cual pertenece este diálogo |
- __padre(InterfazPJ): el interfaz al cual pertenece este diálogo |
44 |
- __conn(Connection): la conexión por la cual se comunica |
- __conn(Connection): la conexión por la cual se comunica |
45 |
- __estado(int): el estado en el que se encuentra este diálogo |
- __estado(int): el estado en el que se encuentra este diálogo |
46 |
|
|
47 |
Invariantes: |
Invariantes: |
48 |
__padre != None |
__padre != None |
49 |
__conn != None |
__conn != None |
50 |
__estado >= 0 |
__estado >= 0 |
51 |
""" |
""" |
52 |
|
|
53 |
def __init__(self, padre, conn): |
def __init__(self, padre, conn): |
54 |
"""Inicializa la base y empieza en estado 0. |
"""Inicializa la base y empieza en estado 0. |
55 |
|
|
56 |
Requiere: |
Requiere: |
57 |
padre != None |
padre != None |
58 |
conn != None |
conn != None |
59 |
""" |
""" |
60 |
self.__padre = padre |
self.__padre = padre |
61 |
self.__conn = conn |
self.__conn = conn |
62 |
self.__estado = 0 |
self.__estado = 0 |
63 |
|
|
64 |
|
|
65 |
def padre(self): |
def padre(self): |
66 |
return self.__padre |
return self.__padre |
67 |
|
|
68 |
|
|
69 |
def conn(self): |
def conn(self): |
70 |
return self.__conn |
return self.__conn |
71 |
|
|
72 |
|
|
73 |
def estado(self): |
def estado(self): |
74 |
return self.__estado |
return self.__estado |
75 |
|
|
76 |
|
|
77 |
def poner_estado(self, estado): |
def poner_estado(self, estado): |
78 |
"""Requiere: estado >= 0""" |
"""Requiere: estado >= 0""" |
79 |
self.__estado = estado |
self.__estado = estado |
80 |
|
|
81 |
|
|
82 |
def comando_0(self, cmd_list): |
def comando_0(self, cmd_list): |
83 |
"""Responde a un comando que viene del socket. |
"""Responde a un comando que viene del socket. |
84 |
|
|
85 |
El comando ya viene partido en una lista de palabras. |
El comando ya viene partido en una lista de palabras. |
86 |
|
|
87 |
Requiere: |
Requiere: |
88 |
cmd_list != None |
cmd_list != None |
89 |
""" |
""" |
90 |
raise ValueError("Recibido comando en un diálogo que no lo espera") |
raise ValueError("Recibido comando en un diálogo que no lo espera") |
91 |
|
|
92 |
|
|
93 |
def entra_personaje(self, personaje): |
def entra_personaje(self, personaje): |
94 |
raise ValueError("Recibido evento entra_personaje en un diálogo que no lo espera") |
raise ValueError("Recibido evento entra_personaje en un diálogo que no lo espera") |
95 |
|
|
96 |
|
|
97 |
def sale_personaje(self, personaje, nombre_sala_destino): |
def sale_personaje(self, personaje, nombre_sala_destino): |
98 |
raise ValueError("Recibido evento sale_personaje en un diálogo que no lo espera") |
raise ValueError("Recibido evento sale_personaje en un diálogo que no lo espera") |
99 |
|
|
100 |
|
|
101 |
def habla_personaje(self, personaje, mensaje): |
def habla_personaje(self, personaje, mensaje): |
102 |
raise ValueError("Recibido evento habla_personaje en un diálogo que no lo espera") |
raise ValueError("Recibido evento habla_personaje en un diálogo que no lo espera") |
103 |
|
|
104 |
|
|
105 |
def susurra_personaje(self, personaje, mensaje): |
def susurra_personaje(self, personaje, mensaje): |
106 |
raise ValueError("Recibido evento susurra_personaje en un diálogo que no lo espera") |
raise ValueError("Recibido evento susurra_personaje en un diálogo que no lo espera") |
107 |
|
|
108 |
|
|
109 |
def grita_personaje(self, personaje, mensaje): |
def grita_personaje(self, personaje, mensaje): |
110 |
raise ValueError("Recibido evento grita_personaje en un diálogo que no lo espera") |
raise ValueError("Recibido evento grita_personaje en un diálogo que no lo espera") |
111 |
|
|
112 |
|
|
113 |
def actua_personaje(self, personaje, accion): |
def actua_personaje(self, personaje, accion): |
114 |
raise ValueError("Recibido evento actua_personaje en un diálogo que no lo espera") |
raise ValueError("Recibido evento actua_personaje en un diálogo que no lo espera") |
115 |
|
|
116 |
|
|
117 |
def actua_individual_personaje(self, personaje, accion): |
def actua_individual_personaje(self, personaje, accion): |
118 |
raise ValueError("Recibido evento actua_individual_personaje en un diálogo que no lo espera") |
raise ValueError("Recibido evento actua_individual_personaje en un diálogo que no lo espera") |
119 |
|
|
120 |
|
|
121 |
def actua_uno_mismo(self, accion): |
def actua_uno_mismo(self, accion): |
122 |
raise ValueError("Recibido evento actua_uno_mismo en un diálogo que no lo espera") |
raise ValueError("Recibido evento actua_uno_mismo en un diálogo que no lo espera") |
123 |
|
|
124 |
|
|
125 |
def actua_global_personaje(self, personaje, accion): |
def actua_global_personaje(self, personaje, accion): |
126 |
raise ValueError("Recibido evento actua_global_personaje en un diálogo que no lo espera") |
raise ValueError("Recibido evento actua_global_personaje en un diálogo que no lo espera") |
127 |
|
|
128 |
|
|
129 |
def suceso_entorno(self, mensaje): |
def suceso_entorno(self, mensaje): |
130 |
raise ValueError("Recibido evento suceso_entorno en un diálogo que no lo espera") |
raise ValueError("Recibido evento suceso_entorno en un diálogo que no lo espera") |
131 |
|
|
132 |
|
|
133 |
def ataca_personaje(self, personaje, result): |
def ataca_personaje(self, personaje, result): |
134 |
raise ValueError("Recibido evento ataca_personaje en un diálogo que no lo espera") |
raise ValueError("Recibido evento ataca_personaje en un diálogo que no lo espera") |
135 |
|
|
136 |
|
|
137 |
def movimiento_automatico(self): |
def movimiento_automatico(self): |
138 |
raise ValueError("Recibido evento movimiento_automatico en un diálogo que no lo espera") |
raise ValueError("Recibido evento movimiento_automatico en un diálogo que no lo espera") |
139 |
|
|
140 |
|
|
141 |
# Código para pruebas unitarias del módulo. |
# Código para pruebas unitarias del módulo. |
142 |
|
|
143 |
if (__name__ == '__main__'): |
if (__name__ == '__main__'): |
144 |
print "No hay código para pruebas unitarias del módulo." |
print "No hay código para pruebas unitarias del módulo." |
145 |
print "Para probar, ejecutar mine.py y conectarse via telnet." |
print "Para probar, ejecutar mine.py y conectarse via telnet." |
146 |
|
|