Professional Documents
Culture Documents
ANEXO
Tesis para optar por el Título de Ingeniero Informático, que presenta el bachiller:
i
Índice de Contenido
1. Anexos ............................................................................................................................. 1
1.1. RUP (Rational Unified Process) .................................................................................. 2
1.1.1. Fases de RUP a desarrollar en el proyecto ............................................................ 3
1.1.2. Flujos de trabajo a realizar en el proyecto .............................................................. 4
1.1.3. Objetivos de cada iteración en el proyecto ............................................................. 5
1.2. UML.............................................................................................................................. 7
1.3. Lenguajes de Programación........................................................................................ 9
1.4. Base de Datos ........................................................................................................... 11
1.5. Arquitectura Cliente – Servidor.................................................................................. 13
1.5.1. Capas .................................................................................................................... 14
1.6. Requerimientos.......................................................................................................... 15
1.6.1. Módulo de Administración de Torneos.................................................................. 15
1.6.2. Módulo de Administración de Partidas.................................................................. 17
1.6.3. Características Generales del Sistema ................................................................. 18
1.7. Modelos de Casos de Uso......................................................................................... 20
1.7.1. Caso de Uso de Administración de torneos .......................................................... 20
1.7.2. Caso de Uso de Partidas....................................................................................... 22
1.8. Especificación de Casos de Uso ............................................................................... 24
1.8.1. Mantenimiento de Jugadores ................................................................................ 25
1.8.2. Mantenimiento de Torneo...................................................................................... 27
1.8.3. Mantenimiento de Divisiones................................................................................. 29
1.8.4. Buscar Jugadores.................................................................................................. 30
1.8.5. Elegir División........................................................................................................ 31
1.8.6. Generar Emparejamientos .................................................................................... 32
1.8.7. Inscribir Jugadores a División................................................................................ 34
1.8.8. Ingresar Resultados .............................................................................................. 36
1.8.9. Calcular ELO ......................................................................................................... 37
1.8.10. Generar Reportes de Torneo ............................................................................ 39
1.8.11. Comentar Partidas ............................................................................................ 40
1.8.12. Aprender Jugadas Básicas ............................................................................... 41
1.8.13. Buscar Partida................................................................................................... 43
1.8.14. Generar Reporte de Partida.............................................................................. 45
1.8.15. Leer Movimientos de Partida ............................................................................ 46
1.8.16. Ingresar Nueva Partida ..................................................................................... 48
1.9. Diagrama de Secuencias........................................................................................... 50
1.9.1. Crear un Torneo .................................................................................................... 50
1.9.2. Crear y Editar División de Torneo ......................................................................... 51
1.9.3. Agregar e Inscribir Jugadores a Torneo................................................................ 52
1.9.4. Emparejar Jugadores ............................................................................................ 53
1.9.5. Registrar Resultados de Encuentros Jugados ...................................................... 54
1.9.6. Ingresar Partidas al Sistema ................................................................................. 55
1.9.7. Buscar y Leer Partidas del Sistema ...................................................................... 56
1.9.8. Calcular ELO de jugador en torneo....................................................................... 57
1.10. Diagrama de Clases .................................................................................................. 58
1.10.1. Crear Torneo ..................................................................................................... 58
1.10.2. Agregar Jugadores al Sistema.......................................................................... 59
1.10.3. Inscribir Jugador a División de Torneo ............................................................. 60
1.10.4. Crear División de Torneo .................................................................................. 61
1.10.5. Emparejamientos de Jugadores ....................................................................... 62
1.10.6. Registrar Resultados de Enfrentamientos ........................................................ 64
1.10.7. Ingresar Partidas............................................................................................... 66
1.10.8. Leer movimientos de Partidas........................................................................... 68
1.10.9. Calcular ELO ..................................................................................................... 69
1.11. Especificaciones de Diagramas de Clase ................................................................. 70
1.11.1. Clase ButtonListener......................................................................................... 70
1.11.2. Clase ButtonSgteListener ................................................................................. 71
1.11.3. Clase DivisionTorneo ........................................................................................ 72
ii
1.11.4. Clase Grupo ...................................................................................................... 72
1.11.5. Clase Jugador ................................................................................................... 73
1.11.6. Clase JugadorxDivision..................................................................................... 73
1.11.7. Clase JugadorxELO .......................................................................................... 74
1.11.8. Clase JugadorxFechas ..................................................................................... 74
1.11.9. Clase ManejadordeLectura ............................................................................... 75
1.11.10. Clase ManejadordePiezas ................................................................................ 75
1.11.11. Clase ManejadordeTablero............................................................................... 76
1.11.12. Clase Partida..................................................................................................... 77
1.11.13. Clase Pieza (Abstracta) .................................................................................... 78
1.11.14. Clase TipoTorneo.............................................................................................. 78
1.11.15. Clase Torneo..................................................................................................... 79
1.12. Diseño del modelo físico de datos............................................................................. 80
1.13. Diseño de Interfaz Gráfica ......................................................................................... 82
1.13.1. Ventana de Inicio de Sistema ........................................................................... 82
1.13.2. Ventana de Ingreso de Partidas........................................................................ 83
1.13.3. Ventana de Lectura de Partidas ....................................................................... 84
1.13.4. Ventana de Ingreso de nuevos Jugadores ....................................................... 85
1.13.5. Ventana de Inscripción de jugadores a división de torneo ............................... 86
1.13.6. Ventana de Creación de Torneos ..................................................................... 87
1.13.7. Ventana de Administración de Torneos............................................................ 88
1.13.8. Ventana de Creación de División de Torneo .................................................... 89
1.13.9. Ventana de Resultados de Torneo ................................................................... 90
1.13.10. Ventana de Registro de Resultados ................................................................. 91
1.13.11. Ventana de Búsqueda de Partidas ................................................................... 92
1.13.12. Ventana de Edición de Partidas....................................................................... 93
1.13.13. Ventana de Selección de Jugador .................................................................... 94
1.13.14. Ventana de Edición de Jugadores .................................................................... 95
1.13.15. Ventana de Selección de Torneo...................................................................... 96
1.13.16. Ventana de Edición de Torneo.......................................................................... 97
1.13.17. Ventana de Cálculo de ELO en Torneo ............................................................ 98
1.13.18. Ventana de Cálculo de ELO FIDE .................................................................... 99
1.14. Estrategia de Planificación de Pruebas ................................................................... 100
1.15. Casos de Prueba ..................................................................................................... 101
Tabla 69. Casos de Uso a ser probados............................................................................... 102
1.16. Ejecución de Pruebas .............................................................................................. 103
1.16.1. Mantenimiento de torneos............................................................................... 103
1.16.2. Mantenimiento de divisiones de torneo .......................................................... 107
1.16.3. Mantenimiento de jugadores........................................................................... 110
1.16.4. Ingreso de Jugadores a División de Torneo ................................................... 113
1.16.5. Emparejamiento de Jugadores ....................................................................... 117
1.16.6. Ingresar Resultados de Emparejamientos...................................................... 131
1.16.7. Ingresar partidas de los enfrentamientos generados por sistema................. 133
1.16.8. Calcular ELO de jugador................................................................................. 137
1.16.9. Buscar Jugadores ........................................................................................... 143
1.16.10. Buscar Partidas ............................................................................................... 146
1.16.11. Buscar Torneos ............................................................................................... 148
1.16.12. Ingresar Nuevas Partidas................................................................................ 150
1.16.13. Comentar Partidas .......................................................................................... 156
1.16.14. Leer Movimientos de Partida .......................................................................... 159
1.16.15. Generar Reportes de Partida .......................................................................... 164
1.16.16. Pruebas de Caso de Uso: Generar Reportes de Torneo .............................. 167
1.16.17. Pruebas de Caso de Uso: Mostrar Movimientos de Piezas ........................... 170
1.17. Sistema de Desempate de Torneos ........................................................................ 176
1.17.1. Mediana........................................................................................................... 177
1.17.2. Solkoff ............................................................................................................. 177
1.17.3. Acumulativo..................................................................................................... 178
1.18. Cálculo del ELO en un torneo.................................................................................. 179
1.18.1. Primer Caso .................................................................................................... 179
1.18.2. Segundo Caso ................................................................................................ 179
1.18.3. Tercer Caso..................................................................................................... 180
iii
1.19. Entrada de un Jugador en la lista de ELO FIDE ..................................................... 181
1.20. Sistema de Rating FIDE .......................................................................................... 182
1.21. Herramientas de construcción de Software............................................................. 184
1.21.1. Software de Construcción ............................................................................... 184
1.21.2. Librerías utilizadas en Construcción ............................................................... 185
1.22. Instalación y Ejecución del Sistema ........................................................................ 186
1.23. Descripción de menús del Sistema ......................................................................... 187
1.23.1. Menú Inicio del Sistema .................................................................................. 187
1.23.2. Menú Partidas del Sistema ............................................................................. 188
1.23.3. Menú ELO del Sistema ................................................................................... 189
1.24. Descripción de funcionalidades del Sistema ........................................................... 190
1.24.1. Crear nuevo Torneo ........................................................................................ 190
1.24.2. Crear nuevo Jugador ...................................................................................... 190
1.24.3. Inscribir jugador a división de torneo .............................................................. 191
1.24.4. Crear Nueva División de torneo ...................................................................... 191
1.24.5. Emparejar jugadores....................................................................................... 192
1.24.6. Ingresar Resultados de Enfrentamientos........................................................ 192
1.24.7. Registrar Partidas ........................................................................................... 193
1.24.8. Reproducir Partidas ........................................................................................ 193
1.24.9. Calcular ELO de Jugador en torneo ............................................................... 194
1.24.10. Calcular ELO FIDE de Jugador....................................................................... 194
1.25. Algoritmo de emparejamiento de un torneo tipo suizo ............................................ 195
1.25.1. La función emparejarSegunGrupos ................................................................ 196
1.25.2. La función emparejarDentrodeGrupo ............................................................. 198
1.25.3. La función proponerRivales ............................................................................ 200
1.25.4. La función llenarMatrizPareos......................................................................... 202
1.25.5. La función dameMatrizdeRivales .................................................................... 203
1.26. Optimización del algoritmo de Sistema Suizo ......................................................... 204
1.27. Procedimiento FIDE................................................................................................. 204
1.28. Procedimiento Optimizado....................................................................................... 205
iv
Índice de Imágenes
Figura 1. Modelo Cliente-Servidor con tres capas. ................................................................. 13
Figura 2. Caso de uso Administración de torneos .................................................................. 20
Figura 3. Caso de uso de Partidas .......................................................................................... 22
Figura 4. Diagrama de Secuencia “Crear un Torneo” ............................................................. 50
Figura 5. Diagrama de Secuencia “Agregar y Editar División de Torneo” .............................. 51
Figura 6. Diagrama de Secuencia “Agregar Jugadores a Torneo”. ........................................ 52
Figura 7. Diagrama de Secuencia “Emparejar Jugadores” ..................................................... 53
Figura 8. Diagrama de Secuencia “Ingresar Resultados de Encuentros Jugados” ................ 54
Figura 9. Diagrama de Secuencia “Ingresar Partidas al Sistema” .......................................... 55
Figura 10. Diagrama de Secuencia “Buscar y Leer Partidas del Sistema”. ............................ 56
Figura 11. Diagrama de Secuencia “Calcular ELO de Jugador”............................................. 57
Figura 12. Diagrama de clases “Creación de torneo” ............................................................. 58
Figura 13. Diagrama de clases “Agregar Jugadores al Sistema” .......................................... 59
Figura 14. Diagrama de clases “Inscribir Jugador a División de Torneo” ............................... 60
Figura 15. Diagrama de clases “Creación de División de Torneo” ......................................... 61
Figura 16. Diagrama de clases “Emparejamiento de Jugadores”........................................... 62
Figura 17. Diagrama de clases “Ingreso de Resultados” ........................................................ 64
Figura 18. Diagrama de clases “Ingreso de Partidas”............................................................. 66
Figura 19. Diagrama de clases “Lectura de Partidas”............................................................. 68
Figura 20. Diagrama de clases “Cálculo de ELO”................................................................... 69
Figura 21. Modelo físico de la base de datos......................................................................... 80
Figura 22. Pantalla de inicio de Sistema ................................................................................. 82
Figura 23. Pantalla de Ingreso de partidas con vista de la pestaña “Jugadas”. ..................... 83
Figura 24. Pantalla de Lectura de partidas de ajedrez............................................................ 84
Figura 25. Pantalla de Ingreso de nuevos jugadores.............................................................. 85
Figura 26. Pantalla de Asignación de jugadores a división de torneo .................................... 86
Figura 27. Pantalla de Ingreso de nuevo torneo ..................................................................... 87
Figura 28. Pantalla principal de administración de torneos .................................................... 88
Figura 29. Pantalla de creación de nueva división en torneo ................................................. 89
Figura 30. Pantalla de registro de resultados por división de torneo ...................................... 90
Figura 31. Pantalla de emparejamientos y registro de resultados por ronda. ........................ 91
Figura 32. Pantalla de “Búsqueda de Partidas” ...................................................................... 92
Figura 33. Pantalla de “Edición de Partidas”........................................................................... 93
Figura 34. Pantalla de “Elección de Jugador” ......................................................................... 94
Figura 35. Pantalla de “Edición de Jugadores” ....................................................................... 95
Figura 36. Pantalla de Elección de torneo ............................................................................. 96
Figura 37. Pantalla de Edición de torneo ................................................................................ 97
Figura 38. Pantalla de Cálculo de ELO en Torneo.................................................................. 98
Figura 39. Pantalla de Cálculo de ELO FIDE.......................................................................... 99
Figura 40. Datos de Ingreso de nuevo torneo....................................................................... 103
Figura 41. Mensaje de éxito de operación. ........................................................................... 103
Figura 42. El registro “torneo de prueba 1” se muestra en la grilla Registros Abiertos. ....... 103
Figura 43. Datos de ingreso de nuevo torneo. ...................................................................... 104
Figura 44. Mensaje informativo del sistema.......................................................................... 104
Figura 45. Se ingresan datos de nuevo torneo. .................................................................... 104
Figura 46. Mensaje informativo del sistema.......................................................................... 104
Figura 47. Se selecciona registro “torneo de prueba 1” ........................................................ 104
Figura 48. Se muestra el detalle del registro seleccionado .................................................. 104
Figura 49. Se presiona el botón “Editar Torneo”. .................................................................. 105
Figura 50. Se carga el detalle del registro “torneo de prueba 1” para ser editado. .............. 105
Figura 51. Se actualiza el nombre del torneo........................................................................ 105
Figura 52. Mensaje de operación exitosa. ............................................................................ 105
Figura 53. Se muestra el registro actualizado en la grilla Registros Abiertos....................... 105
Figura 54. Se elimina el nombre del torneo. ......................................................................... 105
Figura 55. Mensaje informativo del sistema.......................................................................... 105
Figura 56. No se selecciona ningún registro. ........................................................................ 106
Figura 57. Mensaje informativo del sistema.......................................................................... 106
Figura 58. Se selecciona registro a eliminar. ........................................................................ 106
v
Figura 59. Mensaje de confirmación del sistema. ................................................................. 106
Figura 60. El registro “torneo de prueba Edición” ha sido eliminado. ................................... 106
Figura 61. Se ingresan datos de nueva división de torneo. .................................................. 107
Figura 62. Mensaje de operación exitosa. ............................................................................ 107
Figura 63. Se crea una nueva hoja en el árbol “Vista de Torneo”. ....................................... 107
Figura 64. Se ingresan datos de nueva división sin determinar su nombre. ........................ 107
Figura 65. Mensaje informativo del sistema.......................................................................... 107
Figura 66. Se selecciona una división de torneo................................................................... 108
Figura 67. Se muestran los datos de la división a editar. ..................................................... 108
Figura 68. Se ingresa a ventana de Edición de División eligiendo una división. .................. 108
Figura 69. Mensaje informativo del sistema.......................................................................... 108
Figura 70. Se ingresa a ventana de Edición de División eligiendo una división. .................. 108
Figura 71. Se muestra la ventana “Actualizar División de Torneo”....................................... 108
Figura 72. Se cambia el nombre de la división a “División Única”. ....................................... 109
Figura 73. Mensaje informativo del sistema.......................................................................... 109
Figura 74. Se muestra la actualización del registro en el panel “Datos de División”. ........... 109
Figura 75. El registro Iniciado muestra “SI”. Se inició división. ............................................. 109
Figura 76. Mensaje informativo del sistema.......................................................................... 109
Figura 77. Presionar botón “Agregar Jugadores”.................................................................. 110
Figura 78. Se muestra la ventana “Inscribir Jugadores”. ...................................................... 110
Figura 79. No se ingresa el apellido paterno......................................................................... 110
Figura 80. Mensaje informativo de sistema........................................................................... 110
Figura 81. Información de nuevo jugador sin determinar nombre. ....................................... 111
Figura 82. Mensaje informativo de sistema........................................................................... 111
Figura 83. Se ingresa todos los datos pedidos para crear un nuevo jugador....................... 111
Figura 84. Mensaje de operación exitosa. ............................................................................ 111
Figura 85. Una vez creado el jugador, se busca y se encuentra el registro. ........................ 111
Figura 86. Se presiona el botón “Actualizar datos”. .............................................................. 111
Figura 87. Se muestra pestaña “Ingresar Jugadores”........................................................... 111
Figura 88. Se edita el ELO del jugador seleccionado de 1000 a 2250. ................................ 112
Figura 89. Mensaje de operación exitosa. ............................................................................ 112
Figura 90. Se busca el registro editado y se comprueba actualización. ............................... 112
Figura 91. Se edita información de jugador eliminado su apellido paterno. ......................... 112
Figura 92. Mensaje informativo del sistema.......................................................................... 112
Figura 93. Se presiona el botón “Agregar Jugadores”. ......................................................... 113
Figura 94. Se muestra la ventana “Inscribir Jugadores”. ...................................................... 113
Figura 95. Se seleccionan jugadores a ser inscritos............................................................. 114
Figura 96. Se muestra a los jugadores seleccionados con signo de aprobación. ................ 114
Figura 97. Se inscriben jugadores seleccionados a la división “División Única”. ................ 114
Figura 98. Mensaje de operación exitosa. ............................................................................ 114
Figura 99. Se muestra en árbol “Vista de Torneo” a los jugadores inscritos. ...................... 114
Figura 100. Se inscriben nuevamente a jugadores registrados............................................ 115
Figura 101. El árbol “Vista de Torneo” muestra a los jugadores registrados........................ 115
Figura 102. Se presiona botón “Eliminar Jugador”................................................................ 115
Figura 103. Mensaje informativo del sistema........................................................................ 115
Figura 104. Se selecciona el registro a eliminar. .................................................................. 115
Figura 105. Se procede a eliminar al jugador de identificador 33......................................... 116
Figura 106. Mensaje de confirmación del sistema. ............................................................... 115
Figura 107. Se muestra en árbol que el jugador “colonia, billy” ha sido eliminado............... 116
Figura 108. Previamente se procede a emparejar la siguiente ronda”. ................................ 116
Figura 109. Después se procede a eliminar a jugador de la división ya iniciada. ............... 116
Figura 110. Mensaje de advertencia del sistema.................................................................. 116
Figura 111. Se presiona botón “Ingresar Resultados”. ......................................................... 117
Figura 112. Se muestra la ventana “Resultados de torneo”. ................................................ 117
Figura 113. Se presiona botón “Siguiente” sin jugadores. .................................................... 117
Figura 114. Mensaje de advertencia del sistema.................................................................. 117
Figura 115. Jugadores inscritos antes de emparejar la primera ronda................................. 118
Figura 116. Se asigna en la primera ronda un identificador a cada jugador inscrito. ........... 118
Figura 117. Se activa botón que muestra ventana de ingreso de resultados de la ronda.... 118
Figura 118. Se presiona botón “Siguiente” sin ingresar todos los resultados de la ronda.... 118
Figura 119. Mensaje de advertencia del sistema.................................................................. 118
vi
Figura 120. Se presiona botón “Siguiente” habiendo concluido el torneo. ........................... 119
Figura 121. Mensaje de advertencia del sistema.................................................................. 119
Figura 122. Se presiona botón “Siguiente” para emparejamientos de ronda uno. ............... 119
Figura 123. Listado de emparejamientos de jugadores de la ronda uno. ............................ 119
Figura 124. Tabla de posiciones después de la ronda 1....................................................... 120
Figura 125. Listado de emparejamientos de jugadores de la ronda dos. ............................ 120
Figura 126. Tabla de posiciones después de la ronda 2....................................................... 121
Figura 127. Listado de emparejamientos de jugadores de la ronda tres. ............................ 121
Figura 128. Tabla de posiciones después de la ronda 3....................................................... 122
Figura 129. Listado de emparejamientos de jugadores de la ronda cuatro......................... 122
Figura 130. Tabla de posiciones después de la ronda 4....................................................... 123
Figura 131. Listado de emparejamientos de jugadores de la ronda cinco........................... 123
Figura 132. Tabla de resultados de las primeras cuatro rondas........................................... 123
Figura 133. Tabla de posiciones después de la ronda 5....................................................... 124
Figura 134. Tabla de desempate que ubica al jugador 6 en el primer lugar......................... 124
Figura 135. Se presiona botón “Siguiente” para emparejamientos de ronda uno. ............... 124
Figura 136. Listado de emparejamientos de jugadores de la ronda uno. ............................ 124
Figura 137. Tabla de posiciones después de la ronda 1....................................................... 125
Figura 138. Listado de emparejamientos de jugadores de la ronda dos. ............................ 125
Figura 139. Tabla de posiciones después de la ronda 2....................................................... 126
Figura 140. Listado de emparejamientos de jugadores de la ronda tres. ............................ 126
Figura 141. Tabla de posiciones después de la ronda 3....................................................... 127
Figura 142. Tabla de desempate que ubica al jugador 1 en el primer lugar......................... 127
Figura 143. Se presiona botón “Siguiente”............................................................................ 127
Figura 144. Mensaje informativo del sistema........................................................................ 127
Figura 145. Se intenta emparejar con tres jugadores inscritos............................................. 128
Figura 146. Mensaje informativo del sistema........................................................................ 128
Figura 147. Se inicia torneo con cinco jugadores. ................................................................ 128
Figura 148. Se asigna identificador y los rivales para todas las rondas. .............................. 128
Figura 149. Se inicia torneo con seis jugadores. .................................................................. 128
Figura 150. Se asigna identificador y los rivales para todas las rondas. .............................. 128
Figura 151. Se inicia torneo sin inscribir jugadores............................................................... 129
Figura 152. Mensaje informativo del sistema........................................................................ 129
Figura 153. Se intenta emparejar con un jugador inscrito. ................................................... 129
Figura 154. Mensaje informativo del sistema........................................................................ 129
Figura 155. Se inicia torneo con cinco jugadores. ................................................................ 130
Figura 156. Se asigna identificador y los rivales para todas las rondas. .............................. 130
Figura 157. Se inicia torneo con seis jugadores. .................................................................. 130
Figura 158. Se asigna identificador y los rivales para todas las rondas. .............................. 130
Figura 159. Presionar botón “Ingresar Resultados”. ............................................................. 131
Figura 160. Se muestra ventana “Resultados de Torneo”. ................................................... 131
Figura 161. Se presiona el botón “R1” para ingreso de resultados. .................................... 131
Figura 162. Se muestra ventana “Registrar Resultados” para la ronda uno......................... 131
Figura 163. Sistema muestra lista de enfrentamientos de una ronda................................... 132
Figura 164. Se procede a ingresar resultados de una ronda................................................ 132
Figura 165. Se muestran los resultados registrados............................................................. 132
Figura 166. Se reingresan resultados de las partidas........................................................... 132
Figura 167. Se oprime botón “R1” para ingresar resultados............................................... 132
Figura 168. El botón “Guardar” aparece deshabilitado. ........................................................ 132
Figura 169. Presionar botón “Ingresar Resultados”. ............................................................. 133
Figura 170. Se muestra ventana “Resultados de Torneo”. ................................................... 133
Figura 171. Se presiona el botón “R1” para ingreso de resultados ..................................... 133
Figura 172. Se muestra ventana “Registrar Resultados” para la ronda uno......................... 133
Figura 173. Presionar botón “Registrar Partida”. .................................................................. 134
Figura 174. Se muestra ventana de ingreso de partidas. ..................................................... 134
Figura 175. Ingresar movimientos de una partida................................................................. 134
Figura 176. El sistema interpreta y registra el movimiento solicitado. .................................. 134
Figura 177. Ingresar de forma errónea un movimiento de una pieza. .................................. 135
Figura 178. El sistema reconoce el error y retrocede la jugada............................................ 135
Figura 179. Se elige enfrentamiento y se presiona botón “Ver Partida”. .............................. 135
Figura 180. Se muestra ventana “Lectura de Partida” con partida cargada. ........................ 135
vii
Figura 181. Se presiona botón “Avanzar”. ............................................................................ 136
Figura 182. Se reproducen las jugadas registradas de la partida......................................... 136
Figura 183. Presionar botón “Ingresar Resultados”. ............................................................. 137
Figura 184. Se muestra ventana “Resultados de Torneo”. ................................................... 137
Figura 185. Presionar botón “Calcular ELO” sin seleccionar jugador. .................................. 137
Figura 186. Mensaje de advertencia del sistema.................................................................. 137
Figura 187. Presionar botón “Calcular ELO” seleccionando un jugador............................... 138
Figura 188. Se muestra la ventana “Cálculo de ELO”........................................................... 138
Figura 189. Se obtiene ELO de oponentes de jugador y los puntos obtenidos................... 138
Figura 190. Se generan datos para cálculo de ELO. ............................................................ 139
Figura 191. Se obtiene ELO de oponentes de jugador y los puntos obtenidos................... 139
Figura 192. Se generan datos para cálculo de ELO. ............................................................ 139
Figura 193. Se elige opción “Calcular ELO” de menú ELO. ................................................. 140
Figura 194. Se muestra la ventana “Cálculo de ELO”........................................................... 140
Figura 195. Se obtiene ELO de oponentes de jugador y los puntos obtenidos................... 140
Figura 196. Se calcula el nuevo ELO.................................................................................... 140
Figura 197. Se obtiene ELO de oponentes de jugador y los puntos obtenidos................... 141
Figura 198. Se calcula el nuevo ELO.................................................................................... 141
Figura 199. Se elige opción “Calcular ELO” de menú ELO. ................................................. 141
Figura 200. Se muestra la ventana “Cálculo de ELO”........................................................... 142
Figura 201. Se ingresa ELO obtenido y partidas jugadas por torneo. .................................. 142
Figura 202. Se calcula el nuevo ELO FIDE........................................................................... 142
Figura 203. Se presiona botón “Agregar Jugadores” en “Administración de torneos”.......... 143
Figura 204. Se muestra la ventana “Inscribir Jugadores”. .................................................... 143
Figura 205. Se ingresa criterio de búsqueda. ....................................................................... 143
Figura 206. Se muestran registros que coinciden con el criterio ingresado. ........................ 143
Figura 207. Se ingresa criterio de búsqueda. ....................................................................... 144
Figura 208. Se muestra grilla vacía si ningún registro coincide con criterio ingresado. ....... 144
Figura 209. Se ingresa a la opción “Ingresar Partidas” de menú Partidas. .......................... 144
Figura 210. Se muestra la ventana de ingreso de partidas. ................................................. 144
Figura 211. Se presiona botón “…” que elige a jugador de piezas blancas de la partida. ... 145
Figura 212. Se muestra la ventana “Elegir Jugador”............................................................. 145
Figura 213. Se ingresa criterio de búsqueda. ....................................................................... 145
Figura 214. Se muestran registros que coinciden con el criterio ingresado. ........................ 145
Figura 215. Se ingresa criterio de búsqueda. ....................................................................... 145
Figura 216. Se muestra grilla vacía si ningún registro coincide con criterio ingresado. ....... 145
Figura 217. Se presiona botón “Buscar Partidas” de “Administración de torneos”............... 146
Figura 218. Se muestra la ventana “Buscar Partidas”. ......................................................... 146
Figura 219. Se ingresa criterio de búsqueda. ....................................................................... 146
Figura 220. Se muestran registros que coinciden con el criterio ingresado. ........................ 146
Figura 221. Se ingresa criterio de búsqueda. ....................................................................... 147
Figura 222. Se muestra grilla vacía si ningún registro coincide con criterio ingresado. ....... 147
Figura 223. Se ingresa a la opción “Ingresar Partidas” de menú Partidas. .......................... 148
Figura 224. Se muestra la ventana de ingreso de partidas. ................................................. 148
Figura 225. Se presiona botón “…” que elige torneo donde se desarrolla la partida. .......... 148
Figura 226. Se muestra la ventana “Elegir Jugador”............................................................. 148
Figura 227. Se ingresa criterio de búsqueda. ....................................................................... 149
Figura 228. Se muestran registros que coinciden con el criterio ingresado. ........................ 149
Figura 229. Se ingresa criterio de búsqueda. ....................................................................... 149
Figura 230. Se muestra grilla vacía si ningún registro coincide con criterio ingresado. ....... 149
Figura 231. Se ingresa a la opción “Ingresar Partidas” de menú Partidas. .......................... 150
Figura 232. Se muestra la ventana de ingreso de partidas. ................................................. 150
Figura 233. Se elige al alfil como la pieza a mover............................................................... 150
Figura 234. Se resaltan las casillas posibles de destino....................................................... 150
Figura 235. Se traslada el caballo a casilla resaltada. .......................................................... 151
Figura 236. El caballo es situado en su nueva posición. ...................................................... 151
Figura 237. Se mueve el peón a posición no válida.............................................................. 151
Figura 238. El peón es devuelto a su anterior posición. ....................................................... 151
Figura 239. Se elige mover al rey a la casilla g1................................................................... 151
Figura 240. El enroque corto es efectuado. .......................................................................... 151
Figura 241. Se elige mover al rey a la casilla c1................................................................... 152
viii
Figura 242. El enroque largo es efectuado. .......................................................................... 152
Figura 243. El peón negro va a tomar al caballo blanco....................................................... 152
Figura 244. El peón negro toma su nueva posición después de comer al caballo............... 152
Figura 245. El peón negro g7 se mueve a casilla g5. ........................................................... 152
Figura 246. El peón blanco h5 tomar el peón negro g5 y se ubica en la casilla g6............. 152
Figura 247. El peón blanco en casilla g7 avanza una casilla................................................ 153
Figura 248. El peón blanco llega a última fila y se convierte en dama. ................................ 153
Figura 249. Se mueve el peón de casilla a2 a a3. ................................................................ 153
Figura 250. Se registra el movimiento a3 en la jugada 9 ...................................................... 153
Figura 251. Se mueve peón a casilla a3. .............................................................................. 153
Figura 252. Se retrocede peón a casilla a2........................................................................... 153
Figura 253. Lista de notaciones previo al retroceso.............................................................. 154
Figura 254. Lista de notaciones después del retroceso........................................................ 154
Figura 255. No se elige al jugador de piezas blancas de la partida a registrar. ................... 154
Figura 256. Mensaje de advertencia del sistema.................................................................. 154
Figura 257. No se elige al jugador de piezas blancas de la partida a registrar. ................... 154
Figura 258. Mensaje de advertencia del sistema.................................................................. 154
Figura 259. No se ha realizado ninguna jugada de la partida a registrar. ............................ 155
Figura 260. Mensaje de advertencia del sistema.................................................................. 155
Figura 261. No se elige el torneo donde se realiza la partida a registrar.............................. 155
Figura 262. Mensaje de advertencia del sistema.................................................................. 155
Figura 263. Se eligen a los jugadores y al torneo de la partida a registrar........................... 155
Figura 264. Mensaje de operación exitosa. .......................................................................... 155
Figura 265. Se confirma el registro de la partida al buscar la partida en el sistema. ........... 155
Figura 266. Se ingresa a la opción “Ingresar Partidas” de menú Partidas. .......................... 156
Figura 267. Se muestra la ventana de ingreso de partidas. ................................................. 156
Figura 268. Se ingresa un comentario. ................................................................................. 156
Figura 269. Se registra y se muestra el comentario.............................................................. 156
Figura 270. Se elige la jugada y se ingresa el comentario. .................................................. 157
Figura 271. Se registra y se muestra el comentario.............................................................. 157
Figura 272. Se selecciona el registro de un comentario. ...................................................... 157
Figura 273. Se muestra el comentario completo seleccionado. ........................................... 157
Figura 274. Se ingresa nuevo comentario y se presiona botón “Ingresar Comentario”. ...... 158
Figura 275. Se actualiza el registro de comentarios. ............................................................ 158
Figura 276. Se ingresa a la opción “Leer Partidas” de menú Partidas. ................................ 159
Figura 277. Se muestra la ventana “Lectura de Partidas”. ................................................... 159
Figura 278. Se elige la pestaña “PGN”. ................................................................................ 159
Figura 279. Se activa el panel de la pestaña “PGN”. ............................................................ 159
Figura 280. Se ingresan los movimientos de una partida. .................................................... 160
Figura 281. Mensaje de operación exitosa. .......................................................................... 160
Figura 282. Se reproduce la partida de ajedrez según movimientos ingresados. ................ 160
Figura 283. Se ingresan los movimientos de una partida con comentarios. ........................ 161
Figura 284. Mensaje de operación exitosa. .......................................................................... 161
Figura 285. Se reproduce la partida de ajedrez según movimientos ingresados ................. 161
Figura 286. Se ingresan movimientos no válidos.................................................................. 161
Figura 287. No se carga la lista de los registros de las jugadas de la partida...................... 161
Figura 288. No se ingresa al jugador de piezas blancas de la partida. ................................ 161
Figura 289. Mensaje de advertencia del sistema.................................................................. 161
Figura 290. No se ingresa al jugador de piezas negras de la partida................................... 162
Figura 291. Mensaje de advertencia del sistema.................................................................. 162
Figura 292. Se intenta guardar partida sin ingresar movimientos......................................... 162
Figura 293. Mensaje de advertencia del sistema.................................................................. 162
Figura 294. No se ingresa el torneo de la partida. ................................................................ 162
Figura 295. Mensaje de advertencia del sistema.................................................................. 162
Figura 296. Se eligen a los jugadores y al torneo de la partida a registrar........................... 163
Figura 297. Mensaje de operación exitosa. .......................................................................... 163
Figura 298. Se confirma el registro de la partida al buscar la partida en el sistema. ........... 163
Figura 299. Se ingresa a la opción “Ingresar Partidas” de menú Partidas. .......................... 164
Figura 300. Se muestra ventana de ingreso de partidas. ..................................................... 164
Figura 301. Se realizan movimientos en el tablero. .............................................................. 164
Figura 302. Se genera la lista de notaciones de la partida. .................................................. 164
ix
Figura 303. Se presiona botón “Generar Reporte”................................................................ 165
Figura 304. Se genera un reporte con el detalle de la partida jugada. ................................ 165
Figura 305. Se ingresa a la opción “Leer Partidas” de menú Partidas. ................................ 165
Figura 306. Se carga ventana de lectura de partidas. .......................................................... 165
Figura 307. Se ingresan los movimientos de una partida ..................................................... 166
Figura 308. Se genera una partida........................................................................................ 166
Figura 309. Movimientos generados de la partida. ............................................................... 166
Figura 310. Reporte de partida generado. ............................................................................ 166
Figura 311. Se presiona botón “Ingresar Resultados”. ......................................................... 167
Figura 312. Se muestra la ventana “Resultados de Torneo”. ............................................... 167
Figura 313. Tabla de resultados generales de un torneo. .................................................... 168
Figura 314. Mensaje informativo del sistema........................................................................ 168
Figura 315. Reporte generado de torneo en una hoja de cálculo......................................... 168
Figura 316. Se presiona botón “Ingresar Resultados”. ......................................................... 168
Figura 317. Se muestra la ventana “Resultados de Torneo”. ............................................... 168
Figura 318. Se presiona el botón “R1” para ingreso de resultados ..................................... 169
Figura 319. Se muestra la ventana “Registrar Resultados” para la ronda uno.................... 169
Figura 320. Lista de enfrentamientos de jugadores en una ronda........................................ 169
Figura 321. Mensaje informativo del sistema........................................................................ 169
Figura 322. Reporte generado de torneo en una hoja de cálculo......................................... 169
Figura 324. Se selecciona opción Peón de menú Aprendizaje............................................. 170
Figura 325. Se muestra ventana con peones desplegados en tablero................................. 170
Figura 326. Se selecciona peón blanco de casilla c2. .......................................................... 170
Figura 327. Se ubica peón seleccionado en la casilla c4. .................................................... 170
Figura 328. Se selecciona opción Alfil de menú Aprendizaje. .............................................. 171
Figura 329. Se muestra ventana con alfiles desplegados en tablero. .................................. 171
Figura 330. Se selecciona alfil blanco de casilla f1............................................................... 171
Figura 331. Se ubica alfil seleccionado en la casilla a6. ....................................................... 171
Figura 332. Se selecciona opción Rey de menú Aprendizaje............................................... 172
Figura 333. Se muestra ventana con reyes desplegados en tablero.................................... 172
Figura 334. Se selecciona rey blanco de casilla d3. ............................................................. 172
Figura 335. Se ubica rey seleccionado en la casilla e4. ....................................................... 172
Figura 336. Se selecciona opción Torre de menú Aprendizaje. ........................................... 173
Figura 337. Se muestra ventana con torres desplegadas en tablero. .................................. 173
Figura 338. Se selecciona torre negra de casilla f6. ............................................................. 173
Figura 339. Se ubica torre seleccionada en la casilla f1. ...................................................... 173
Figura 340. Se selecciona opción Dama de menú Aprendizaje. .......................................... 174
Figura 341. Se muestra ventana con damas desplegadas en tablero.................................. 174
Figura 342. Se selecciona dama negra de casilla g1............................................................ 174
Figura 343. Se ubica dama seleccionada en la casilla e1. ................................................... 174
Figura 344. Se selecciona opción Caballo de menú Aprendizaje......................................... 175
Figura 345. Se muestra ventana con caballos desplegados en tablero. .............................. 175
Figura 346. Se selecciona caballo blanco de casilla d2........................................................ 175
Figura 347. Se ubica caballo seleccionado en la casilla e4.................................................. 175
Figura 348. Fórmula de ELO en caso lograr 50% de puntos posibles.................................. 179
Figura 349. Fórmula de ELO en caso lograr mas del 50% de puntos posibles.................... 179
Figura 350. Fórmula de ELO en caso lograr menos del 50% de puntos posibles................ 180
Figura 351. Fórmula para cálculo de ELO FIDE. .................................................................. 181
Figura 352. Menú Inicio del Sistema ..................................................................................... 187
Figura 353. Menú Partida del Sistema .................................................................................. 188
Figura 354. Menú ELO del Sistema ...................................................................................... 189
Figura 355. Pantalla de Ingreso de nuevo torneo ................................................................. 190
Figura 356. Pantalla de Ingreso de nuevos jugadores.......................................................... 190
Figura 357. Pantalla de Asignación de jugadores a división de torneo ................................ 191
Figura 358. Pantalla de creación de nueva división en torneo ............................................. 191
Figura 359. Pantalla de registro de resultados por división de torneo .................................. 192
Figura 360. Pantalla de emparejamientos y registro de resultados por fecha...................... 192
Figura 361. Pantalla de Ingreso de partidas con vista de la pestaña “Datos”. ..................... 193
Figura 362. Pantalla de Lectura de partidas de ajedrez........................................................ 193
Figura 363. Pantalla de Cálculo de ELO en torneo............................................................... 194
Figura 364. Pantalla de Cálculo de ELO FIDE...................................................................... 194
x
Índice de tablas
Tabla 1. Fases de RUP.......................................................................................................... 2
Tabla 2. Fases de RUP a desarrollar en el proyecto............................................................. 3
Tabla 3. Flujos de trabajo del proyecto.................................................................................. 4
Tabla 4. Objetivos por iteración del proyecto ........................................................................ 6
Tabla 5. Diagramas a utilizar en el Proyecto ......................................................................... 8
Tabla 6. Descripción de lenguajes de programación a elegir.............................................. 10
Tabla 7. Descripción de gestores de base de datos............................................................ 12
Tabla 8. Capas de Arquitectura ........................................................................................... 14
Tabla 9. Requerimientos del módulo de administración de torneo ..................................... 16
Tabla 10. Requerimientos del módulo de aprendizaje ........................................................ 17
Tabla 11. Requerimientos no funcionales del sistema ........................................................ 18
Tabla 12. Descripción de valores del criterio dificultad........................................................ 19
Tabla 13. Descripción de valores del criterio prioridad........................................................ 19
Tabla 14. Descripción de valores de tipo de torneo. ........................................................... 19
Tabla 15. Casos de Uso de Administración de torneo ........................................................ 21
Tabla 16. Casos de Uso de Administración de Partidas ..................................................... 23
Tabla 17. Especificación de Caso de Uso ........................................................................... 24
Tabla 18. Especificación de Caso de Uso: “Mantenimiento de Jugadores”........................ 26
Tabla 19. Especificación de Caso de Uso: “Mantenimiento de torneo”............................... 28
Tabla 20. Especificación de Caso de Uso: “Mantenimiento de Divisiones” ........................ 29
Tabla 21. Especificación de Caso de Uso: “Buscar Jugadores” ......................................... 30
Tabla 22. Especificación de Caso de Uso: “Elegir División”................................................ 31
Tabla 23. Especificación de Caso de Uso: “Generar Emparejamientos” ............................ 33
Tabla 24. Especificación de Caso de Uso: “Inscribir Jugadores a División” ....................... 35
Tabla 25. Especificación de Caso de Uso: “Ingresar Resultados” ...................................... 36
Tabla 26. Especificación de Caso de Uso: “Calcular ELO” ................................................. 38
Tabla 27. Especificación de Caso de Uso: “Generar Reporte de Torneo”.......................... 39
Tabla 28. Especificación de Caso de Uso: “Comentar Partidas” ........................................ 40
Tabla 29. Especificación de Caso de Uso: “Aprender Jugadas Básicas” ........................... 42
Tabla 30. Especificación de Caso de Uso: “Buscar Partida”............................................... 44
Tabla 31. Especificación de Caso de Uso: “Generar Reporte de Partida” .......................... 45
Tabla 32. Especificación de Caso de Uso: “Leer Movimientos de Partida” ........................ 47
Tabla 33. Especificación de Caso de Uso: “Ingresar Nueva Partidas”................................ 49
Tabla 34. Diccionario de datos de la clase ButtonListener.................................................. 70
Tabla 35. Diccionario de datos de la clase ButtonSgteListener. ......................................... 72
Tabla 36. Diccionario de datos de la clase DivisionTorneo................................................. 72
Tabla 37. Diccionario de datos de la clase Grupo. .............................................................. 72
Tabla 38. Diccionario de datos de la clase Jugador ............................................................ 73
Tabla 39. Diccionario de datos de la clase JugadorxDivision ............................................. 73
Tabla 40. Diccionario de datos de la clase JugadorxELO ................................................... 74
Tabla 41. Diccionario de datos de la clase JugadorxFechas. ............................................. 74
Tabla 42. Diccionario de datos de la clase ManejadordeLectura........................................ 75
Tabla 43. Diccionario de datos de la clase ManejadordePiezas ......................................... 75
Tabla 44. Diccionario de datos de la clase ManejadordeTablero........................................ 76
Tabla 45. Diccionario de datos de la clase Partida.............................................................. 77
Tabla 46. Diccionario de datos de la clase abstracta Pieza. ............................................... 78
Tabla 47. Diccionario de datos de la clase TipoTorneo....................................................... 78
Tabla 48. Diccionario de datos de la clase Torneo.............................................................. 79
Tabla 49. Descripción de las tablas del modelo físico de la base de datos. ...................... 81
Tabla 50. Características de la ventana “Inicio de sistema”................................................ 82
Tabla 51. Características de la ventana “Ingreso de Partidas” ........................................... 83
Tabla 52. Características de la ventana “Lectura de partidas”............................................ 84
Tabla 53. Características de la ventana “Ingreso de jugadores al sistema” ....................... 85
Tabla 54. Características de la ventana “Inscripción de jugadores”.................................... 86
Tabla 55. Características de la ventana “Creación de nuevo torneo” ................................. 87
Tabla 56. Características de la ventana “Administración de torneo”................................... 88
Tabla 57. Características de la ventana “Creación de división de torneo” .......................... 89
xi
Tabla 58. Características de la ventana “Resultados de división de torneos” .................... 90
Tabla 59. Características de la ventana “Registro de Resultados” ..................................... 91
Tabla 60. Características de la ventana “Búsqueda de Partidas” ....................................... 92
Tabla 61. Características de la ventana “Edición de Partidas”............................................ 93
Tabla 62. Características de la ventana “Elección de Partidas”.......................................... 94
Tabla 63. Características de la ventana “Edición de Jugador”............................................ 95
Tabla 64. Características de la ventana “Elección de Torneo”............................................ 96
Tabla 65. Características de la ventana “Edición de Torneo” ............................................. 97
Tabla 66. Características de la ventana “Cálculo de ELO en Torneo” ................................ 98
Tabla 67. Características de la ventana “Cálculo de ELO FIDE” ........................................ 99
Tabla 68. Formulario para ejecución de pruebas del sistema a cada caso de uso .......... 100
Tabla 69. Casos de Uso a ser probados ........................................................................... 102
Tabla 70. Pruebas de Caso de Uso: Mantenimiento de torneo......................................... 106
Tabla 71. Pruebas de Caso de Uso: Mantenimiento de divisiones de torneo................... 109
Tabla 72. Pruebas de Caso de Uso: Mantenimiento de jugadores ................................... 112
Tabla 73. Pruebas de Caso de Uso: Ingreso de jugadores a división de torneo .............. 116
Tabla 74. Pruebas de Caso de Uso: Emparejamiento de Jugadores ............................... 130
Tabla 75. Pruebas de Caso de Uso: Ingresar Resultados de Emparejamientos .............. 132
Tabla 76. Pruebas de Caso de Uso: Ingresar Partidas ..................................................... 136
Tabla 77. Pruebas de Caso de Uso: Calcular ELO de jugador ........................................ 142
Tabla 78. Pruebas de Caso de Uso: Buscar Jugadores ................................................... 145
Tabla 79. Pruebas de Caso de Uso: Buscar Partidas ....................................................... 147
Tabla 80. Pruebas de Caso de Uso: Buscar Torneos ....................................................... 149
Tabla 81. Pruebas de Caso de Uso: Ingresar Nuevas Partidas........................................ 155
Tabla 82. Pruebas de Caso de Uso: Comentar Partidas .................................................. 158
Tabla 83. Pruebas de Caso de Uso: Leer Movimientos de Partidas................................. 163
Tabla 84. Pruebas de Caso de Uso: Generar Reportes de Partida .................................. 166
Tabla 85. Pruebas de Caso de Uso: Generar Reportes de torneo ................................... 169
Tabla 86. Pruebas de Caso de Uso: Aprendizaje de Movimientos de Piezas .................. 175
Tabla 87. Sistemas de desempate .................................................................................... 176
Tabla 88. Tabla de Posiciones de torneo ficticio. .............................................................. 176
Tabla 89. Tabla para cálculo de Mediana de Billy, Coco, Danny y Erick. ......................... 177
Tabla 90. Tabla para cálculo de puntaje Solkoff de Billy, Danny y Erick........................... 178
Tabla 91. Tabla para cálculo de puntaje Acumulativo de Billy y Danny. ........................... 178
Tabla 92. Tabla de diferenciales para cálculo de ELO de jugadores principiantes........... 182
Tabla 93. Tabla de diferenciales para cálculo de jugadores experimentados. ................. 183
Tabla 94. Software utilizado en el proyecto....................................................................... 184
Tabla 95. Librerías utilizadas en el proyecto. .................................................................... 185
Tabla 96. Tabla de descripción del menú “Inicio”. ............................................................. 187
Tabla 97. Tabla de descripción del menú “Partidas” ......................................................... 188
Tabla 98. Tabla de descripción del menú “ELO”. .............................................................. 189
Tabla 99. Funciones de emparejamiento de Sistema Suizo ............................................. 195
Tabla 100. Función emparejarSegunGrupos..................................................................... 197
Tabla 101. emparejarDentrodeGrupo................................................................................ 199
Tabla 102. Función proponerRivales ................................................................................. 201
Tabla 103. Función llenarMatrizPareos ............................................................................. 202
Tabla 104. Función dameMatrizdeRivales ........................................................................ 203
Tabla 105. Terna de jugadores a emparejar. .................................................................... 205
xii
1. Anexos
En este documento se presenta toda la información que resulta relevante para el
entendimiento pleno del presente trabajo de tesis.
1
1.1. RUP (Rational Unified Process)
Fases de RUP
Fase Descripción
Punto donde se definen los objetivos del ciclo de vida.
Fase
El alcance, la estimación de tiempo y costo
de Inicio
Determinación de requerimientos, plasmados en casos de uso
Establecer una arquitectura sólida lo que requiere una visión global
del sistema, permitiendo ejecutar los casos de uso críticos
Desarrollar un plan de trabajo para el proyecto
Fase Definir y analizar como se pueden minimizar los riesgos mas altos,
de para que se pueda desarrollar un proyecto con éxito
Elaboración A partir de este punto: la arquitectura, los requerimientos y los planes
de desarrollo son más estables.
El modelo de casos de uso con descripciones detalladas
Requerimientos no funcionales
Todos los componentes se elaboran e incorporan en el producto
Realización de pruebas internas con el cliente (usuario final)
Fase
Producción eficiente y efectiva para lograr eficacia
de
Desarrollo de actividades, cumpliendo un plan y cronograma definido
Construcción
Se obtiene un producto de software integrado y corriendo en una
plataforma adecuada y con manuales de usuario.
2
1.1.1. Fases de RUP a desarrollar en el proyecto
El desarrollo de las actividades del sistema del sistema para el presente proyecto para
cada uno de sus módulos, será conducido usando un esquema aproximado de fases
donde las iteraciones múltiples ocurran en una fase. La tabla a continuación describe
cada fase y el hito de fin de cada una.
3
1.1.2. Flujos de trabajo a realizar en el proyecto
Flujos de trabajo
Flujo Descripción
En este flujo se encuentran los artefactos utilizados de la
Modelado del
metodología RUP para definir un modelo del negocio, modelos de
Negocio
objetos del negocio y el modelo del dominio.
En este flujo se muestran el documento plan de desarrollo
software, el documento visión y las especificaciones tanto de los
Requisitos casos de uso. También se muestran los casos de uso de cada
subsistema, y desde los cuales también se puede consultar la
especificación del caso de uso.
En este flujo se muestran tanto el modelo de análisis/diseño
(diagrama de clases) como el modelo de datos (modelo entidad -
Análisis /
relación), desde los cuales se puede consultar la especificación
Diseño
de los métodos de clase más relevantes o las especificaciones de
atributos
En este flujo se muestran los prototipos de interfaces de usuario
de la aplicación. También se muestran los diagramas de
Implementación componentes y diagrama de despliegue que modelan las
aplicaciones incorporadas en el proyecto.
4
1.1.3. Objetivos de cada iteración en el proyecto
Cada fase consiste en iteraciones en las cuales una parte del sistema es desarrollado.
En general, los objetivos de estas iteraciones son:
• Reducir el porcentaje de errores técnicos utilizando para ello fases definidas
en que se basará el desarrollo del sistema.
• Proveer versiones iniciales de un sistema en operatividad.
• Permitir administrar los cambios en el alcance del sistema de manera
eficiente mediante iteraciones cíclicas.
5
Iteración Implementa y prueba Software No plasmar los
C1 los casos de uso de la versión de prototipos
Desarrollo iteración E1 prueba (V1 correctamente.
de la Beta). El equipo de
versión de trabajo no este
prueba (V1 familiarizado con
Beta). los programas a
utilizar.
6
1.2. UML
7
Los diagramas UML utilizados en el presente tema de tesis son los siguientes:
8
1.3. Lenguajes de Programación
Los lenguajes de programación son una de las principales herramientas de las que se
dispone para especificar de forma precisa las operaciones que debe realizar una
computadora sobre los datos para proporcionar unos resultados o servicios.
9
A continuación se describe brevemente a cada uno de los lenguajes de programación
candidatos a elaborar el presente proyecto:
Lenguajes de Programación
Lenguaje Descripción
Es un lenguaje de programación orientado a objetos desarrollado por
Sun Microsystems a principios de los años 1990. Las aplicaciones
Java están típicamente compiladas en un bytecode el cual es
normalmente interpretado o compilado a código nativo para la
ejecución.
10
1.4. Base de Datos
11
SQLite es un proyecto de dominio público, su creador es D. Richard
Hipp, el cual implementa una pequeña librería de aproximadamente
500kb, programado en el lenguaje C, de dominio público, totalmente
libre y que tiene con función hacer de un sistemas de bases de datos
relacional.
Para este proyecto se decidió no usar esta base de datos por las
PostGreSql siguientes razones:
• Está pensada para gestionar bases de datos con un volumen
de datos importante, disminuyendo su efectividad en bases de
datos relativamente pequeñas, como la que utilizará este
proyecto.
• Consume mucho más recursos que MySQL y carga
innecesariamente el sistema.
• Según expertos es de dos a tres veces más lenta que
MySQL.
• La sintaxis no es muy intuitiva, dificultando relativamente su
utilización.
12
1.5. Arquitectura Cliente – Servidor
13
1.5.1. Capas
La arquitectura del sistema puede estar dividida en capas. Todas estas capas pueden
residir en un único ordenador (no sería lo normal), si bien lo más usual es que haya
una multitud de ordenadores donde reside la capa de presentación (son los clientes de
la arquitectura cliente/servidor).
Capas de Arquitectura
Capas Descripción
14
1.6. Requerimientos
Las funcionalidades o servicios que el sistema debe contemplar para cumplir con los
objetivos planteados inicialmente son los siguientes:
Requerimientos
código Descripción Tipo Dificultad Prioridad
El sistema permitirá el registro, la
edición y la eliminación de los
TOR-001 Funcional 3 2
jugadores participantes de los
torneos a realizar.
El sistema permitirá registrar los
siguientes datos de los jugadores:
TOR-002 Funcional 3 2
nombre, apellidos, fecha de
nacimiento y ranking.
El sistema permitirá realizar la
búsqueda de jugadores por
TOR-003 Funcional 2 2
diferentes criterios: nombre y
apellidos.
El sistema permitirá el registro de
torneos indicando nombre del torneo,
TOR-004 fecha de inicio, fecha de fin, lugar del Funcional 2 1
evento y definición de premios a
otorgar
El sistema permitirá el ingreso, la
edición y la eliminación de los
TOR-005 Funcional 2 1
torneos registrados en la base de
datos.
El sistema permitirá el ingreso de
partidas realizadas dentro de los
TOR-006 Funcional 2 1
torneos haciendo uso de la interfaz
gráfica de ingreso de partidas.
15
El sistema permitirá dentro del
módulo de ingreso de partidas indicar
TOR-007 Funcional 2 1
jugadores participantes, fecha, lugar,
torneo y resultado del juego.
El sistema permitirá la edición de los
TOR-008 movimientos de la partida a registrar Funcional 1 1
habilitando un botón de retroceso.
El sistema permitirá la inclusión de
comentarios en el ingreso de las
TOR-009 Funcional 1 1
partidas, jugada por jugada si fuese
el caso.
El sistema permitirá el registro de
partidas interpretando la lista de
TOR-010 Funcional 1 1
movimientos de una partida de
ajedrez si así fuese el caso
El sistema permitirá el
TOR-012 emparejamiento de jugadores ronda Funcional 1 1
por ronda de forma automática.
El sistema generará los reportes de
TOR-013 Funcional 2 2
resultados de cada ronda jugada.
16
1.6.2. Módulo de Administración de Partidas
Requerimientos
código Descripción Tipo Dificultad Prioridad
El sistema permitirá la búsqueda de
partidas del sistema por los siguientes
PAR-001 Funcional 2 2
criterios: nombre de jugador, nombre
de torneo, fecha de juego.
El sistema permitirá la inclusión de
comentarios sobre las partidas que
PAR-002 Funcional 1 2
anteriormente fueron ingresadas al
sistema.
El sistema permitirá la visualización de
la partida elegida haciendo uso de
PAR-003 Funcional 1 1
botones para avanzar y retroceder las
jugadas.
El sistema permitirá la generación de
reportes en formato pdf (a partir de un
archivo Formatting Objects) con los
PAR-004 datos básicos de la partida, el detalle Funcional 1 2
de las jugadas, los comentarios
agregados y el gráfico del tablero en la
posición de la partida deseada.
El sistema permitirá al usuario apreciar
los movimientos de todas las piezas
PAR-005 Funcional 3 1
de un tablero de ajedrez si así se
requiriese.
17
1.6.3. Características Generales del Sistema
Requerimientos
código Descripción Tipo Dificultad Prioridad
18
Dificultad
valores Descripción
1 Alta
2 Media
3 Baja
Prioridad
valores Descripción
1 Alta
2 Media
3 Baja
Tipo de torneo
valores Descripción
1 Sistema Suizo
19
1.7. Modelos de Casos de Uso
En esta sección se presentan los diagramas de casos de uso del presente sistema
obtenidos durante el proceso de especificación de requisitos, los cuales permiten
mostrar la funcionalidad del sistema más detalladamente.
Generar Reportes
Calcular ELO
Ingresar Resultados
<<include>>
Generar Emparejamientos
Mantenimiento de Divisiones
Mantenimiento de Jugadores
<<include>>
Mantenimiento de Torneo
Elegir Division
<<extend>>
<<include>>
<<include>>
Inscribir Jugadores a División
Buscar Jugadores
20
A continuación se muestra una breve explicación de los casos de uso mencionados:
21
1.7.2. Caso de Uso de Partidas
<<extend>>
22
A continuación se muestra una breve explicación de los casos de uso mencionados:
23
1.8. Especificación de Casos de Uso
Esta sección contiene las principales especificaciones de los casos de uso del
sistema. Todos estos han sido descritos utilizando el esquema mostrado en la
presente tabla que a continuación se detalla:
24
1.8.1. Mantenimiento de Jugadores
25
ser actualizados.
26
1.8.2. Mantenimiento de Torneo
27
El sistema muestra en la grilla los
registros coincidentes al criterio de
El usuario ingresa su criterio de búsqueda ingresado por el usuario.
búsqueda en la caja de texto “Torneo 4 Si el criterio de búsqueda no
3
a Buscar” coincide con ningún registro se
muestra la grilla de la ventana “Elegir
torneo” sin registros.
Flujo Alternativo: Actualizar el registro de un torneo
Acción del usuario Respuesta del Sistema
El sistema activa la pestaña
<<Include “Buscar torneo”>>.
“Ingresar Nuevo Torneo” de la
El usuario elige el registro a ser
ventana “Elegir torneo” donde los
actualizado y presiona el botón
1 2 campos del registro seleccionado
“Actualizar datos” de la ventana
aparecen en sus respectivas cajas
“Elegir torneo”
de texto listos para ser actualizados.
El usuario una vez actualizado los
campos del registro seleccionado
El sistema actualiza exitosamente el
presiona el botón “Actualizar datos”
3 4 registro.
de la pestaña “Ingresar Nuevo
Torneo”
Flujo Alternativo: Eliminar el registro de un torneo
Acción del usuario Respuesta del Sistema
El sistema muestra las opciones del
El usuario selecciona el menú “Inicio” menú inicio: “Pantalla Principal”,
1 2
“Nuevo Torneo” y “Salir”
28
1.8.3. Mantenimiento de Divisiones
29
1.8.4. Buscar Jugadores
Las especificaciones del caso de uso “Buscar Jugadores” son descritas en la siguiente
tabla:
30
1.8.5. Elegir División
Las especificaciones del caso de uso “Elegir División” son descritas en la siguiente
tabla:
31
1.8.6. Generar Emparejamientos
32
resultados de los enfrentamientos.
33
1.8.7. Inscribir Jugadores a División
Las especificaciones del caso de uso “Inscribir Jugadores a División” son descritas en
la siguiente tabla:
34
datos. Se elige la pestaña “Ingresar
Jugadores” y se procede a ingresar
la información requerida del jugador.
Poscondición: Se registra en la base de datos el ingreso del jugador seleccionado
en la división de torneo elegida.
Observaciones: Tienen que haber disponible torneos que todavía no hayan sido
iniciados para que estos aparezcan en la lista desplegable
“División”
35
1.8.8. Ingresar Resultados
36
1.8.9. Calcular ELO
Las especificaciones del caso de uso “Calcular ELO” son descritas en la siguiente
tabla:
37
la columna “Partidas” de cada fila el
número de partidas jugadas en cada
torneo. A continuación elige entre las
opciones: “Jugador Principiante” y
“Jugador Experto” indicando la cifra
de ELO obtenida en ese momento. El
usuario procede a presionar el botón
“Calcular ELO FIDE”
Poscondición: Se obtiene un nuevo cálculo de ELO del jugador seleccionado.
Observaciones: Este caso de uso no registra los resultados obtenidos en la base de
datos.
38
1.8.10. Generar Reportes de Torneo
Las especificaciones del caso de uso “Generar Reportes de Torneo” son descritas en
la siguiente tabla:
39
1.8.11. Comentar Partidas
40
1.8.12. Aprender Jugadas Básicas
Las especificaciones del caso de uso “Aprender Jugadas Básicas” son descritas en la
siguiente tabla:
41
El usuario presiona el botón “cancelar
“de la ventana de “Aprendizaje de
3 Movimientos Básicos”. Fin del caso
de uso.
Poscondición: Ninguna
Observaciones: Este caso de uso no interactúa con la base de datos
42
1.8.13. Buscar Partida
Las especificaciones del caso de uso “Buscar Partida” son descritas en la siguiente
tabla:
43
El Sistema verifica los datos, si los
El usuario modifica los datos que
encuentra correctos realiza la
desea actualizar y hace clic en el
3 4 actualización, y muestra el mensaje
botón “Guardar”.
“Datos actualizados correctamente”.
44
1.8.14. Generar Reporte de Partida
Las especificaciones del caso de uso “Generar Reporte de Partida” son descritas en la
siguiente tabla:
45
1.8.15. Leer Movimientos de Partida
Las especificaciones del caso de uso “Leer Movimientos de Partida” son descritas en
la siguiente tabla:
46
Flujo Alternativo: Lectura errónea de un movimiento de partida.
Acción del usuario Respuesta del Sistema
El sistema interpreta los
movimientos ingresados y los
Se realizan los pasos 1-4 del flujo traduce en movimientos que
anterior. El usuario elige la pestaña posteriormente pueden ser
PGN de la ventana “Lectura de reproducidos por el usuario al volver
1 Partidas” pega en la caja de texto los 2 al tablero. Si la notación no refleja
movimientos de la partida que desea correctamente el movimiento de
reproducir y se presiona el botón piezas de una partida de ajedrez el
“Generar Partida”. sistema mostrará un mensaje de
error “No se pudo reproducir la
partida”
Poscondición: Se registra en la base de datos la partida ingresada
Observaciones: Ninguna
47
1.8.16. Ingresar Nueva Partida
Las especificaciones del caso de uso “Ingresar Nueva Partida” son descritas en la
siguiente tabla:
48
Flujo Alternativo: Generación de movimientos de partida.
Acción del usuario Respuesta del Sistema
El flujo se inicia cuando el usuario
1 selecciona la pestaña “PGN”.
49
1.9. Diagrama de Secuencias
1 : btnNuevoTorneoActionPerformed()
2 : frmNuevoTorneo2()
3 : crear()
4 : crear()
50
1.9.2. Crear y Editar División de Torneo
1 : frmAdmTorneo()
2 : frmAgregarDivisiones()
3 : btnAceptarActionPerformed()
4 : crear()
5 : crear()
6 : btnEditarDivisionActionPerformed()
7 : frmActualizarDivisiones() 8 : actualizarDivisionActual()
9 : actualizarDivisionActual()
51
1.9.3. Agregar e Inscribir Jugadores a Torneo
1 : frmAdmTorneo()
2 : frmAgregarJugadores2()
3 : getLstJugadores()
4 : listarJugadores()
5 : getLstJugadores()
6 : llenarGrillaJugadores()
7 : registrarJugador()
8 : crear() 9 : crear()
10 : buscarenListalaDivision()
11 : btnInscribirJugadoresActionPerformed()
12 : crear()
13 : crear()
52
1.9.4. Emparejar Jugadores
1 : frmResultadosTorneo()
: grupoBL : rondaDA
2 : ButtonSgteListener()
3 : hacerSgte()
4 : crearGruposdePuntuacion()
5 : asignarIdPareo()
6 : emparejarSegunGrupos()
7 : crear()
8 : crear()
9 : actualizarDatosPrevia()
10 : actualizarDatosPrevia()
Para ello se crean los grupos de puntuación para dividir a los jugadores según sus
fortalezas. Si fuera el caso de ser la primera ronda se asigna el identificador a cada
jugador por todo el torneo. Se crea nueva ronda con el método crear() de rondaba y se
inicializan los datos de los jugadores de la división para esta nueva ronda con los
métodos actualizarDatosPrevia() de las capas de lógica y de acceso a datos de la
clase jugadorxDivxRonda.
53
1.9.5. Registrar Resultados de Encuentros Jugados
1 : frmResultadosTorneo()
2 : ButtonListener()
3 : ventanaPareo()
4 : frmPonerResultados()
5 : getJugadoresxRonda()
6 : getJugadoresxRonda()
7 : Grabar()
8 : actualizarDatosFinal()
9 : actualizarDatosFinal()
10 : actEstadoEnBD()
11 : actEstadoEnBD()
Siempre que hayan partidas pendientes se puede actualizar el resultado de todas las
partidas de la ronda jugada, para ello se hace uso de la función actualizarDatosFinal()
de la capa lógica de la clase jugadorxDivxRonda.
54
1.9.6. Ingresar Partidas al Sistema
3 : iniciarVentanaPartida()
4 : Evento()
5 : mouseReleased()
6 : btnJugadorNegrasActionPerformed()
8 : btnJugadorBlancasActionPerformed() 7 : btnElegirJugadorActionPerformed()
9 : getUnJugador()
10 : getUnJugador()
11 : btnElegirJugadorActionPerformed()
12 : getUnJugador()
13 : getUnJugador()
14 : RegistrarPartida()
15 : crear()
16 : crear()
Para registrar la partida es necesario determinar a los dos jugadores que participan del
juego para lo cual se provee de botones a la ventana de ingreso de partidas que
llamen a la ventana de búsqueda de jugadores frmElegirJugadores. Una vez elegidos
estos jugadores se procede a registrar la partida haciendo uso de la función crear() de
la capa lógica de la clase partida la cual a su vez requiere de la capa de acceso a
datos para registrar la información en la base de datos del sistema creándose de esta
forma el registro de la partida jugada.
55
1.9.7. Buscar y Leer Partidas del Sistema
1 : frmAdmTorneo()
2 : frmBuscarPartidas() 3 : getLstPartidas()
4 : listarPartidas()
5 : llenarGrillaPartidas()
6 : btnVerPartidaActionPerformed()
7 : frmLecturaPartidas()
8 : btnAvanzarActionPerformed()
9 : btnRetrocederActionPerformed()
56
1.9.8. Calcular ELO de jugador en torneo
1 : frmResultadosTorneo()
2 : frmELO()
3 : calculoParaExperimentados()
4 : ELOListener()
5 : getListaContrincantesxELO()
6 : getContrincantesxELO()
57
1.10. Diagrama de Clases
torneo
+idTorneo frmNuevoTorneo2
+terminado
+ciudad: String
+nombreTorneo usa
+organizador: String
+ciudad
+nombreTorneo: String
+fechaInicio 1 1
+admtorneo: torneo
+fechaFin
+organizador +frmNuevoTorneo2()
+numeroDivisiones
1
usa
1
torneoBL torneoDA
+torneoBL() +torneoDA()
+crear() usa +crear()
+actualizarNdivisiones() 1 1..* +getNdivTorneo()
+getNDivTorneo() +actualizarNdivisiones()
+getLstTorneos() +listarTorneos()
+actualizarTorneo() +update()
+buscarTorneoxId() +buscarTorneoxId()
Para observar la secuencia de mensajes entre los objetos de estas clases revise el
diagrama de secuencias de la creación de torneos.
58
1.10.2. Agregar Jugadores al Sistema
frmAgregarJugadores2
+jugador admJugador
+jBL: jugadorBL
+arrjBL: ArrayList <jugador>
+lstDiv: ArrayList<division>
+divBL: divisionBL jugadorBL
+jxd: jugadorxDivision
usa
+crear(jugador): boolean
+frmAgregarJugadores2()
1 1..* +getLstJugadores(): ArrayList<jugador>
+buscarenListalaDivision()
+actualizarJugador(): boolean
+estaJugadorenDivision()
+getUnJugador(): jugador
+dameJugadordeLista()
+registrarJugador() 1
+crearListaDivisiones() usa
+llenarGrillaJugadores() 1
+btnInscribirJugadoresActionPerformed()
jugadorDA
+cmbDivisionItemStateChanged()
1
+jugadorDA(jugador)
1..* agrega
+crear(): boolean
+listarJugadores(): ArrayList<jugador>
jugador +update(int, jugador): boolean
+idJugador +getUnJugador(int): jugador
+apellidoPaterno
+apellidoMaterno
+nombres
+pais
+fechadeNacimiento
+rating
+sexo
Para observar la secuencia de mensajes entre los objetos de estas clases revise el
diagrama de secuencias de la creación de jugadores.
59
1.10.3. Inscribir Jugador a División de Torneo
jugadorxDivision
division
+idJugadorxDiv
+idDivision frmAgregarJugadores2 +posicionFinal
+nombreDivision +numeroId
+jugador admJugador
+descripcion +ganados
+jBL: jugadorBL
+numJugadores +derrotas
1 +arrjBL: ArrayList <jugador>
+numFechas agrega +empates
1..* +lstDiv: ArrayList<division>
+terminado +estado
+divBL: divisionBL 1
+rondaActual usa 1..* +puntajeTotal
+jxd: jugadorxDivision
+ptosxBye +bye
+frmAgregarJugadores2() +descripcion
+buscarenListalaDivision()
+estaJugadorenDivision()
+dameJugadordeLista()
jugadorxDivisionBL 1 +registrarJugador()
+crearListaDivisiones() divisionBL
1 +usa
+jugadorxDivisionBL() +llenarGrillaJugadores()
+crear() +btnInscribirJugadoresActionPerformed()
+divisionBL(int)
+getLstJugadoresxDivision() +cmbDivisionItemStateChanged()
1 +crear(division)
+asignarId() usa
+getLstDivisiones()
+actualizarPuntajeTotal() +actualizarEstado()
+getJugadorxDivision() 1 +actualizarRondaActual()
+eliminarJugador() divisionDA +getRondaActual()
1 +getTotalFechas()
+divisionDA() +getDivision(int)
relacionado +actualizarDivisionActual()
1 +crear()
+getDivision(int) relacionado +actualizarNumeroRondas()
jugadorxDivisionDA +emparejarRoundRobin()
+actualizarDivisionActual()
+listarDivisiones() +emparejarSegunGrupos()
1 1
+jugadorxDivisionDA() +getRondaActual() +ordenarJugadores()
+crear() +actualizarEstadoDivision() +buscarJugadorxId()
+listarJugadoresxDiv() +actualizarRondaActual() +buscarJugadorxId2()
+asignarIdDivisionTorneo() +getTotalFechas() +combinarUltimosGrupos()
+actualizarPuntajeTotal() +actualizarNumeroRondas() +emparejarDentrodeGrupo()
+buscarJugadorxDiv() +crearNuevosGruposPuntuacion()
+eliminarJugador() +puedeJugarenelGrupo()
+llenarMatrizPareos()
+eliminarCandidatosPareo()
+dameMatrizdeRivales()
+proponerRivales()
+establecerColores()
Para observar la secuencia de mensajes entre los objetos de estas clases revise el
diagrama de secuencias de la inscripción de jugadores a división de torneos.
60
1.10.4. Crear División de Torneo
El proceso de crear una división de torneo está soportado por el siguiente diagrama de
clases:
torneoDA torneoBL
Para observar la secuencia de mensajes entre los objetos de estas clases revise el
diagrama de creación de divisiones de torneos.
61
1.10.5. Emparejamientos de Jugadores
divisionDA
grupoBL
divisionBL
+divisionDA()
+grupoBL()
+crear() +divisionBL(int)
+crearGruposdePuntuacion()
+getDivision(int) +crear(division)
+determinarPuntajesUnicos()
+actualizarDivisionActual() +getLstDivisiones()
+estaenListadePuntaje()
+listarDivisiones() +actualizarEstado()
+crearSubGrupo()
+getRondaActual() +actualizarRondaActual()
+noPuedeJugarenelGrupo()
+actualizarEstadoDivision() relacionado
+getRondaActual()
+listaJugadoresAptos()
+actualizarRondaActual() +getTotalFechas()
+sePuedePareoxColores() 1
+getTotalFechas() +getDivision(int)
+noPuedenJugarEnEsteGrupo()
+actualizarNumeroRondas() 1 +actualizarDivisionActual()
+noPuedenJugarenelGrupo()
+determinarSgteColorxJugador() 1 +actualizarNumeroRondas()
+eliminarporColor() usa +emparejarRoundRobin()
grupo +emparejarSegunGrupos()
1 +ordenarJugadores()
1 +numeroJugadores +buscarJugadorxId()
+jugadoresxGrupo +buscarJugadorxId2()
+puntajedeGrupo +combinarUltimosGrupos()
frmResultadosTorneo relacionado +jugadores +emparejarDentrodeGrupo()
+tipoGrupo +crearNuevosGruposPuntuacion()
+arrDivisiones: division[n]
+unaRondaBL: rondaBL +puedeJugarenelGrupo()
+jxdxrBL: jugadorxDivxRondaBL 1..* +llenarMatrizPareos()
relacionado
+jxdBL: jugadorxDivisionBL relacionado +eliminarCandidatosPareo()
1 1 +dameMatrizdeRivales()
+todaslasRondas: ronda
1..* 1 +proponerRivales()
+frmResultadosTorneo() ButtonSgteListener +establecerColores()
+pintarVentana() emparejar
+llenarGrillas() +divisionBL divBL
+arrjBD: ArrayList<jugadorxDivxRonda> usa 1
1..* 1
+jugadorxDivision jugadorBYE
1 +jxdxrBL: jugadorxDivxRondaBL jugadorxDivxRondaBL
rondaBL +gruposFormadosBL: grupoBL
+gruposFormadosBE: grupo +jugadorxDivxRondaBL()
+rondaBL() +ButtonSgteListener() +crear(): boolean
1..* 1 +getPuntaje(): double
+crear(ronda): boolean +elegirBYE()
+getIdRonda(int, int): ronda +hacerSgte() +getIdJugadorxRonda()
relacionado relacionado
+actEstadoEnBD(int): boolean +asignarIdPareo() +getJugadoresxRonda()
+getEstadoRonda(int): int +asignarContrincantes() +getJugadorxRonda()
1 +getResultadosxRonda()
+emparejarxSistemaSuizo()
1 1..* +getContrincantesxRonda()
relacionado +creandoNuevaRonda()
1 +emparejarxRoundRobinDos() +getColoresxRonda()
+emparejarxRoundRobinUno() +limpiarContrincantexRonda()
rondaDA +getFlotantesxRonda()
+comprobarPasoSiguenteRonda()
+ordenarTablaFinRonda() +getLstColoresxRonda()
+rondaDA(ronda) +ponerColorxRonda()
+crear(): boolean +ponerFlotantexRonda()
1
+getIdRonda(int, int): ronda relacionado +ponerRivalxRonda()
+actEstadoEnBD(int): boolean 1..* +actualizarDatosFinal()
+getEstadoRonda(int): int +actualizarDatosPrevia()
jugadorxDivisionBL
+actualizarIdPartida()
+getIdPartidaRegistrada()
+jugadorxDivisionBL() +getListaContrincantesxELO()
+crear()
+getLstJugadoresxDivision() 1
+asignarId() relacionado
1
+actualizarPuntajeTotal()
+getJugadorxDivision()
+eliminarJugador() jugadorxDivxRondaDA
1 relacionado +jugadorxDivxRondaDA()
1 +getPuntaje(int)
+actualizarDatosFinal()
jugadorxDivisionDA +actualizarDatosPrevia()
+getIdJugadorxRonda()
+jugadorxDivisionDA() +getJugadoresxRonda()
+crear() +getJugadorxRonda()
+listarJugadoresxDiv() +getResultadosxRonda()
+asignarIdDivisionTorneo() +getContrincantesxRonda()
+actualizarPuntajeTotal() +getColoresxRonda()
+buscarJugadorxDiv() +limpiarContrincantexRonda()
+eliminarJugador() +getFlotantesxRonda()
+ponerFlotantexRonda()
+ponerRivalxRonda()
+getLstColoresxRonda()
+ponerColorxRonda()
+actualizarIdPartida()
+getIdPartidaRegistrada()
+getContrincantesxELO()
62
La clase de la ventana frmResultadosTorneo que es la encargada de la administración
de las divisiones de un torneo y de mostrar el resultado de los emparejamientos,
interactúa con los métodos de las capas lógicas y de acceso a datos de las clases
que soportan: a los jugadores de división (clase jugadorxDivision), a los jugadores de
división por ronda (clase jugadorxDivxRonda), a la ronda que se esta jugando (clase
ronda), a los grupos de jugadores formados (clase grupo) y la división de torneos
(clase division).
Para observar la secuencia de mensajes entre los objetos de estas clases revise el
diagrama de secuencias del emparejamiento de jugadores.
63
1.10.6. Registrar Resultados de Enfrentamientos
rondaDA divisionBL
jugadorxDivxRondaBL
+rondaDA(ronda) +divisionBL(int)
+jugadorxDivxRondaBL() +crear(): boolean +crear(division)
+crear(): boolean +getIdRonda(int, int): ronda +getLstDivisiones()
+getPuntaje(): double +actEstadoEnBD(int): boolean +actualizarEstado()
+getIdJugadorxRonda() +getEstadoRonda(int): int +actualizarRondaActual()
+getJugadoresxRonda() +getRondaActual()
+getJugadorxRonda() 1 +getTotalFechas()
relacionado
+getResultadosxRonda() +getDivision(int)
1
+getContrincantesxRonda() +actualizarDivisionActual()
+getColoresxRonda() rondaBL
+actualizarNumeroRondas()
+limpiarContrincantexRonda() +emparejarRoundRobin()
+getFlotantesxRonda() +rondaBL() +emparejarSegunGrupos()
+getLstColoresxRonda() +crear(ronda): boolean +ordenarJugadores()
+ponerColorxRonda() +getIdRonda(int, int): ronda +buscarJugadorxId()
+ponerFlotantexRonda() +actEstadoEnBD(int): boolean +buscarJugadorxId2()
+ponerRivalxRonda() 1 +getEstadoRonda(int): int +combinarUltimosGrupos()
+actualizarDatosFinal() 1 +emparejarDentrodeGrupo()
+actualizarDatosPrevia() 1 relacionado relacionado
relacionado 1 +crearNuevosGruposPuntuacion()
+actualizarIdPartida() 1 +puedeJugarenelGrupo()
+getIdPartidaRegistrada() ButtonListener 1 +llenarMatrizPareos()
+getListaContrincantesxELO() +eliminarCandidatosPareo()
+unaDivision: division
1 +dameMatrizdeRivales()
+jxdBL: jugadorxDivisionBL
relacionado +proponerRivales()
+divBL: divisionBL
1 +establecerColores()
jugadorxDivxRondaDA +ButtonListener() 1
+ventanaPareo() relacionado 1
+prepararEmparejadosaMostrar()
+jugadorxDivxRondaDA() divisionDA
+ponerResultadosalInicio()
+getPuntaje(int)
+actualizarPuntajes()
+actualizarDatosFinal()
+ponerResultados() +divisionDA()
+actualizarDatosPrevia()
+getIdJugadorxRonda() +crear()
+getJugadoresxRonda() +getDivision(int)
1
+getJugadorxRonda() relacionado +actualizarDivisionActual()
1 1..*
+getResultadosxRonda() +listarDivisiones()
+getContrincantesxRonda() +getRondaActual()
jugadorxDivisionBL
+getColoresxRonda() +actualizarEstadoDivision()
+limpiarContrincantexRonda() +actualizarRondaActual()
+getFlotantesxRonda() +jugadorxDivisionBL() compuesto por
+getTotalFechas()
+ponerFlotantexRonda() +crear() +actualizarNumeroRondas()
+ponerRivalxRonda() +getLstJugadoresxDivision()
+getLstColoresxRonda() +asignarId() 1
+ponerColorxRonda() +actualizarPuntajeTotal()
+actualizarIdPartida() +getJugadorxDivision()
frmResultadosTorneo
+getIdPartidaRegistrada() +eliminarJugador()
+getContrincantesxELO() +arrDivisiones: division[n]
1 relacionado +unaRondaBL: rondaBL
1 +jxdxrBL: jugadorxDivxRondaBL
jugadorxDivisionDA +jxdBL: jugadorxDivisionBL
+todaslasRondas: ronda
+jugadorxDivisionDA() +frmResultadosTorneo()
+crear() +pintarVentana()
+listarJugadoresxDiv() +llenarGrillas()
+asignarIdDivisionTorneo()
+actualizarPuntajeTotal()
+buscarJugadorxDiv()
+eliminarJugador()
64
El diagrama de clases para el ingreso de los resultados de los enfrentamientos tiene
una estructura parecida al diagrama de emparejamiento de jugadores pero con dos
excepciones: no se considera a la clase “grupo” y se utiliza la clase “ButtonListener”.
De igual forma se interactúa con los métodos de las capas lógicas y de acceso a datos
de las clases que soportan: a los jugadores de división (clase jugadorxDivision), a los
jugadores de división por ronda (clase jugadorxDivxRonda), a la ronda que se esta
jugando (clase ronda) y la división de torneos (clase division).
Para observar la secuencia de mensajes entre los objetos de estas clases revise el
diagrama de secuencias del ingreso de resultados de enfrentamientos.
65
1.10.7. Ingresar Partidas
jugadorDA
partidaDA
+jugadorDA(jugador)
+partidaDA(partida) +crear(): boolean
+crear(): boolean +listarJugadores(): ArrayList<jugador>
+listarPartidas(): ArrayList<partida> +update(int, jugador): boolean
+update(int, partida): boolean +getUnJugador(int): jugador
+getUltimoIdPartida(): int
+getPartidaxId(int): partida 1
usa
1 1 Pieza
usa
jugadorBL +nombre: String
1
partidaBL +Posicion: String
+crear(jugador): boolean +estoyVivo: Char
+getLstJugadores(): ArrayList<jugador> +promocion: Boolean
+partidaBL()
+crear(): boolean +actualizarJugador(): boolean
+getUnJugador(): jugador +CalcularMovimientos()
+getLstPartidas(): ArrayList<partida> +DameMovimientosPosibles()
+actualizarPartida(): boolean
+getUltimoIdPartida(): int 1
relacionado
+getPartidaxId(): partida 1 1
1
1 frmIngresoPartidas
relacionado +jugadorBlancas: jugador esta compuesto por
jugador
+jugadorNegras: jugador
+idJugador +adminEventos: Evento
+apellidoPaterno +admPartidaBL: partidaBL 1..*
+apellidoMaterno usa +unaPartida: partida
+nombres ManejadordePiezas
+pais 1 1..* +frmIngresoPartidas()
+fechadeNacimiento +iniciarVentanaPartida() +PiezasVivas: Pieza[n]
+rating +RegistrarPartida(): void
+sexo +btnElegirTorneoActionPerformed() +iniciarPiezas()
+btnJugadorNegrasActionPerformed() +identificarPiezaElegida()
+btnJugadorBlancasActionPerformed() +damePieza()
+btnReporteActionPerformed() +dameListaReporte()
ManejadordeTablero
1 1
+coordenadas: String
usa
1..* administra
+CrearTablero() 1..*
+CalcularCasillasalSeleccionar()
+PintarCasilllasalSeleccionar() Evento
administra
+Pieza unaPieza
1 +desde: int
1..*
+hasta: int
+listadeMovimientos: List<PiezaPosicion>
+listadeNotaciones: ArrayList<RegistroJugadas>
+Evento()
+empezardeCero()
+mouseDragged()
+mouseReleased()
+ActualizarComentarios()
+InsertarunComentario()
+BotonPGN()
+mousePressed()
66
La clase de la ventana frmIngresoPartidas es la que se encarga del ingreso de
partidas al sistema interactúa con los métodos de las capas lógicas y de acceso a
datos de las clases que soportan: a los jugadores (clase jugador) y a las partidas
(clase partida).
Para observar la secuencia de mensajes entre los objetos de estas clases revise el
diagrama de secuencias de ingreso de partidas al sistema.
67
1.10.8. Leer movimientos de Partidas
El proceso de interpretar los movimientos de una partida por el sistema está soportado
por el siguiente diagrama de clases:
Pieza
jugadorDA
+nombre: String
+jugadorDA(jugador) +Posicion: String
+crear(): boolean +estoyVivo: Char
+listarJugadores(): ArrayList<jugador> +promocion: Boolean
+update(int, jugador): boolean
+CalcularMovimientos()
+getUnJugador(int): jugador
+DameMovimientosPosibles()
1
usa 1
esta compuesto por
1
partidaDA 1..*
jugadorBL
ManejadordePiezas
+partidaDA(partida)
+crear(jugador): boolean +PiezasVivas: Pieza[n]
+crear(): boolean
+getLstJugadores(): ArrayList<jugador>
+listarPartidas(): ArrayList<partida>
+actualizarJugador(): boolean +iniciarPiezas()
+update(int, partida): boolean
+getUnJugador(): jugador +identificarPiezaElegida()
+getUltimoIdPartida(): int
+damePieza()
+getPartidaxId(int): partida 1..* +dameListaReporte()
usa administra
1 1
usa 1..*
1
frmLecturaPartidas
partidaBL 1
+adminLectura: manejadorPiezas ManejadordeTablero
+adminPiezas: manejadorPiezas
+partidaBL() usa +pgn: String administra +coordenadas: String
+crear(): boolean
+getLstPartidas(): ArrayList<partida> +frmLecturaPartidas() +CrearTablero()
11 1 1..*
+actualizarPartida(): boolean +btnPGNActionPerformed() +CalcularCasillasalSeleccionar()
+getUltimoIdPartida(): int +btnAvanzarActionPerformed() +PintarCasilllasalSeleccionar()
+getPartidaxId(): partida +btnRetrocederActionPerformed()
+btnReporteActionPerformed()
Para observar la secuencia de mensajes entre los objetos de estas clases revise el
diagrama de secuencias de lectura de partidas del sistema.
68
1.10.9. Calcular ELO
JugadorxELO
+eloOponente: int
+eloCorregido: int
+idPareo: int
+puntajePropio: double jugadorxDivxRondaBL
+nombreOponente: String jugadorxDivxRondaDA
+jugadorxDivxRondaBL()
1 +jugadorxDivxRondaDA()
+crear(): boolean
compuesto por +getPuntaje(int)
+getPuntaje(): double
1..* +actualizarDatosFinal()
+getIdJugadorxRonda()
+actualizarDatosPrevia()
frmELO +getJugadoresxRonda()
+getIdJugadorxRonda()
+getJugadorxRonda()
+arrJxELO: ArrayList<jugadorxELO> +getJugadoresxRonda()
+getResultadosxRonda()
+jxdxrBL: jugadorxDivxRondaBL +getJugadorxRonda()
+getContrincantesxRonda() relacionado
+sumaPuntos: double 1 1 +getResultadosxRonda()
+getColoresxRonda()
+nuevoElo: int +getContrincantesxRonda()
relacionado +limpiarContrincantexRonda() 1 1 +getColoresxRonda()
+getFlotantesxRonda()
+frmELO() +limpiarContrincantexRonda()
+getLstColoresxRonda()
+calculoParaExperimentados() +getFlotantesxRonda()
+ponerColorxRonda()
+calculoParaPrimerizos() +ponerFlotantexRonda()
+ponerFlotantexRonda()
+ponerRivalxRonda()
+ponerRivalxRonda()
+getLstColoresxRonda()
+actualizarDatosFinal()
+ponerColorxRonda()
+actualizarDatosPrevia()
+actualizarIdPartida()
+actualizarIdPartida()
+getIdPartidaRegistrada()
+getIdPartidaRegistrada()
+getContrincantesxELO()
+getListaContrincantesxELO()
Para observar la secuencia de mensajes entre los objetos de estas clases revise el
diagrama de secuencias de cálculo de ELO:
69
1.11. Especificaciones de Diagramas de Clase
Clase ButtonListener
Atributo Descripción
Identificador de la división de torneo sobre la cual
unaDivision
se administra el ingreso de resultados.
Referencia a capa lógica de la clase
jxdBL
”jugadorxDivision”.
divBL Referencia a capa lógica de la clase “division”.
Método Descripción
ButtonListener Constructor de la clase.
Se encarga del registro de los resultados
ventanaPareo
ingresados de los enfrentamientos.
Se encarga de mostrar los enfrentamientos de
prepararEmparejadosaMostrar jugadores como filas en grilla para el ingreso de
resultados.
Se encarga de cargar los resultados cuando se
ponerResultadosalInicio
llama a la ventana.
Se encarga de actualizar los puntajes cuando se
actualizarPuntajes
completan el ingreso de resultados.
Se encarga de mostrar resultados en grilla de
ponerResultados
resultados de torneo.
70
1.11.2. Clase ButtonSgteListener
Clase ButtonSgteListener
Atributo Descripción
divBL Referencia a capa lógica de la clase “division”.
Arreglo de jugadores inscritos de la división del
arrjBD
torneo
Identificador del jugador que descansa en una
jugadorBYE
ronda.
Referencia a capa lógica de la clase
jxdxrBL
”jugadorxDivxRonda”.
gruposFormadosBE Referencia a la clase “Grupo”.
gruposFormadosBL Referencia a capa lógica de la clase “Grupo”.
Método Descripción
ButtonSgteListener Constructor de la clase.
Se encarga de determinar al jugador que
elegirBYE
descansa en esta ronda.
Se encarga de comprobar que se puede realizar
hacerSgte
el emparejamiento de la ronda.
Asigna un identificador al jugador de la división
asignarIdPareo
de torneo en la primera ronda.
Realiza el emparejamiento por tipo de sistema
emparejarxSistemaSuizo
suizo.
Crea una nueva ronda cuando se inicia
creandoNuevaRonda
emparejamiento de una ronda.
Realiza el emparejamiento por tipo Round Robin
emparejarxRoundRobinUno
de una vuelta.
Realiza el emparejamiento por tipo Round Robin
emparejarxRoundRobinDos
de dos vueltas.
Se encarga de cargar con datos iniciales a los
comprobarPasoSiguienteRonda jugadores para el emparejamiento de la siguiente
ronda.
71
Se encarga del ordenamiento de jugadores
ordenarTablaFinRonda
según puntaje
Clase que describe las categorías en las que está dividido un torneo.
Clase DivisionTorneo
Atributo Descripción
nombreDivision Nombre de la división o categoría del torneo
descripcion Detalle que describe las características de la categoría del torneo
numJugadores Cantidad de jugadores inscritos en la división del torneo
numFechas Cantidad de rondas o jornadas a jugar en la división del torneo
terminado Indicador que sirve para señalar si el evento ha finalizado.
Se encarga de dividir a los jugadores de una división de torneo en grupos según sus
puntajes para realizar el emparejamiento del tipo suizo.
Clase grupo
Atributo Descripción
numeroJugadores Cantidad de jugadores en el grupo de puntuación
jugadoresxGrupo Arreglo de jugadores del grupo de la división.
puntajedeGrupo Puntaje de los jugadores que componen el grupo.
Jugadores Arreglo de todos los jugadores de la división de torneo.
tipoGrupo Indicador si el grupo es “homogéneo” ó “heterogéneo”.
72
1.11.5. Clase Jugador
Clase que describe las características generales de un jugador que participa dentro de
un torneo.
Clase Jugador
Atributo Descripción
idJugador Identificador del jugador
apellidoPaterno Apellido paterno del jugador
apellidoMaterno Apellido materno del jugador
Nombre Nombres del jugador
fechaNacimiento Fecha de nacimiento del jugador
pais País de origen del jugador
Rating Nivel de capacidad de juego en el ajedrez.
Clase JugadorxDivision
Atributo Descripción
posicionFinal Ubicación final del jugador en la división de un torneo,
numeroId Identificador del jugador dentro del torneo.
ganados Número de victorias del jugador dentro del torneo.
derrotas Número de derrotas del jugador dentro del torneo.
Empate Número de empates del jugador dentro del torneo.
Condición del jugador dentro del torneo (eliminado,
Estado
bye)
descripcion Detalle del atributo estado descrito anteriormente.
73
1.11.7. Clase JugadorxELO
Clase JugadorxELO
Atributo Descripción
Cifra que mide la habilidad de juego del jugador de
eloOponente
ajedrez.
Cifra que corrige el ELO del oponente de acuerdo a
eloCorregido
reglas de cálculo de ELO.
Identificador de un juego dentro de una división de
idPareo
torneo
puntajePropio Puntaje total logrado por jugador en un torneo.
nombreOponente El nombre de un oponente.
Clase JugadorxFechas
Atributo Descripción
ronda Ronda o número de jornada dentro de un torneo
colorPieza El color de piezas con el que jugador disputa su partida
resultado El resultado final de la partida disputada del jugador
74
1.11.9. Clase ManejadordeLectura
Clase ManejadordeLectura
Atributo Descripción
Almacena la notación de las jugadas realizadas en una
listadeNotaciones
partida.
Método Descripción
Se encarga de convertir una notación de jugada a un
deNotacionaJugada formato reconocible por el sistema para proceder hacer
el movimiento.
Se encarga de leer la posición anterior a la posición
retrocederEnLista
actual.
Lee la notación para trasladar la pieza indicada hacia
moverPiezadeLista
su nueva posición.
Se encarga de administrar las operaciones comunes de las piezas dentro del tablero
de ajedrez.
Clase ManejadordePiezas
Atributo Descripción
PiezasVivas Lista de piezas que no han sido comidas en el tablero.
Método Descripción
Configura la posición inicial de las piezas de ajedrez del
iniciarPiezas
tablero.
Sirve para identificar la pieza escogida al hacer clic en el
identificarPiezaElegida
tablero.
damePieza Obtiene una pieza del tablero a partir del nombre de este.
Recibe lista de las piezas del tablero con sus respectivas
dameListaReporte
posiciones para utilizarlas en la generación de reportes.
75
1.11.11. Clase ManejadordeTablero
Clase ManejadordeTablero
Atributo Descripción
Almacena las coordenadas con que se identificará
coordenadas
a cada una de las casillas del tablero.
Método Descripción
CrearTablero Se encarga de dibujar el tablero.
Se encarga de calcular las casillas disponibles que
CalcularCasillasalSeleccionar
una pieza seleccionada pueda ocupar.
Se e encarga de pintar las casillas disponibles que
PintarCasillasalSeleccionar
una pieza seleccionada pueda ocupar.
76
1.11.12. Clase Partida
Clase que describe las características generales de las partidas de ajedrez a registrar
por el sistema.
Clase Partida
Atributo Descripción
idPartida Identificador del tipo de apertura.
idTorneo Identificador del torneo
idJugadorBlancas Identificador del jugador de piezas blancas.
idJugadorNegras Identificador del jugador de piezas negras
resultado Indicador de resultado final de la partida.
movs Descripción de movimientos de la partida.
fecha Fecha de juego de la partida
nombreBlancas Nombre del jugador de piezas blancas.
nombreNegras Nombre del jugador de piezas negras
eloBlancas Coeficiente de juego del jugador de piezas blancas.
eloNegras Coeficiente de juego del jugador de piezas negras.
Indicador que señala si la partida ya fue registrada en el
registrado
sistema
77
1.11.13. Clase Pieza (Abstracta)
Se encarga de soportar las tareas comunes de cada pieza de ajedrez como por
ejemplo: el cálculo de movimientos posibles de la pieza.
Clase que describe las características generales del tipo de torneo a jugar.
Clase TipoTorneo
Atributo Descripción
idTipoTorneo Identificador de tipo de torneo
nombre Nombre que identifica al tipo de torneo
descripción Detalle de las características del tipo de torneo a jugar
78
1.11.15. Clase Torneo
Clase Torneo
Atributo Descripción
idTorneo Identificador único de torneo
nombre Nombre del torneo
ciudad Ciudad en la que se desarrolla el torneo
fechaInicio Fecha de Inicio del torneo
fechaFinal Fecha de culminación del torneo
organizador Nombre del organizador del torneo.
Número de divisiones o categorías en las que se diputará el
numeroDivisiones
torneo.
terminado Indicador que señala si el torneo ha finalizado
79
1.12. Diseño del modelo físico de datos
80
A continuación se ofrece una breve explicación de las tablas que componen el modelo
de base de datos del presente proyecto:
Tabla 49. Descripción de las tablas del modelo físico de la base de datos.
81
1.13. Diseño de Interfaz Gráfica
82
1.13.2. Ventana de Ingreso de Partidas
83
1.13.3. Ventana de Lectura de Partidas
84
1.13.4. Ventana de Ingreso de nuevos Jugadores
85
1.13.5. Ventana de Inscripción de jugadores a división de torneo
86
1.13.6. Ventana de Creación de Torneos
87
1.13.7. Ventana de Administración de Torneos
88
1.13.8. Ventana de Creación de División de Torneo
89
1.13.9. Ventana de Resultados de Torneo
90
1.13.10. Ventana de Registro de Resultados
91
1.13.11. Ventana de Búsqueda de Partidas
92
1.13.12. Ventana de Edición de Partidas
Las características del panel “Editar Partida” de la ventana “Buscar Partida” son
descritas en la siguiente tabla:
93
1.13.13. Ventana de Selección de Jugador
94
1.13.14. Ventana de Edición de Jugadores
Las características del panel “Ingresar Jugadores” de la ventana “Elegir Jugador” son
descritas en la siguiente tabla:
95
1.13.15. Ventana de Selección de Torneo
96
1.13.16. Ventana de Edición de Torneo
97
1.13.17. Ventana de Cálculo de ELO en Torneo
98
1.13.18. Ventana de Cálculo de ELO FIDE
99
1.14. Estrategia de Planificación de Pruebas
Conclusión:
Tabla 68. Formulario para ejecución de pruebas del sistema a cada caso de uso
100
1.15. Casos de Prueba
La definición de los casos de prueba se realiza en cada etapa del proyecto. Estas
pruebas de funcionalidad consisten en verificar externamente la ejecución del
producto. Las funcionalidades del sistema a ser probadas son enumeradas en la
siguiente tabla:
Caso de Prueba
Casos de Uso Funcionalidades a probar
Mantenimiento de Ingresar al Mantenimiento de Jugadores
jugadores Editar Jugador
Ingresar a Inscribir de Jugadores a División de Torneo
Ingreso de Jugadores Inscribir Jugador
a División de Torneo Eliminar Jugador Inscrito en División de Torneo
Ingresar a Resultados de torneo
Emparejar Jugadores en torneo suizo
Emparejar ronda de torneo suizo con número impar de
jugadores
Emparejamiento de
Emparejar ronda un torneo suizo con número par de
Jugadores
jugadores
Emparejar Jugadores en torneo Round Robin a una vuelta
Emparejar Jugadores en torneo Round Robin de dos
vueltas
Ingresar resultados de Ingresar a Resultados de torneo
emparejamientos Ingresar Resultados
Ingresar partidas de Ingresar a módulo de Ingreso de Partidas
los enfrentamientos Registrar Partidas en Sistema
generados por sistema Reproducir Partidas generadas al Ingresar Resultados
Ingresar a Calcular de ELO a través de Ingreso de
Resultados
Calcular ELO de
Calcular ELO de un torneo administrado por el sistema
jugador
Calcular ELO de un torneo no administrado por el sistema
Calcular ELO FIDE de Jugador
Buscar Jugadores para inscribir
Buscar Jugadores
Buscar Jugadores para elegir
Buscar Partidas Ingresar a Buscar Partidas
101
Buscar Jugadores para elegir
Buscar Torneos Ingresar a Buscar Torneos
Ingresar Nuevas Ingresar a Buscar Partidas
Partidas Ingresar Nueva Partida
Ingresar Comentarios a Partida
Comentar Partidas
Editar Comentario de Partida
Leer Movimientos de Ingresar a Leer Partidas
Partidas Leer Partida
Ingresar a módulo de Ingreso de Partidas
Generar Reportes de Generar Reporte de Partida Ingresando una Partida
Partida Ingresar a Leer Partidas
Generar Reporte de Partida Leyendo una Partida
Ingresar Resultados de Torneo
Generar Reportes de Generar Reporte de Resultados Generales de Torneo
Torneo Ingresar Resultados por Ronda
Generar Reporte de Resultados de una Ronda de Torneo
Mostrar Movimientos Ingresar a Aprendizaje de Movimientos de Pieza de Ajedrez
de Piezas Generar Reporte de Partida Ingresando una Partida
102
1.16. Ejecución de Pruebas
A continuación se detallan las pruebas realizadas al sistema según los casos de uso:
Entrada Salida
Entrada Salida
103
OK
OK
Editar Torneo
Caso de Prueba Resultado Esperado Visto
Ingresar a ventana de El sistema muestra la pantalla de
administración de torneo. administración del torneo indicado.
Entrada Salida
OK
104
Entrada Salida
OK
OK
105
Eliminar Torneo
Caso de Prueba Resultado Esperado Visto
Entrada Salida
OK
106
1.16.2. Mantenimiento de divisiones de torneo
Figura 61. Se ingresan datos Figura 63. Se crea una nueva hoja en el
de nueva división de torneo. árbol “Vista de Torneo”.
OK
107
Editar División de Torneo
Caso de Prueba Resultado Esperado Visto
Ingresar a ventana de
El sistema muestra pantalla de
administración de torneo y
administración de torneo indicado.
seleccionar el torneo a editar.
Entrada Salida
OK
Entrada Salida
OK
OK
Figura 70. Se ingresa a
ventana de Edición de División
eligiendo una división. Figura 71. Se muestra la ventana
“Actualizar División de Torneo”.
108
Se actualiza la información de la división y el
sistema muestra el mensaje: “Los datos se
Editar información de división
han actualizado exitosamente”. Se crea una
antes de inicio de torneo.
pestaña en la ventana “Resultados de
torneo”.
Entrada Salida
OK
OK
Figura 75. El registro Iniciado Figura 76. Mensaje informativo del sistema.
muestra “SI”. Se inició división.
109
1.16.3. Mantenimiento de jugadores
OK
Registrar Jugador
Caso de Prueba Resultado Esperado Visto
No se ingresa el jugador y se muestra
Crear nuevo jugador sin ingresar el
el mensaje: “Ponga el Apellido Paterno.
apellido paterno.
Por favor”.
Entrada Salida
OK
110
Entrada Salida
OK
Editar Jugador
Caso de Prueba Resultado Esperado Visto
El sistema muestra la ventana de
Ingresar a ventana de actualización
actualización de información de
de información de jugadores.
jugadores.
Entrada Salida
OK
111
mensaje: ”Se ha actualizado
correctamente”.
Entrada Salida
Entrada Salida
OK
112
1.16.4. Ingreso de Jugadores a División de Torneo
OK
Inscribir Jugador
Caso de Prueba Resultado Esperado Visto
El sistema selecciona a todos los
Seleccionar a los jugadores a jugadores elegidos mostrándolos con
participar en la división del torneo. un signo de aprobación en una celda
de sus registros.
Entrada Salida
113
OK
Entrada Salida
114
OK
OK
Entrada Salida
OK
115
Figura 105. Se procede a eliminar
al jugador de identificador 33.
Figura 107. Se muestra en árbol que el
jugador “colonia, billy” ha sido
eliminado.
Eliminar a jugador inscrito El sistema muestra el mensaje “El
después de inicio de división de torneo ya se inició. No se puede
torneo. eliminar”.
Entrada Salida
OK
116
1.16.5. Emparejamiento de Jugadores
OK
OK
117
Emparejar en la primera ronda de El sistema asigna un identificador a cada
torneo superando la cantidad jugador y habilita el botón de ingreso de
mínima de jugadores requeridos. resultados de la primera ronda.
Entrada Salida
OK
OK
Figura 118. Se presiona botón
“Siguiente” sin ingresar todos los Figura 119. Mensaje de advertencia del
resultados de la ronda. sistema.
Entrada Salida
118
OK
Figura 120. Se presiona botón
“Siguiente” habiendo concluido el Figura 121. Mensaje de advertencia del
torneo. sistema.
De los jugadores 1, 2, 3, 4, 5, 6, 7 y 8 en
ese orden, se forman dos subgrupos (1,
2, 3, 4) y (5, 6, 7, 8). Juegan entonces el
primero del primer subgrupo con el
primero del segundo subgrupo (1,5), el
segundo del primer subgrupo con el
segundo del segundo subgrupo (2, 6) y
así sucesivamente. No hay restricciones
en cuanto a los colores.
OK
119
Para cada jugador se muestra en la
columna de título 2 de la ventana
Emparejar la ronda dos de cinco de “Resultados de torneo” el identificador
una división de torneo con una del rival, la letra ‘B’ ó ‘N’ que señala el
cantidad par de jugadores. color de piezas con que jugará y un
asterisco que determina que no se han
ingresado resultados del encuentro.
Entrada Salida
Del grupo de los que tienen 1.0 puntos
se obtiene la pareja (1,6). Como los dos
son del mismo grupo la pareja está bien
obtenida.
Del grupo de los que tienen 0.5 puntos
(4, 8, 3 y 7) el algoritmo determinó las
parejas (3, 8) y (4, 7). Como los cuatro
Se conocen los resultados
de son del mismo grupo la pareja está bien
rondas anteriores y la siguiente obtenida.
tabla de posiciones: Del grupo de 0 puntos se forma la pareja
(2, 5). Como los dos son del mismo
grupo la pareja está bien obtenida.
Por tanto los emparejamientos para la
ronda dos han sido correctos. Con OK
respecto a los colores de las piezas
todos los jugadores que jugaron con
Figura 124. Tabla de posiciones blancas lo hacen ahora con negras y
después de la ronda 1. viceversa.
120
Para cada jugador se muestra en la
columna de título 3 de la ventana
Emparejar la ronda tres de cinco de “Resultados de torneo” el identificador
una división de torneo con una del rival, la letra ‘B’ ó ‘N’ que señala el
cantidad par de jugadores. color de piezas con que jugará y un
asterisco que determina que no se han
ingresado resultados del encuentro.
Entrada Salida
Las parejas que salen del grupo de los
que tienen 1.5 puntos (1, 6, 8 y 7): (1, 8)
y (6,7) son correctas puesto que es la
primera vez que juegan entre sí.
Se conocen los resultados de
Como 5 está solo (1.0 puntos) se une al
rondas anteriores y la siguiente
grupo de 4 y 3. Por tanto la pareja (5, 3)
tabla de posiciones:
es correcta. Al final queda la pareja (4,
2).
Los emparejamientos son correctos.
Respecto a los colores ningún jugador ha
jugado tres veces seguidas con un OK
mismo color de piezas.
121
Entrada Salida
Las parejas que salen del grupo de los
que tienen 2.0 puntos (1, 6, 8 y 7): (1, 7)
y (8,6) son correctas puesto que es la
primera vez que juegan entre sí.
122
Figura 131. Listado de emparejamientos
Figura 130. Tabla de posiciones de jugadores de la ronda cinco.
después de la ronda 4.
Entrada Salida
123
Aunque existe triple empate en el primer
lugar, el ganador de esta división de
torneo es el jugador 6 tomando como
criterios de desempate los métodos de la
Se asume la siguiente tabla de
Mediana, de Solkoff y Acumulativo en
posiciones:
ese orden.
OK
OK
124
(3, 4). Juegan entonces el primero del
primer subgrupo con el primero del
segundo subgrupo (1, 3) y el segundo
del primer subgrupo con el segundo del
segundo subgrupo (2, 4). Con respecto a
los colores de las piezas no existen
restricciones para la primera ronda.
Para cada jugador se muestra en la
columna de título 2 de la ventana
Emparejar la ronda dos de tres de
“Resultados de torneo” el identificador
una división de torneo con una
del rival, la letra ‘B’ ó ‘N’ que señala el
cantidad impar de jugadores que
color de piezas con que jugará y un
supere la cantidad mínima
asterisco que determina que no se han
requerida.
ingresado resultados del encuentro. Se
debe elegir a un jugador como BYE
Entrada Salida
Puesto que el jugador 4 es el último de la
puntuación y anteriormente no ha sido
BYE le corresponde ahora ser BYE
(descansa en esta ronda.)
125
Para cada jugador se muestra en la
columna de título 3 de la ventana
Emparejar la ronda tres de tres de
“Resultados de torneo” el identificador
una división de torneo con una
del rival, la letra ‘B’ ó ‘N’ que señala el
cantidad impar de jugadores que
color de piezas con que jugará y un
supere la cantidad mínima
asterisco que determina que no se han
requerida.
ingresado resultados del encuentro. Se
debe elegir a un jugador como BYE.
Entrada Salida
Puesto que el jugador 3 es el último de la
puntuación (0.5 puntos) y anteriormente
no ha sido BYE le corresponde ahora ser
BYE (descansa en esta ronda).
126
Entrada Salida
Aunque existe triple empate en el primer
lugar, el ganador de esta división de
Se asume la siguiente tabla de torneo es el jugador 1 tomando como
posiciones: criterios de desempate los métodos de la
Mediana, de Solkoff y Acumulativo en
ese orden.
OK
Emparejar Jugadores en torneo Round Robin o Todos Contra Todos a una vuelta
Caso de Prueba Resultado Esperado Visto
Entrada Salida
OK
127
OK
OK
Figura 147. Se inicia torneo con Figura 148. Se asigna identificador y los
cinco jugadores. rivales para todas las rondas.
OK
Figura 149. Se inicia torneo con Figura 150. Se asigna identificador y los
seis jugadores. rivales para todas las rondas.
128
Emparejar Jugadores en torneo Round Robin o Todos Contra Todos de dos vueltas
Caso de Prueba Resultado Esperado Visto
Emparejar ronda en torneo Round No se ejecuta ningún emparejamiento y
Robin o todos contra todos de dos el sistema muestra el mensaje:”No hay
vueltas sin jugadores inscritos. jugadores para emparejar”.
Entrada Salida
OK
Figura 151. Se inicia torneo sin Figura 152. Mensaje informativo del
inscribir jugadores sistema.
Entrada Salida
OK
129
OK
Figura 155. Se inicia torneo con Figura 156. Se asigna identificador y los
cinco jugadores. rivales para todas las rondas.
OK
Figura 157. Se inicia torneo con Figura 158. Se asigna identificador y los
seis jugadores. rivales para todas las rondas.
130
1.16.6. Ingresar Resultados de Emparejamientos
OK
OK
Figura 161. Se presiona el
botón “R1” para ingreso de
resultados. Figura 162. Se muestra ventana
“Registrar Resultados” para la ronda 1.
Ingresar Resultados
Caso de Prueba Resultado Esperado Visto
131
Ingresar resultados de los Se muestra lista de opciones en cada
enfrentamientos de la ronda uno de los registros para ingresar el
actual. resultado adecuado.
Entrada Salida
OK
OK
OK
132
1.16.7. Ingresar partidas de los enfrentamientos generados por sistema
Las pruebas de caso de uso “Ingresar partidas de los enfrentamientos generados por
sistema” son descritas en la siguiente tabla:
OK
Entrada Salida
OK
133
El sistema muestra la ventana de
ingreso de partidas del sistema con un
Ingresar a ventana de Ingreso de
tablero de ajedrez en posición inicial y
Partidas al Sistema.
con los datos de los jugadores y del
torneo cargados en la aplicación.
Entrada Salida
OK
OK
134
Registrar Partida en Sistema Si la pieza es ubicada en una posición
arrastrando las piezas a posiciones diferente a la señalada la pieza vuelve a
no válidas. su posición original.
Entrada Salida
OK
OK
135
El sistema realiza las jugadas
especificadas en lista de movimientos de
Reproducir partida.
la ventana pudiendo avanzar y
retroceder si así se requiriese.
Entrada Salida
OK
136
1.16.8. Calcular ELO de jugador
Las pruebas de caso de uso “Calcular ELO de jugador” son descritas en la siguiente
tabla:
OK
OK
137
El sistema muestra la ventana de cálculo
de ELO mostrando el nuevo ELO del
Ingresar a la ventana de cálculo de jugador seleccionado y el detalle de los
ELO eligiendo a jugador. resultados del jugador hasta ese
momento que generan el cálculo del
nuevo ELO.
Entrada Salida
OK
138
Figura 190. Se generan datos para
cálculo de ELO.
Aplicando la fórmula:
Nuevo ELO = ELO promedio de
Calcular ELO de un jugador oponentes + diferencial de porcentaje de
principiante. puntos ganados.
Para hallar el valor del diferencial, ver
Sistemas de Rating FIDE en Anexos.
Entrada Salida
OK
139
OK
Aplicado la fórmula:
Calcular ELO de un jugador Nuevo ELO = valor actual ELO +
experimentado. coeficiente * (puntos realizados - puntos
esperados).
Entrada Salida
140
Aplicando la fórmula:
Nuevo ELO = promedio de ELOs de
Calcular ELO de un jugador contrincantes + diferencial de porcentaje
principiante. de puntos obtenidos.
Para hallar el valor del diferencial, ver
Sistemas de Rating FIDE en Anexos.
Entrada Salida
OK
141
Figura 200. Se muestra la ventana
“Cálculo de ELO”.
OK
142
1.16.9. Buscar Jugadores
Las pruebas de caso de uso “Buscar Jugadores” son descritas en la siguiente tabla:
OK
Figura 203. Se presiona botón
“Agregar Jugadores” en
“Administración de torneos”.
OK
Figura 205. Se ingresa criterio
de búsqueda. Figura 206. Se muestran registros que
coinciden con el criterio ingresado.
143
Ingresar criterio de búsqueda
para hallar jugador sin El sistema muestra la grilla vacía.
coincidencias.
Entrada Salida
OK
Figura 207. Se ingresa criterio
de búsqueda. Figura 208. Se muestra grilla vacía si
ningún registro coincide con criterio
ingresado.
OK
144
OK
Figura 211. Se presiona botón
“…” que elige a jugador de
piezas blancas de la partida.
Figura 212. Se muestra la ventana
“Elegir Jugador”.
OK
Figura 213. Se ingresa criterio
Figura 214. Se muestran registros que
de búsqueda.
coinciden con el criterio ingresado.
OK
Figura 215. Se ingresa criterio
de búsqueda.
Figura 216. Se muestra grilla vacía si
ningún registro coincide con criterio
ingresado.
145
1.16.10. Buscar Partidas
Las pruebas de caso de uso “Buscar Partidas” son descritas en la siguiente tabla:
OK
Figura 219. Se ingresa criterio
de búsqueda. Figura 220. Se muestran registros que
coinciden con el criterio ingresado.
146
Ingresar criterio de búsqueda
para hallar partida sin El sistema muestra la grilla vacía.
coincidencias.
Entrada Salida
OK
Figura 221. Se ingresa criterio
de búsqueda.
Figura 222. Se muestra grilla vacía si
ningún registro coincide con criterio
ingresado.
147
1.16.11. Buscar Torneos
Las pruebas de caso de uso “Buscar Torneos” son descritas en la siguiente tabla:
OK
Entrada Salida
OK
Figura 225. Se presiona
botón “…” que elige torneo
donde se desarrolla la partida.
148
Ingresar criterio de búsqueda
Los campos cotejados son los nombres
para hallar jugador con
de torneo y responsable de torneo.
coincidencias.
Entrada Salida
OK
Figura 227. Se ingresa criterio
de búsqueda. Figura 228. Se muestran registros que
coinciden con el criterio ingresado.
OK
Figura 229. Se ingresa criterio
de búsqueda. Figura 230. Se muestra grilla vacía si
ningún registro coincide con criterio
ingresado.
149
1.16.12. Ingresar Nuevas Partidas
Las pruebas de caso de uso “Ingresar Nuevas Partidas” son descritas a continuación:
OK
Entrada Salida
OK
150
Registrar movimiento en
Todas las piezas de ajedrez del sistema
Sistema arrastrando las
tienen un comportamiento acorde a las
piezas según las reglas del
reglas generales del ajedrez.
ajedrez.
Entrada Salida
OK
Registrar movimiento en
Si la pieza es ubicada en una posición
Sistema arrastrando las
diferente a la señalada la pieza vuelve a
piezas a posiciones no
su posición original.
válidas.
Entrada Salida
OK
Entrada Salida
OK
151
Ingresar movimientos de El sistema ejecuta correctamente el
enroque largo. movimiento de enroque largo.
Entrada Salida
OK
Entrada Salida
OK
Entrada Salida
OK
152
El sistema ejecuta correctamente la
Efectuar coronación de peón.
coronación de peones.
Entrada Salida
OK
Figura 247. El peón blanco en Figura 248. El peón blanco llega a última
casilla g7 avanza una casilla. fila y se convierte en dama.
OK
Entrada Salida
OK
153
Quitar notación de movimiento El sistema realiza la eliminación de la
al retroceder jugada. notación del. movimiento deshecho.
Entrada Salida
OK
Figura 253. Lista de Figura 254. Lista de notaciones después
notaciones previo al retroceso. del retroceso.
OK
Figura 255. No se elige al
jugador de piezas blancas de Figura 256. Mensaje de advertencia del
la partida a registrar. sistema.
OK
Figura 257. No se elige al
jugador de piezas blancas de Figura 258. Mensaje de advertencia del
la partida a registrar. sistema.
154
OK
Figura 259. No se ha
realizado ninguna jugada de la Figura 260. Mensaje de advertencia del
partida a registrar. sistema.
OK
Figura 261. No se elige el
torneo donde se realiza la Figura 262. Mensaje de advertencia del
partida a registrar. sistema.
155
1.16.13. Comentar Partidas
Las pruebas de caso de uso “Comentar Partidas” son descritas en la siguiente tabla:
OK
Entrada Salida
OK
156
Registrar comentarios de un El comentario es registrado y mostrado
movimiento anteriormente en el área de texto de la pestaña
realizado. “Comentar” de la ventana.
Entrada Salida
OK
Entrada Salida
OK
157
Registrar comentarios de un El comentario es editado y mostrado en
movimiento anteriormente el área de texto de la pestaña
realizado. “Comentar” de la ventana.
Entrada Salida
OK
158
1.16.14. Leer Movimientos de Partida
Entrada Salida
OK
Entrada Salida
OK
Figura 278. Se elige la pestaña
“PGN”.
Figura 279. Se activa el panel de la
pestaña “PGN”.
159
Leer Partida
Caso de Prueba Resultado Esperado Visto
Entrada Salida
OK
Entrada Salida
160
Figura 284. Mensaje de operación
exitosa.
OK
Figura 283. Se ingresan los
movimientos de una partida con
comentarios.
Entrada Salida
OK
Entrada Salida
OK
Figura 288. No se ingresa al
jugador de piezas blancas de la Figura 289. Mensaje de advertencia del
partida. sistema.
161
Registrar partida sin determinar El sistema muestra el mensaje “Elija al
al jugador de piezas negras. jugador de piezas negras. Por favor”
Entrada Salida
OK
Figura 290. No se ingresa al
jugador de piezas negras de la Figura 291. Mensaje de advertencia del
partida. sistema.
Entrada Salida
OK
.
Figura 293. Mensaje de advertencia del
Figura 292. Se intenta guardar
sistema.
partida sin ingresar movimientos.
Entrada Salida
OK
Figura 294. No se ingresa el
torneo de la partida. Figura 295. Mensaje de advertencia del
sistema.
162
Entrada Salida
163
1.16.15. Generar Reportes de Partida
OK
Entrada Salida
OK
164
El sistema abre un archivo de formato pdf
que contiene los datos generales de la
partida, el gráfico del tablero de juego con
Generar reporte de partida.
las piezas en las posiciones actuales y el
detalle de los comentarios ingresados de la
partida.
Entrada Salida
OK
Entrada Salida
OK
165
Generar Reporte de Partida Leyendo una Partida
Caso de Prueba Resultado Esperado Visto
Entrada Salida
OK
Entrada Salida
OK
Figura 309. Movimientos
generados de la partida.
166
1.16.16. Pruebas de Caso de Uso: Generar Reportes de Torneo
Entrada Salida
OK
Entrada Salida
167
Figura 314. Mensaje informativo del
sistema.
OK
OK
Figura 316. Se presiona botón
“Ingresar Resultados”.
168
Entrada Salida
OK
Figura 318. Se presiona el
botón “R1” para ingreso de
Figura 319. Se muestra la ventana
resultados
“Registrar Resultados” para la ronda
uno.
169
1.16.17. Pruebas de Caso de Uso: Mostrar Movimientos de Piezas
OK
OK
170
Elegir opción Alfil de menú El sistema muestra la ventana de
Aprendizaje. aprendizaje de movimientos del alfil.
Entrada Salida
OK
Entrada Salida
OK
171
Elegir opción Rey de menú El sistema muestra la ventana de
Aprendizaje. aprendizaje de movimientos del rey.
Entrada Salida
OK
Entrada Salida
OK
172
Elegir opción Torre de menú El sistema muestra la ventana de
Aprendizaje. aprendizaje de movimientos de la torre.
Entrada Salida
OK
Entrada Salida
OK
173
Elegir opción Dama de menú El sistema muestra la ventana de
Aprendizaje. aprendizaje de movimientos de la dama.
Entrada Salida
OK
Entrada Salida
OK
174
Elegir opción Caballo de El sistema muestra la ventana de
menú Aprendizaje. aprendizaje de movimientos del caballo.
Entrada Salida
OK
Entrada Salida
OK
175
1.17. Sistema de Desempate de Torneos
Sistemas de Desempate
Orden Puntos
1 Mediana
2 Solkoff
3 Acumulativo
Tabla de Posiciones
Jugador Puntos
Ana 4.0
Billy 3.0
Coco 3.0
Danny 3.0
Erick 3.0
Franco 2.5
Gino 2.5
Henry 2.0
Iván 2.0
Jorge 2.0
Kenny 1.5
Lalo 1.0
Marco 1.0
176
Como se puede apreciar, existen cuatro jugadores empatados en el segundo lugar que
necesitan ser desempatados.
1.17.1. Mediana
El sistema de la mediana funciona al comparar los puntajes de los oponentes que los
jugadores empatados enfrentaron durante el torneo. El objetivo es premiar a la
persona que jugó con los oponentes más fuertes.
El sistema funciona sumando los puntajes de todos los oponentes del jugador sin
considerar el puntaje mas bajo. Utilizando los resultados del torneo de ejemplo, se
aplica este sistema de desempate a los cuatro jugadores empatados en el segundo
lugar con tres puntos.
Tabla 89. Tabla para cálculo de Mediana de Billy, Coco, Danny y Erick.
1.17.2. Solkoff
El sistema Solkoff es similar a la Mediana con la excepción que todos los puntajes son
considerados en el cálculo. Con el sistema Solkoff, el ejemplo del torneo sería de esta
forma:
177
Tabla de Cálculo de puntaje Solkoff
Billy Danny Erick
Erick 3 Ana 4 Franco 2½
Henry 2 Henry 2 Gino 2½
Iván 2 Lalo 1 Jorge 2
Marco 1 Marco 1 Kenny 1½
Total 8 Total 8 Total 8½
Tabla 90. Tabla para cálculo de puntaje Solkoff de Billy, Danny y Erick
1.17.3. Acumulativo
Digamos que Billy ganó su primer, tercer y cuarto juego, y Danny ganó su primer,
segundo y cuarto juego. El puntaje acumulativo sería:
Terminando con el ejemplo, Danny recibiría el cuarto lugar y Billy obtendría el quinto
puesto. Ejemplo tomado de [14].
178
1.18. Cálculo del ELO en un torneo
Figura 348. Fórmula de ELO en caso lograr mas del 50% de puntos posibles.
El rendimiento de un jugador que ha obtenido más del 50% de los puntos posibles
equivale a la media de los puntos Elo de sus oponentes valorados más 12.5 por cada
medio punto que supere el 50%.
179
1.18.3. Tercer Caso
Rendimiento si se han obtenido menos del 50% de los puntos posibles en un torneo
suizo o un por equipos.
Figura 349. Fórmula de ELO en caso lograr menos del 50% de puntos posibles.
El rendimiento de un jugador que ha obtenido más del 50% de los puntos posibles en
un torneo suizo o por equipos equivale a la media de los puntos Elo de sus oponentes
valorados más la diferencia de la valoración normal. Información tomada de [17].
180
1.19. Entrada de un Jugador en la lista de ELO FIDE
En este caso el Elo de su entrada en la lista será la media ponderada de los tres
rendimientos. Información tomada de [3]. Para realizar el cálculo se aplicará la
siguiente fórmula:
181
1.20. Sistema de Rating FIDE
Las tablas que siguen muestran la conversión del porcentaje de puntuación “p” en
diferencias de rating “dp”. Para una puntuación de 0 o 100% el valor de dp es
necesariamente indeterminado. Información tomada de [4].
p dp p dp p dp p dp p dp p dp
1.00 0.83 273 0.66 117 0.49 -7 0.32 -133 0.15 -296
0.99 677 0.82 262 0.65 110 0.48 -14 0.31 -141 0.14 -309
0.98 589 0.81 251 0.64 102 0.47 -21 0.30 -149 0.13 -322
0.97 538 0.80 240 0.63 95 0.46 -29 0.29 -158 0.12 -336
0.96 501 0.79 230 0.62 87 0.45 -36 0.28 -166 0.11 -351
0.95 470 0.78 220 0.61 80 0.44 -43 0.27 -175 0.10 -366
0.94 444 0.77 211 0.60 72 0.43 -50 0.26 -184 0.09 -383
0.93 422 0.76 202 0.59 65 0.42 -57 0.25 -193 0.08 -401
0.92 401 0.75 193 0.58 57 0.41 -65 0.24 -202 0.07 -422
0.91 383 0.74 184 0.57 50 0.40 -72 0.23 -211 0.06 -444
0.90 366 0.73 175 0.56 43 0.39 -80 0.22 -220 0.05 -470
0.89 351 0.72 166 0.55 36 0.38 -87 0.21 -230 0.04 -501
0.88 336 0.71 158 0.54 29 0.37 -95 0.20 -240 0.03 -538
0.87 322 0.70 149 0.53 21 0.36 -102 0.19 -251 0.02 -589
0.86 309 0.69 141 0.52 14 0.35 -110 0.18 -262 0.01 -677
0.85 296 0.68 133 0.51 7 0.34 -117 0.17 -273 0.00
182
Esta tabla muestra la conversión de diferencia de rating “D” en probabilidad de
puntuación “Pp” para el jugador mayor “H” o menor “L” rankeado, respectivamente.
0-3 0.5 0.5 92-98 0.63 0.37 198-206 0.76 0.24 345-357 0.89 0.11
4-10 0.51 0.49 99-106 0.64 0.36 207-215 0.77 0.23 358-374 0.9 0.1
11-17 0.52 0.48 107-113 0.65 0.35 216-225 0.78 0.22 375-391 0.91 0.09
18-25 0.53 0.47 114-121 0.66 0.34 226-235 0.79 0.21 392-411 0.92 0.08
26-32 0.54 0.46 122-129 0.67 0.33 236-245 0.8 0.2 412-432 0.93 0.07
33-39 0.55 0.45 130-137 0.68 0.32 246-256 0.81 0.19 433-456 0.94 0.06
40-46 0.56 0.44 138-145 0.69 0.31 257-267 0.82 0.18 457-484 0.95 0.05
47-53 0.57 0.43 146-153 0.7 0.3 268-278 0.83 0.17 485-517 0.96 0.04
54-61 0.58 0.42 154-162 0.71 0.29 279-290 0.84 0.16 518-559 0.97 0.03
62-68 0.59 0.41 163-170 0.72 0.28 291-302 0.85 0.15 560-619 0.98 0.02
69-76 0.6 0.4 171-179 0.73 0.27 303-315 0.86 0.14 620-735 0.99 0.01
77-83 0.61 0.39 180-188 0.74 0.26 316-328 0.87 0.13 over 735 1 0
183
1.21. Herramientas de construcción de Software
En esta sección del documento se describirán las herramientas que fueron utilizadas
en la construcción del software del proyecto.
184
1.21.2. Librerías utilizadas en Construcción
Librería para
manipulaciones de datos
Jdom.jar 1.4.1_02 www.jdom.org
XML optimizados para
Java.
185
1.22. Instalación y Ejecución del Sistema
186
1.23. Descripción de menús del Sistema
Las opciones disponibles del menú Inicio son se detallan en la siguiente tabla.
Imagen de
menú
187
1.23.2. Menú Partidas del Sistema
Imagen de
menú
188
1.23.3. Menú ELO del Sistema
Imagen de
menú
189
1.24. Descripción de funcionalidades del Sistema
190
1.24.3. Inscribir jugador a división de torneo
191
1.24.5. Emparejar jugadores
Una vez que se ha inscrito a todos los jugadores de la división de torneo a administrar
se ingresar a la ventana “Resultados de torneo” y se presiona el botón naranja
“Siguiente”, el cual asignará a cada jugador el contrincante a quién y el color de piezas
con que jugará. Los emparejamientos son registrados automáticamente por el sistema.
192
1.24.7. Registrar Partidas
193
1.24.9. Calcular ELO de Jugador en torneo
194
1.25. Algoritmo de emparejamiento de un torneo tipo suizo
Para ello se dividirá la explicación analizando las cinco funciones más importantes que
realizan esta tarea, las cuales son las siguientes:
3 proponerRivales
4 llenarMatrizPareos
5 dameMatrizdeRivales
195
1.25.1. La función emparejarSegunGrupos
Función emparejarSegunGrupos
descripción
public int emparejarSegunGrupos( int ronda,
grupo[] gruposFormados,
int idDivision,
ArrayList<jugadorxDivision> jugadoresdeTorneo,
boolean condicionColor){
int totalGrupos=0, resultado=0, ultimo =0 , rpta2 = 0;
ArrayList<jugadorxDivision> listadeGrupo, penultimo, nuevoGrupo;
196
this.ordenarJugadores(listadeGrupo);
resultado = emparejarDentrodeGrupo(ronda, listadeGrupo, tipo, idDivision, jugadoresdeTorneo,
condicionColor);
tipo = "homogeneo";
if(resultado == 1 ){
//exito = true; /*Sigo nomas*/
}
else if(resultado==0 && k<totalGrupos-1){
/*Ya estan emparejados*/
tipo = "heterogeneo"; /*para el siguiente grupo*/
}
else if(resultado == 3){
System.out.println("ULTIMO GRUPO DE PUNTUACION");
if(k>=1){
ultimo = k-1;
do{
if (ultimo ==0 || ultimo == -1) break;
penultimo = gruposFormados[ultimo].dameListaJugadoresdeGrupo();
this.limpiarPareos(listadeGrupo);
this.limpiarPareos(penultimo);
nuevoGrupo = this.combinarUltimosGrupos(listadeGrupo,penultimo);
boolean resultadoColor;
if(condicionColor== true)
resultadoColor = elGrupoBL.sePuedePareoxColores(ronda, nuevoGrupo);
else resultadoColor = false;
197
1.25.2. La función emparejarDentrodeGrupo
A continuación se procede a dividir al grupo final en dos subgrupos. Los jugadores del
primer subgrupo intentarán ser emparejados con los jugadores del segundo grupo, de
aquello se encargará la función proponerRivales.
Función emparejarDentrodeGrupo
descripción
private int emparejarDentrodeGrupo( int ronda,
ArrayList<jugadorxDivision> listaJugadores,
String tipo,
int idDivision,
ArrayList<jugadorxDivision> jugadoresdeTorneo,
boolean condicionColor){
boolean mandadoTransfugas = false;
int rpta =0;
int tamanoLista =listaJugadores.size();
listaTransfugas = new ArrayList<jugadorxDivision>();
ArrayList<jugadorxDivision> transfugasAdicionales;
transfugasAdicionales =
this.elGrupoBL.noPuedenJugarenelGrupo(ronda, listaJugadores, condicionColor);
if(this.actualGrupoTrabajando == listadePuntajes.size()-2 ){
ArrayList<jugadorxDivision> noEmparejados;
198
noEmparejados =
this.elGrupoBL.noPuedenJugarenelGrupo(ronda, listaJugadores, condicionColor);
if(noEmparejados.size()>0){
return 3;
}
}
}
else return 3;
if(tamanoLista==0) return 0;
else if(tamanoLista==1){
for(jugadorxDivision transfuga : listaJugadores){
listaTransfugas.add(transfuga);
}
this.crearNuevosGruposPuntuacion(ronda,listaTransfugas, idDivision);
return 0;
}
}
199
1.25.3. La función proponerRivales
Esta función se encarga de determinar a las parejas que tendrán que jugar en la ronda
indicada. Esto se logra al determinar qué jugador del subgrupo S2 tiene que jugar
contra qué jugador del subgrupo S1
Para ello se determina los posibles rivales de cada jugador del subgrupo S1
procediéndose a formar una matriz con la terna de jugadores del subgrupo S2 con que
cada jugador del subgrupo S1 puede jugar.
Después se procede a probar cada una de las ternas formadas hasta seleccionar a la
primera combinación exitosa de emparejamientos. Finamente se procede a asignarse
a los jugadores los colores de piezas con los que tendrán que jugar.
Si los emparejamientos han sido exitosos la función devuelve uno, sino se devuelve 3.
Función proponerRivales
descripción
public int proponerRivales(int ronda,
ArrayList<jugadorxDivision> s1,
ArrayList<jugadorxDivision> s2,
int idDivision,
boolean condicionColor){
jugadorxDivision[][] planchadeRivales;
ArrayList<jugadorxDivision> jugadoresParaS1;
int alto=1, ancho=s1.size();
for(jugadorxDivision jxdS1:s1){
jugadoresParaS1 = this.elGrupoBL.listaJugadoresAptos(ronda, jxdS1, s2, condicionColor);
if(jugadoresParaS1==null || jugadoresParaS1.size() == 0) return 3;
/*Pasan todos al siguiente grupo*/
//this.ordenarJugadores(jugadoresParaS1);
jxdS1.setTEMPListaPosiblesRivales(jugadoresParaS1);
alto *= jxdS1.getTEMPListaPosiblesRivales().size();
}
200
"+jugadorS2.getNumeroId()+")");
jugadorS1.setTEMPContrincante(jugadorS2.getNumeroId());
jugadorS2.setTEMPContrincante(jugadorS1.getNumeroId());
int dato = jugadorS1.getTEMPFlotante();
if(dato == 1){
jugadorS2.setTEMPFlotante(2);
}
/*Ahora tengo que determinar el color*/
establecerColores(ronda, jugadorS1, jugadorS2, idDivision);
jugadoresPendientes.remove(planchadeRivales[m][n]);
}
if(jugadoresPendientes.size()== 0){
System.out.println("---Pareo Terminado---");
return 1;
}
else if(jugadoresPendientes.size()== 1){
condicion1 =
this.puedeJugarenelGrupo(jugadoresPendientes.get(0), this.actualGrupoTrabajando+1);
if( condicion1 == true){
this.crearNuevosGruposPuntuacion(ronda, jugadoresPendientes, idDivision);
return 1;
}
}
else{/*Faltan emparejar*/
/*Determinar si los jugadores pendientes se pueden emparejar entre si*/
int resultado;
if(condicionColor == true)
condicion2 = this.elGrupoBL.sePuedePareoxColores(ronda, jugadoresPendientes);
else condicion2 = false;
if(condicion2 == false){
condicion3 = this.elGrupoBL.noPuedenJugarEnEsteGrupo(ronda, jugadoresPendientes,
condicionColor);
if(condicion3 == false){
ArrayList<jugadorxDivision> subGrupoS1 = new ArrayList<jugadorxDivision>();
ArrayList<jugadorxDivision> subGrupoS2 = new ArrayList<jugadorxDivision>();
this.elGrupoBL.crearSubGrupo(jugadoresPendientes, ronda, "homogeneo",
subGrupoS1, subGrupoS2);
printGrupoS1S2(subGrupoS1, subGrupoS2);
resultado = proponerRivales(ronda, subGrupoS1, subGrupoS2, idDivision,
condicionColor);
if(resultado == 1) {
return 1;
}
else continue;
}
else continue;
}
else continue;
}
}//condicion
}//for
System.out.println("NO SE COMPLETO PAREO");
return 3;
}
201
1.25.4. La función llenarMatrizPareos
Función llenarMatrizPareos
descripción
void llenarMatrizPareos(int indColumna,
int veces,
int alto,
ArrayList<jugadorxDivision> s1,
jugadorxDivision[][] planchadeRivales){
jxd = s1.get(indColumna);
turnosRival = jxd.getTEMPListaPosiblesRivales().size();
contadorTotal = 0;
while(contadorTotal < alto){
for(int i=0; i<turnosRival; i++){
contadorRepetidas =0;
jxdRival = jxd.getTEMPListaPosiblesRivales().get(i);
while(contadorRepetidas < veces){
planchadeRivales[contadorTotal][indColumna] = jxdRival;
contadorTotal++;
contadorRepetidas++;
}
}
}
}
202
1.25.5. La función dameMatrizdeRivales
Se encarga de crear la matriz con la terna de jugadores del subgrupo S2 que serán
emparejados con los jugadores del subgrupo S1.
Función dameMatrizdeRivales
descripción
jugadorxDivision[][] dameMatrizdeRivales(int ronda,
ArrayList<jugadorxDivision> s1,
ArrayList<jugadorxDivision> s2,
int alto,
int ancho){
jugadorxDivision[][] planchadeRivales;
int tamanoS1 = s1.size();
this.ordenarJugadoresxTamLista(s1);
203
1.26. Optimización del algoritmo de Sistema Suizo
Se toma la primera combinación, para este caso {5,6,7,8} y se asignan como rivales de
los jugadores {1,2,3,4}, es decir 1 contra 5, 2 contra 6, 3 contra 7 y 4 contra 8, si no es
posible emparejar a todos los jugadores se continúa con la siguiente serie, para este
caso {5,6,8,7}, y así sucesivamente hasta encontrar la terna de jugadores adecuada
que haga posible que todos los jugadores queden emparejados.
204
1.28. Procedimiento Optimizado
Es por eso que en el presente proyecto se implementa una forma novedosa y eficiente
de obtención de emparejamientos, la cual se procederá a describir a continuación:
El algoritmo se encargará de calcular con qué jugadores del grupo S2 podrán jugar
cada uno de los jugadores del subgrupo S1. Así tendríamos:
Así, cada una de las ternas formadas (en caso estar compuestas por jugadores
diferentes) es potencialmente una posible solución, mejorando en gran medida la
rapidez en la obtención de los emparejamientos.
205