-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDamasGUI.html
286 lines (236 loc) · 26.6 KB
/
DamasGUI.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module DamasGUI</title>
</head><body bgcolor="#f0f0f8">
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"> <br><big><big><strong>DamasGUI</strong></big></big> (version 1.0, 26 de Mayo 2014)</font></td
></tr></table>
<p><tt>Juego de las Damas para la asignatura de Paradigmas de Programacion del Grado en Ingenieria Informatica de la Universidad de Valladolid.<br>
Este juego se ha realizado con la libreria PYGTK para la implementacion grafica.</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
<tr><td bgcolor="#aa55cc"><tt> </tt></td><td> </td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="gtk.html">gtk</a><br>
</td><td width="25%" valign=top><a href="os.html">os</a><br>
</td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
<tr><td bgcolor="#ee77aa"><tt> </tt></td><td> </td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="DamasGUI.html#GUI">GUI</a>
</font></dt><dt><font face="helvetica, arial"><a href="DamasGUI.html#Game">Game</a>
</font></dt></dl>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom> <br>
<font color="#000000" face="helvetica, arial"><a name="GUI">class <strong>GUI</strong></a></font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
<td colspan=2><tt>Esta clase se encarga de manejar la interfaz grafica mediante sus procedimientos.<br> </tt></td></tr>
<tr><td> </td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="GUI-__init__"><strong>__init__</strong></a>(self)</dt><dd><tt>Inicializa las instancias de esta clase.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-initconfig">initconfig</a>(self)<br>
- <a href="#GUI-quit_program">quit_program</a>(self, widget=None, event=None, data=None)<br>
- <a href="#GUI-initmenu">initmenu</a>(self)<br>
- <a href="#GUI-initcontent">initcontent</a>(self)<br>
- <a href="#GUI-initstatus">initstatus</a>(self)<br>
- <a href="#GUI-actualizar">actualizar</a>(self)<br>
OBJETOS:<br>
- Se inicializa el atributo game que contiene una instancia de <a href="#Game">Game</a></tt></dd></dl>
<dl><dt><a name="GUI-actualizar"><strong>actualizar</strong></a>(self)</dt><dd><tt>Se encarga de llamar a todas los procedimientos que actualizan la informacion que se muestra en la ventana del juego.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-actualizarTablero">actualizarTablero</a>(self)<br>
- <a href="#GUI-actualizarMoves">actualizarMoves</a>(self)<br>
- <a href="#GUI-actualizarEstado">actualizarEstado</a>(self)<br>
- <a href="#GUI-actualizarTablaRonda">actualizarTablaRonda</a>(self)</tt></dd></dl>
<dl><dt><a name="GUI-actualizarEstado"><strong>actualizarEstado</strong></a>(self)</dt><dd><tt>Actualiza la barra de estado, que esta en la parte inferior de la ventana.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-ponerEstado1">ponerEstado1</a>(self, texto)<br>
- <a href="#GUI-ponerEstado2">ponerEstado2</a>(self, texto)</tt></dd></dl>
<dl><dt><a name="GUI-actualizarMoves"><strong>actualizarMoves</strong></a>(self)</dt><dd><tt>Actualiza la tabla de movimientos realizados en la partida. Tambien se encarga de activar y desactivar el boton de deshacer.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-anadirMovimiento">anadirMovimiento</a>(self, move)</tt></dd></dl>
<dl><dt><a name="GUI-actualizarTablaRonda"><strong>actualizarTablaRonda</strong></a>(self)</dt><dd><tt>Actualiza la tabla que indica las fichas restantes de cada jugador.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game">Game</a>.contar_fichas(self)<br>
OBJETOS:<br>
- Se trabaja con el atributo game que contiene una instancia de <a href="#Game">Game</a>.</tt></dd></dl>
<dl><dt><a name="GUI-actualizarTablero"><strong>actualizarTablero</strong></a>(self)</dt><dd><tt>Se encarga de actualizar el tablero del juego, colocando las imagenes de las fichas correspondientes a cada boton.</tt></dd></dl>
<dl><dt><a name="GUI-actualizarconfig"><strong>actualizarconfig</strong></a>(self)</dt><dd><tt>Actualiza el fichero de configuracion del juego.</tt></dd></dl>
<dl><dt><a name="GUI-add_filters"><strong>add_filters</strong></a>(self, dialog)</dt><dd><tt>Establece y agrega filtros de extension de los archivos que contienen partidas guardadas.</tt></dd></dl>
<dl><dt><a name="GUI-anadirMovimiento"><strong>anadirMovimiento</strong></a>(self, move)</dt><dd><tt>Agrega un movimiento a la lista de movimientos de la tabla</tt></dd></dl>
<dl><dt><a name="GUI-btn_send"><strong>btn_send</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Este procedimiento se activa cuando el programa recibe la orden de hacer algun movimiento. Se encarga de enviarselo al objeto game.<br>
Si el movimiento recibido no es valido, muestra el error en el estado de la derecha.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game">Game</a>.realizarMovimiento(self, play)<br>
- <a href="#GUI-actualizar">actualizar</a>(self)<br>
- <a href="#GUI-ponerEstado2">ponerEstado2</a>(self, texto)<br>
OBJETOS:<br>
- Se trabaja con el atributo game que contiene una instancia de <a href="#Game">Game</a>.</tt></dd></dl>
<dl><dt><a name="GUI-btn_undo"><strong>btn_undo</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Se encarga de deshacer el ultimo movimiento. Para ello, reinicializa la instancia de <a href="#Game">Game</a>, y realiza todos los movimientos realizados hasta el momento, salvo el ultimo.<br>
Dicho movimiento es borrado de la lista de movimientos.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game">Game</a>.realizarMovimiento(self, play)<br>
- <a href="#GUI-actualizar">actualizar</a>(self)<br>
OBJETOS:<br>
- Se reinicializa el atributo game que contiene una instancia de <a href="#Game">Game</a>.</tt></dd></dl>
<dl><dt><a name="GUI-callback"><strong>callback</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Se encarga de gestionar las entrada de movimientos a partir de los clicks en el tablero. Diferencia entre el primer click para el origen, y el segundo para el destino.<br>
Seguidamente construye el movimiento en formato string y lo envia para que se procese.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game">Game</a>.realizarMovimiento(self, play)<br>
- <a href="#GUI-actualizar">actualizar</a>(self)<br>
- <a href="#GUI-ponerEstado2">ponerEstado2</a>(self, texto)<br>
- <a href="#GUI-show_endgame">show_endgame</a>(self, winner)<br>
OBJETOS:<br>
- Se trabaja con el atributo game que contiene una instancia de <a href="#Game">Game</a>.</tt></dd></dl>
<dl><dt><a name="GUI-click"><strong>click</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Se encarga de cerrar el dialogo de ayuda cuando se pulsa uno de los botones destinados a ello.</tt></dd></dl>
<dl><dt><a name="GUI-initconfig"><strong>initconfig</strong></a>(self)</dt><dd><tt>Se encarga de manejar el fichero de configuracion del juego. Si dicho fichero no existe, lo crea y lo establece con los valores predeterminados.<br>
El fichero de configuracion contiene los nombres de usuario y la plantilla de tablero.</tt></dd></dl>
<dl><dt><a name="GUI-initcontent"><strong>initcontent</strong></a>(self)</dt><dd><tt>Se encarga de iniciar todo el contenido principal de la ventana del programa: el tablero y los controles del juego que hay en la parte derecha.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-btn_send">btn_send</a>(self, widget, data=None)<br>
- <a href="#GUI-btn_undo">btn_undo</a>(self, widget, data=None)<br>
- <a href="#GUI-callback">callback</a>(self, widget, data=None)</tt></dd></dl>
<dl><dt><a name="GUI-initlist"><strong>initlist</strong></a>(self)</dt><dd><tt>Se encarga de iniciar la tabla donde se muestra la lista de movimientos de la partida actual.</tt></dd></dl>
<dl><dt><a name="GUI-initmenu"><strong>initmenu</strong></a>(self)</dt><dd><tt>Se encarga de iniciar el menu de opciones. Asigna atajos de teclado para cada opcion y de conectarlos con su funcion correspondiente.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-menu_new">menu_new</a>(self, widget, data=None)<br>
- <a href="#GUI-menu_save">menu_save</a>(self, widget, data=None)<br>
- <a href="#GUI-menu_load">menu_load</a>(self, widget, data=None)<br>
- <a href="#GUI-quit_program">quit_program</a>(self, widget=None, event=None, data=None)<br>
- <a href="#GUI-menu_preferences">menu_preferences</a>(self, widget, data=None)<br>
- <a href="#GUI-menu_contents">menu_contents</a>(self, widget, data=None)<br>
- <a href="#GUI-menu_about">menu_about</a>(self, widget, data=None)</tt></dd></dl>
<dl><dt><a name="GUI-initstatus"><strong>initstatus</strong></a>(self)</dt><dd><tt>Inicia la barra de estado.</tt></dd></dl>
<dl><dt><a name="GUI-menu_about"><strong>menu_about</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Muestra el dialogo con informacion sobre los autores.</tt></dd></dl>
<dl><dt><a name="GUI-menu_contents"><strong>menu_contents</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Muestra y construye el dialogo de ayuda.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-click">click</a>(self, widget, data=None)</tt></dd></dl>
<dl><dt><a name="GUI-menu_load"><strong>menu_load</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Muestra un dialogo para elegir un archivo que contenga una partida guardada. Accede al fichero que se elige en modo lectura.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-actualizar">actualizar</a>(self)<br>
- <a href="#GUI-add_filters">add_filters</a>(self, dialog)<br>
- <a href="#Game">Game</a>.realizarMovimientosFichero(self, fich)<br>
- <a href="#GUI-ponerEstado2">ponerEstado2</a>(self, texto)<br>
- <a href="#GUI-show_endgame">show_endgame</a>(self, winner)<br>
OBJETOS:<br>
- Se reinicializa el atributo game que contiene una instancia de <a href="#Game">Game</a>.</tt></dd></dl>
<dl><dt><a name="GUI-menu_new"><strong>menu_new</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Crea una nueva partida, si se pulsa la opcion del menu superior.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-actualizar">actualizar</a>(self)<br>
OBJETOS:<br>
- Se reinicializa el atributo game que contiene una instancia de <a href="#Game">Game</a></tt></dd></dl>
<dl><dt><a name="GUI-menu_preferences"><strong>menu_preferences</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Muestra y construye el menu de opciones del juego.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-actualizarconfig">actualizarconfig</a>(self)<br>
- <a href="#GUI-actualizar">actualizar</a>(self)</tt></dd></dl>
<dl><dt><a name="GUI-menu_save"><strong>menu_save</strong></a>(self, widget, data<font color="#909090">=None</font>)</dt><dd><tt>Muestra un menu para guardar la partida en un archivo. Accede al fichero que se elige en modo escritura.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-add_filters">add_filters</a>(self, dialog)</tt></dd></dl>
<dl><dt><a name="GUI-ponerEstado1"><strong>ponerEstado1</strong></a>(self, texto)</dt><dd><tt>Pone la informacion que recibe en el parametro texto en el estado de la izquierda.</tt></dd></dl>
<dl><dt><a name="GUI-ponerEstado2"><strong>ponerEstado2</strong></a>(self, texto)</dt><dd><tt>Pone la informacion que recibe en el parametro texto en el estado de la derecha.</tt></dd></dl>
<dl><dt><a name="GUI-quit_program"><strong>quit_program</strong></a>(self, widget<font color="#909090">=None</font>, event<font color="#909090">=None</font>, data<font color="#909090">=None</font>)</dt><dd><tt>Cierra el programa.</tt></dd></dl>
<dl><dt><a name="GUI-show_endgame"><strong>show_endgame</strong></a>(self, winner)</dt><dd><tt>Hace aparecer un dialogo al final de la partida que muestra el ganador y pregunta si se desea reiniciar el juego.<br>
Si se reinicia el juego, se inicializa una nueva instancia de <a href="#Game">Game</a>, que se guarda sobre el mismo atributo que albergaba la anterior instancia.<br>
Si no se reinicia el juego se cierra el programa.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#GUI-actualizar">actualizar</a>(self)<br>
- <a href="#GUI-quit_program">quit_program</a>(self, widget=None, event=None, data=None)<br>
OBJETOS:<br>
- Se reinicializa el atributo game que contiene una instancia de <a href="#Game">Game</a>.</tt></dd></dl>
</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom> <br>
<font color="#000000" face="helvetica, arial"><a name="Game">class <strong>Game</strong></a></font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
<td colspan=2><tt>Esta clase se encarga de controlar las reglas del juego.<br> </tt></td></tr>
<tr><td> </td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="Game-__init__"><strong>__init__</strong></a>(self)</dt><dd><tt>Inicializa las instancias de esta clase.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game-initTablero">initTablero</a>(self)</tt></dd></dl>
<dl><dt><a name="Game-contar_fichas"><strong>contar_fichas</strong></a>(self)</dt><dd><tt>Cuenta las fichas restantes de cada jugador.<br>
RETORNOS:<br>
- fblancas: numero de fichas blancas restantes.<br>
- fnegras: numero de fichas negras restantes.</tt></dd></dl>
<dl><dt><a name="Game-deshacer_movimiento"><strong>deshacer_movimiento</strong></a>(self, tablero, pila)</dt><dd><tt>Se encarga de deshacer el ultimo movimiento que hay en la pila.</tt></dd></dl>
<dl><dt><a name="Game-explorar"><strong>explorar</strong></a>(self, tablero, f0, c0, turno, pila)</dt><dd><tt>Se encarga de explorar las 4 diagonales alrededor en busca de nuevas capturas.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game-verificar_jugada">verificar_jugada</a>(self, tablero, turno, jugada)<br>
- <a href="#Game-hacer_movimiento">hacer_movimiento</a>(self, tablero, pila)<br>
- <a href="#Game-explorar">explorar</a>(self, tablero, f0, c0, turno, pila) RECURSIVIDAD<br>
- <a href="#Game-deshacer_movimiento">deshacer_movimiento</a>(self, tablero, pila)<br>
RETORNOS:<br>
- (nmax,fmax,cmax): una tupla con informacion sobre el camino que mas fichas opuestas elimina.</tt></dd></dl>
<dl><dt><a name="Game-getMoves"><strong>getMoves</strong></a>(self)</dt><dd><tt>Devuelve la lista de movimientos realizados durante la partida actual.<br>
RETORNOS:<br>
- self.<strong>moves</strong></tt></dd></dl>
<dl><dt><a name="Game-getTablero"><strong>getTablero</strong></a>(self)</dt><dd><tt>Devuelve el tabero interno.<br>
RETORNOS:<br>
- self.<strong>tablero</strong></tt></dd></dl>
<dl><dt><a name="Game-hacer_movimiento"><strong>hacer_movimiento</strong></a>(self, tablero, jugada, pila)</dt><dd><tt>Se encarga de realizar un movimiento de ficha, detectando promocion a reina y captura<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game-signo">signo</a>(self, x)<br>
RETORNOS:<br>
- captura: valor logico.</tt></dd></dl>
<dl><dt><a name="Game-initTablero"><strong>initTablero</strong></a>(self)</dt><dd><tt>Inicializa el tablero interno del programa.<br>
RETORNOS:<br>
- tab: contiene el tablero interno del programa.</tt></dd></dl>
<dl><dt><a name="Game-jugar"><strong>jugar</strong></a>(self, tablero, jugada, turno, pila)</dt><dd><tt>Se encarga de buscar nuevas posibles capturas en caso de que ya se haya producido una.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game-explorar">explorar</a>(self, tablero, f0, c0, turno, pila)<br>
- <a href="#Game-jugar">jugar</a>(self, tablero, jugada, turno, pila) RECURSIVIDAD</tt></dd></dl>
<dl><dt><a name="Game-num_piezas"><strong>num_piezas</strong></a>(self, tablero, turno)</dt><dd><tt>Cuenta las fichas restantes del jugador opuesto.<br>
RETORNOS:<br>
- n: numero de fichas del jugador opuesto</tt></dd></dl>
<dl><dt><a name="Game-realizarMovimiento"><strong>realizarMovimiento</strong></a>(self, play)</dt><dd><tt>Se encarga de procesar una jugada que recibe en el parametro play.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game-verificar_jugada">verificar_jugada</a>(self, tablero, turno, jugada)<br>
- <a href="#Game-jugar">jugar</a>(self, tablero, jugada, turno, pila)<br>
- <a href="#Game-num_piezas">num_piezas</a>(self, tablero, turno)<br>
RETORNOS:<br>
- Devuelve un string que puede contener incidencias de la partida.</tt></dd></dl>
<dl><dt><a name="Game-realizarMovimientosFichero"><strong>realizarMovimientosFichero</strong></a>(self, fich)</dt><dd><tt>Se encarga de realizar los movimientos que se indican desde un fichero con una partida guardada.<br>
Es capaz de detectar errores en el fichero, su existencia, o si la partida guardada llega a su fin. Estos escenarios solo pueden darse si se fuerza en el propio fichero.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game-verificar_jugada">verificar_jugada</a>(self, tablero, turno, jugada)<br>
- <a href="#Game-jugar">jugar</a>(self, tablero, jugada, turno, pila)<br>
RETORNOS:<br>
- endgame: string que contiene incidencias sobre el fichero (si esta corrupto o si hay fin de partida).</tt></dd></dl>
<dl><dt><a name="Game-signo"><strong>signo</strong></a>(self, x)</dt><dd><tt>Devuelve 0, 1 o -1 en funcion del parametro x.<br>
RETORNOS:<br>
- 1 si x es positivo<br>
- -1 si x es negativo<br>
- 0 si x es 0</tt></dd></dl>
<dl><dt><a name="Game-verificar_jugada"><strong>verificar_jugada</strong></a>(self, tablero, turno, jugada)</dt><dd><tt>Comprueba si la jugada puede realizarse o no.<br>
LLAMADAS A PROCEDIMIENTOS:<br>
- <a href="#Game-signo">signo</a>(self, x)<br>
RETORNOS:<br>
- Un entero. Puede referirse al indice de la lista MSG_STATUS. Ver codigo para mas informacion.</tt></dd></dl>
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#55aa55">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
<tr><td bgcolor="#55aa55"><tt> </tt></td><td> </td>
<td width="100%"><strong>__author__</strong> = 'Rafael Sillero <rafael.silnav[at]gmail.com><font color="#c040c0">\n</font>Luis Alberto Centeno <luiscbr92[at]gmail.com>'<br>
<strong>__date__</strong> = '26 de Mayo 2014'<br>
<strong>__version__</strong> = '1.0'<br>
<strong>pila</strong> = []</td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#7799ee">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Author</strong></big></font></td></tr>
<tr><td bgcolor="#7799ee"><tt> </tt></td><td> </td>
<td width="100%">Rafael Sillero <rafael.silnav[at]gmail.com><br>
Luis Alberto Centeno <luiscbr92[at]gmail.com></td></tr></table>
</body></html>