none
Método para crear un simulador de fútbol

    General discussion

  • Hola a todos,

    estoy empezando a desarrollar un simulador de fútbol y quería preguntaros por ideas para hacer el motor principal. He estado viendo el patrón Observador, y cada vez que se mueva el balón se actualiza a los observadores, pero veo que se pueden producir muchos eventos y quizás muchos movimientos.

    Otra idea sería asignar tiempo a las acciones de los jugadores e ir ejecutándolas y poner por ejemplo un tiempo en el que el estado del jugador se vuelve a comprobar, es decir, si pongo 60 segundos y la acción requiere de 90 segundos, hasta que no se completen no se volvería a comprobar el estado del jugador.

    Y la última sería hacerlo por eventos, cada jugador empieza el partido y empieza a ejecutar acciones y cada vez que termina una acción piensa la sigiuente pero esto puede hacer que algunos jugadores que quieran moverse a un punto lejano puedan moverse sin tener en cuenta todo lo demás.

    ¿Se os ocurre alguna idea para poder controlar a los jugadores y poder ir guardando estadísticas de lo que van haciendo?

    Gracias a todos y un saludo.


    Sergio
    Saturday, November 27, 2010 11:14 PM

All replies

  • A que te refieres con un simulador de fútbol? Un juego tipo FIFA para entendernos?

    No sé... si estás pensando en esto, la mejor manera es usar XNA... Pero bueno, no es fácil ni sencillo y no es algo que ni mucho menos te podamos responder en un foro :)

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    Monday, November 29, 2010 2:45 PM
  • Hola Eduard,

    no me refiero a eso. Lo que quiero hacer es la simulación de un partido de fútbol con los datos que tengo cargados como son los equipos y valores de los jugadores y nada de gráficos, sólo ejecutar acciones y guardar estadísticas. Lo que pregunto es por ideas para el algoritmo del motor de juego, es decir, como ir avanzando en el juego. Había pensado algo así:

    Si pelota en movimiento

    { moverPelota (Ver si es interceptada); MoverJugadores (Empezando desde el más cercano al más lejano)}

    Sino si pelotaen poderjugador

    {moverJugadorconPelota; MoverJugadores (Empezando desde el más cercano al más lejano)}

    Y realizar esto cada 5 segundos de juego por así decirlo y cada jugador realizará acciones que quizás necesiten más tiempo y por lo tanto habrá momentos que continuen la acción anterior.

    Un saludo.


    Sergio
    Monday, November 29, 2010 3:10 PM
  • MMmm... Ok! :)

    No entiendo para que lo de "5 segundos", a no ser que alguien deba leer esas estadísticas en tiempo real. El ordenador es brutalmente rápido ejecutando acciones, así que es mejor usar un concepto abstracto como "turno".

    La clave es decidir hasta que punto simulas la realidad o no. Me explico: si quieres "simular todo un partido", hay multitud de factores que te van a complicar mucho el tema. Además te va a tocar realizar una buena IA que haga que los jugadores se muevan en función del balón, y que decidan chutar, pasar, hacer falta o evitar caer en fuera de juego... Créeme eso es muy complejo.

    Si lo que buscas es algo más parecido al resumen que hacía PC Futbol (no se si lo conoces) al final de los partidos, creo que lo mejor será que juegues N turnos (un partido) y que definas distintas acciones que pueden suceder en cada turno. P.ej:

    • Nada relevante -> El equipo que ataca sigue haciendolo
    • Cambio de posesión -> El que ataca defiende y viceversa
    • Chut. La peligrosidad del chut sería dependiente de un valor a decidir entre las estadísticas del equipo atacante y el defensor.
    • Falta, que equivale a un chut de cierta peligrosidad y opcionalmente tarjeta amarilla o roja
    • Penalty, que equivale a un chut de peligrosidad máxima
    • Fuera de juego

    Debes determinar cuando se da cada una de esas acciones, y eso dependerá de muchos valores (deberás encontrar las fórmulas) entre los que estan las tácticas usadas, climatología, estados de forma, valores de los jugadores en concreto, etc, etc...

    Estás simulando realmente un partido? No, estás simulando que simulas un partido, pero si lo que terminas generando tiene sentido el usuario estará satisfecho :)

    En este caso tu programa se convierte en un for de 1 a numero de turnos de un partido, y en cada turno decides (entre las fórmulas y algo de azar) la acción que sucede. La guardas en un log y listos.

    Luego si quieres mostrar tiempos de juego, asignas un valor temporal a cada turno (p.e. cada turno son 45 segundos) y muestras el report al usuario.

    Con esto simular un partido tardará un segundo en total o quizá menos.

    No se si te estoy respondiendo lo que quieres o me estoy yendo por las ramas!

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    Monday, November 29, 2010 3:28 PM
  • Hola Eduard,

    me parece muy interesante esa aproximación. Como variables imagino que puedo poner como dices la climatología, el valor de ataque de un equipo contra el de defensa para obtener las jugadas de ataque, el MEdio campo para la posesión, la táctica para saber si te pueden hacer un contragolpe y cosas así imagino ¿no?

    La idea es primero saber las jugadas que se van a dar y luego simularlas y así guardo las estadísticas de cada jugador y dependiendo de los valores de cada jugador incluso poner el número de pases realizados, fallados etc. etc.

    Y una vez tengo el número de acciones, ir poniéndolas en un orden cronoógico para simular que una acción va detrás de otra imagino.

    Voy a empezar por calcular el número de acciones de ataque de cada equipo con la media de los mismos.

    Bueno cualquier idea es bienvenida, muchas gracias y un saludo.


    Sergio
    Monday, November 29, 2010 3:39 PM
  • Exacto! :)

    De la cantidad de factores que uses para calcular las acciones "más realista" parecerá el resumen del partido que generes.

    Si tienes cualquier duda sobre como implementar alguno de los puntos... Ya sabes! ;-)

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    Tuesday, November 30, 2010 10:08 AM
  • Y otra cosilla,

    par el tema de estadísticas, ¿también se deberían de simular las estadísticas con las tácticas y demás? ó se te ocurre alguna manera de obtener estadísticas. Me gustaría obtener por donde se mueve un jugador, los pases que haces y los pases correctos, tiros, paradas etc etc.

    Gracias.


    Sergio
    Tuesday, November 30, 2010 11:13 AM
  • Buenas!

    Eso o lo calculas con las estadísticas, o bien haces que tus turnos sean todavía más cortos (p.ej. que un partido en lugar de 90 turnos tenga 5400 turnos, lo que singifica que un turno son "5 segundos" de tiempo real. Pero entonces tienes una complejidad más grande que en el caso anterior.

    Entonces, lista todo lo que puede pasar "en 5 segundos":

    • Un jugador tiene la pelota
    • Chuta
    • Hace falta
    • Hace gol
    • Hace un pase... que puede ser interceptado, ir a fuera, ir al destino
    • Defiende
    • Comete penalty

    Etc, etc, etc... y empiezas a jugar. Tu partido es un bucle de 1 a 5400 (tus turnos) y calculas que ocurre en cada turno. Pero NO debes calcular lo que hace CADA jugador en cada turno: Debes crear "eventos" concretos (con tus fórmulas y azar) y aplicarlas.

    Un ejemplo "detallado". Está jugando el Barça, ok? Y supongamos que decides que la tiene Messi. Y que Messi tiene un 50% de pasar el Balón y un 50% de que se lo quiten (esos porcentajes dependerían de ambos equipos, tácticas, etc, etc).

    Juegas un turno y Messi tiene el balón. No se lo quitan y no lo pasa

    Juegas otro turno y Messi tiene el balón. No se lo quitan y decides que lo pasa. Ahora decides el tipo de pase. En un 70% será un pase "sin peligro" a otro jugador que elegirías al azar y en un 30% una centrada de gol. Sale el 30% y decides que Messi centra a gol. Ahora puedes suponer que un 40% de sus centros terminan rematados, y que de ese 40% un 25% termina en Gol. El resto van a fuera (un 25%) o interceptados por el rival. Todo esos porcentajes son los que deberías calcular.

    Bien, juegas el pase y te sale que hay remate, juegas el remate y te sale que hay Gol. Ahora decides quien ha marcado. No se, supongamos que un 40% de goles los hará Villa, un 30% Pedro, un 20% Iniesta, etc, etc... Juegas y te sale que es Iniesta. Ahora puedes decidir desde donde... Un 80% lo hace desde dentro el área, y un 20% desde fuera. Te sale que lo hace desde fuera.

    Bien... ya tienes un gol de Iniesta desde fuera el área a pase de Messi :)

    La situación turno x turno sería la siguiente:

    • Turno x -> Messi controla el balón, no se lo quitan, no lo pasa
    • Turno x + 1 -> Messi controla el balón, no se lo quitan, dedices que la pasará
    • Turno x + 2 -> Messi centra el balón
    • Turno x + 3 -> [Decides que hay Gol] -> Escoges quien remata por probabilidades, decides la posición y creas el evento -> Remata "Iniesta" desde "fuera del área".

     Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    Tuesday, November 30, 2010 12:21 PM
  • yo queria saber si me pueden poner el simulador en 2 ligas porque no se
    Sunday, April 24, 2011 10:21 PM