Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

158
Vistas
algoritmo para emparejar jugadores

Recientemente he estado trabajando en un sitio que puede unir a los jugadores y no puedo averiguar cuál sería la mejor manera de utilizar el algoritmo. A todos los jugadores que intentan jugar se les asigna un lobby único en el que se encuentran, pueden hacer cola solos o con otra persona. Por ejemplo, tenemos un juego 2 contra 2, 1 jugador ingresa a la cola jugando solo, luego 2 jugadores ingresan a la cola estando en el mismo lobby (estar en el mismo lobby significa que cuando obtengan un partido jugarán en el mismo equipo) entonces actualmente hay 1 jugador haciendo cola solo y 2 jugadores en un equipo, la cantidad total de jugadores necesarios para hacer una partida sería 4, por lo que aún no se encontraría una partida, luego otro jugador solo ingresa a la cola en este punto él debe emparejarse con el otro jugador en solitario y enfrentarse a los 2 jugadores en un equipo. Cada lobby también tiene parámetros, por ejemplo, modo de juego y región, y solo los jugadores con los mismos parámetros pueden enfrentarse entre sí. Hay al menos 3 regiones y 3 modos de juego, por ejemplo, 1 en 1, 2 en 2, 3 en 3, etc. Actualmente estoy colocando todos los lobbies que ingresan en la cola en una matriz

 { "size":2, }

así es como se vería un lobby 2 contra 2 y puede haber miles de este tipo de lobbys en la matriz, todos buscando un juego. No estoy seguro de cómo haría un algoritmo que sea el más efectivo y dinámico y que coincida con todos los lobbies en la matriz, incluso si tienen diferentes parámetros.

No he llegado muy lejos con la codificación de esto.

 } console.log(n) } }

Estoy atascado en este punto y no tengo idea de cómo ir más allá o qué hacer, por ejemplo, para emparejar jugadores que juegan juntos contra jugadores que están separados. También estaba pensando si es mejor tener una matriz separada para cada región con un parámetro . Estoy usando Node.js para lograr esto.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Si mantuvo todos los vestíbulos en una matriz de objetos como su primer ejemplo de código, podría recorrer ese conjunto cada pocos segundos y procesar cada vestíbulo de esta manera:

  1. ¿El lobby tiene suficientes usuarios para un partido? (Es posible que desee agregar la información correspondiente en algún lugar, el sistema conoce la cantidad correcta de jugadores)
  2. Si es así, tome los primeros n usuarios, construya una coincidencia y elimínelos del lobby; volver al paso 1
  3. Listo, ve al siguiente lobby

Sin embargo, estoy de acuerdo: todas las respuestas a esta pregunta están inherentemente basadas en opiniones.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Algorítmicamente esto no suena muy desafiante. Esperaría que la variedad de vestíbulos sirviera como algo similar a una cola FIFO. Cuando se agrega un nuevo jugador, revisamos los lobbies en orden, agregando al jugador al primer lobby coincidente con un espacio disponible. Si ahora tenemos suficientes jugadores para comenzar el juego, creamos un nuevo juego y eliminamos el lobby. Podría verse algo como esto:

 const onPlayerEnter = ({games, lobbies, ...rest}, player) => { let lobby = lobbies .find (playerFits (player)) if (lobby) { let updatedLobby = addPlayer (lobby, player) lobbies = replaceLobby (lobbies, lobby, updatedLobby) } else { lobby = createLobby (player) lobbies = addLobby (lobbies, lobby) } if (gameReady (lobby)) { games = games .concat (makeGame (lobby)) lobbies = removeLobby (lobbies, lobby) } return {games, lobbies, ...rest} } const playerFits = (player) => (lobby) => { // Your logic on whether this player matches the lobby requirments, return boolean // This would have to do with number of players, the mode, the region, maybe ratings ranges... } const addPlayer = (lobby, player) => { /* ... */ } const replaceLobby = (lobbies, oldLobby, newLobby) => { /* ... */ } const createLobby = (player) => { /* ... */ } const addLobby = (lobbies, lobby) => { /* ... */ } const gameReady = (lobby) => { /* ... */ } const makeGame = (lobby) => { /* ... */ } const removeLobby = (lobbies, lobby) => { /* ... */ }

Esto tomaría un estado del sistema y un nuevo jugador y devolvería un estado del sistema actualizado, que tiene ese jugador agregado a un lobby existente o iniciando uno nuevo, y si el lobby está lleno, convirtiéndolo en un juego.

Sugeriría que su propiedad de mode debería ser más sofisticada que una simple cadena, tal vez algo como:

 mode: { display: '2v2', teams: [ {minPlayers: 2, maxPlayers: 2}, {minPlayers: 2, maxPlayers: 2} ] }

Esto sería fácilmente ampliable para permitir funciones adicionales.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda