martes, 22 de julio de 2014

Frikonsejo: Generador de Ligas para Blood Bowl

     ¿Alguna vez habéis jugado alguna liga de Blood Bowl (o cualquier otro juego basado en enfrentamientos entre equipos 1 contra 1) y habéis tenido dificultades en planificar las jornadas? Yo sí.



     Empecé a jugar a Blood Bowl hace ya más de 20 años y al principio teníamos problemas para hacer los emparejamientos. Es decir, la primera jornada era fácil, la segunda también, pero a partir de la tercera la cosa se complicaba. Así que junto con unos amigos diseñamos un algoritmo, unas reglas a seguir, para definir los emparejamientos de forma sencilla y a mano (sí, has leído bien).

     Seguro que ahora hay multitud de aplicaciones por la web para hacer esto, pero si nos dejásemos llevar siempre por todo lo que hay hecho sin pensar, creo que se nos freiría el cerebro, así que chicos y chicas, a veces va bien estrujarlo un poco para crear cosas de este tipo y no dejarnos llevar por la tecnología tan fácilmente.

     Y después de la perorata, os paso a detallar el algoritmo por pasos, y los iré desarrollando con un ejemplo.

1º) Identificar cuantos equipos van a jugar en la liga. Si son impares, ten en cuenta que siempre habrá un equipo que descanse en cada jornada (que dependen en qué juego no viene mal del todo). 

En el ejemplo pondremos 6 equipos.


2º) Organiza los equipos por parejas (el orden realmente da igual), y fuerza a que el número de equipos sea impar, dejando el número suelto al final del todo. Con esto ya tendríamos la configuración de la primera jornada.

En el ejemplo, los 6 equipos los convertimos a 7. Si hubieramos elegido 7 equipos, no habría que modificarlo.




3º) ¡A girar! Este paso consiste en desplazar una posición todos los números, (el sentido da igual). En el caso de que el número de equipos sea impar, el equipo que quede suelto se sustituirá por el equipo ficticio añadido.

En el ejemplo, seguiré el sentido de las agujas del reloj.
Y quedaría así:
Como el número de equipos original es par, sustituyo el enfrentamiento 7 - 4 por 6 - 4.

4º) Repetir el paso anterior hasta que de nuevo, el número del equipo suelto coincida con el de la primera jornada.

     Y con esto ya tienes la configuración de las diferentes jornadas.

     Este método es sencillo y funciona, pero para los más expertos seguro que detectan mejoras. Paso a detallar algunas de ellas:

a) Evitar el seguimiento. Esta configuración hace que a veces un equipo siempre se enfrente a otro que acaba de enfrentarse a un tercero. ¿Qué quiero decir? Que el equipo x siempre juega en la jornada siguiente contra el equipo que ha jugado en la jornada anterior el equipo y. Esto en Blood Bowl puede ser desequilibrante si el equipo y es tocho y el x es ágil, lo normal es que se enfrente a equipos machacados y tenga ventaja. Para ello, lo mejor es una vez con la configuración de todas las jornadas, aplicar azar para el orden. Por tanto, y para no usar tecnología, puedes usar papelitos de papel en una bolsa y sacarlos para marcar el orden real de juego de las jornadas.

Por ejemplo, en la liga de 10 equipos mostrada abajo, si os fijáis, el equipo 1 se enfrenta siempre al que se ha enfrentado el equipo 8 en la jornada anterior. En la jornada 2, el equipo 01 se enfrenta al 03, que en el partido de la jornada 1 estuvo el partido 03 - 08. En la jornada 3, el equipo 01 se enfrenta al 05, que en la jornada 2 estuvo el partido 05 - 08. Y así se continúa en el resto de jornadas.

b) Configuración de ida y vuelta. Puede que te interesen las ligas largas para asegurar dos enfrentamientos entre cada pareja de equipos. Tan simple como coger las jornadas, el equipo que aparece a la izquierda juega en casa, y el de la derecha será el visitante. Una vez terminada la primera vuelta, las jornadas se repiten pero con el orden cambiado.

     Seguro que hay más mejoras, pero a mi esta fórmula me ha servido para muchos años.

     Para terminar, os voy a poner la configuración de varias ligas entre 4 y 10 equipos (sin desordenar). Hice un programa en COBOL (para los que digan que el COBOL no sirve para nada friki, no es cierto) parametrizable, pero desgraciadamente lo perdí. Pero para quién esté interesado, sí que tengo una pequeña codificación en lenguaje de programación C, no la he compilado ni probado, por lo que puede que tenga algún tipo de error, pero es una base bastante fiable. Si a alguien le interesa, que me lo pida y la busco para colgarla. 

EQUIPOS = 04

JORNADA 01
02 - 03
01 - 04

JORNADA 02
03 - 01
02 - 04

JORNADA 03
01 - 02
03 - 04

=========================
EQUIPOS = 05

JORNADA 01
02 - 05
03 - 04
  01

JORNADA 02
03 - 01
04 - 05
  02

JORNADA 03
04 - 02
05 - 01
  03

JORNADA 04
05 - 03
01 - 02
  04

JORNADA 05
01 - 04
02 - 03
  05

=========================
EQUIPOS = 06
 
JORNADA 01
02 - 05
03 - 04
01 - 06
 
JORNADA 02
03 - 01
04 - 05
02 - 06
 
JORNADA 03
04 - 02
05 - 01
03 - 06
 
JORNADA 04
05 - 03
01 - 02
04 - 06
 
JORNADA 05
01 - 04
02 - 03
05 - 06

=========================
EQUIPOS = 07
 
JORNADA 01
02 - 07
03 - 06
04 - 05
  01
 
JORNADA 02
03 - 01
04 - 07
05 - 06
  02
 
JORNADA 03
04 - 02
05 - 01
06 - 07
  03
 
JORNADA 04
05 - 03
06 - 02
07 - 01
  04
 
JORNADA 05
06 - 04
07 - 03
01 - 02
  05
 
JORNADA 06
07 - 05
01 - 04
02 - 03
  06
 
JORNADA 07
01 - 06
02 - 05
03 - 04
  07

=========================
EQUIPOS = 08
 
JORNADA 01
02 - 07
03 - 06
04 - 05
01 - 08
 
JORNADA 02
03 - 01
04 - 07
05 - 06
02 - 08
 
JORNADA 03
04 - 02
05 - 01
06 - 07
03 - 08
 
JORNADA 04
05 - 03
06 - 02
07 - 01
04 - 08
 
JORNADA 05
06 - 04
07 - 03
01 - 02
05 - 08
 
JORNADA 06
07 - 05
01 - 04
02 - 03
06 - 08
 
JORNADA 07
01 - 06
02 - 05
03 - 04
07 - 08

=========================
EQUIPOS = 09
 
JORNADA 01
02 - 09
03 - 08
04 - 07
05 - 06
  01
 
JORNADA 02
03 - 01
04 - 09
05 - 08
06 - 07
  02
 
JORNADA 03
04 - 02
05 - 01
06 - 09
07 - 08
  03
 
JORNADA 04
05 - 03
06 - 02
07 - 01
08 - 09
  04
 
JORNADA 05
06 - 04
07 - 03
08 - 02
09 - 01
  05
 
JORNADA 06
07 - 05
08 - 04
09 - 03
01 - 02
  06
 
JORNADA 07
08 - 06
09 - 05
01 - 04
02 - 03
  07
 
JORNADA 08
09 - 07
01 - 06
02 - 05
03 - 04
  08
 
JORNADA 09
01 - 08
02 - 07
03 - 06
04 - 05
  09

=========================
EQUIPOS = 10
 
JORNADA 01
02 - 09
03 - 08
04 - 07
05 - 06
01 - 10
 
JORNADA 02
03 - 01
04 - 09
05 - 08
06 - 07
02 - 10
 
JORNADA 03
04 - 02
05 - 01
06 - 09
07 - 08
03 - 10
 
JORNADA 04
05 - 03
06 - 02
07 - 01
08 - 09
04 - 10
 
JORNADA 05
06 - 04
07 - 03
08 - 02
09 - 01
05 - 10
 
JORNADA 06
07 - 05
08 - 04
09 - 03
01 - 02
06 - 10
 
JORNADA 07
08 - 06
09 - 05
01 - 04
02 - 03
07 - 10
 
JORNADA 08
09 - 07
01 - 06
02 - 05
03 - 04
08 - 10
 
JORNADA 09
01 - 08
02 - 07
03 - 06
04 - 05
09 - 10
=========================

     Y con esto termino, espero que os sirva de ayuda este frikonsejo.

Nos vemos en la próxima entrada, ¡y jugad mucho hasta entonces!

1 comentario:

  1. Ha faltado una foto de un partido de la liga (un clásico hubiese estado bien) y otra del pódium o al menos del campeón de la liga para que la entrada fuese de sobresaliente.

    ResponderEliminar