Ejemplo n.º 1
0
        /// <summary>
        /// Entra en la cola para jugar en una categoria
        /// </summary>
        /// <param name="categoryName">Nombre de la categoría a la que se desea entrar en cola</param>
        /// <param name="nombreUsuario">Nombre de usuario que entra en cola</param>
        public void entrarEnCola(String categoryName, String nombreUsuario)
        {
            //Busca la categoria por su nombre según el nombre dado
            clsCategoriaYJugadoresBuscando categoria = partidas.Lista.Find(cat => cat.Nombre == categoryName);

            //clsCategoriaYJugadoresBuscando categoria = partidas.Lista.Find(cat => cat.Id == Utils.Categories[pepe]);

            //Si el nombre de la categoria pertenece a una categoria existente
            if (categoria != null)
            {
                //Saca de cola al cliente, por si estuviera en otra cola ya
                salirDeCola();

                //Añade a la cola de esta categoria al cliente
                categoria.JugadoresBuscando.Add(new clsJugador(nombreUsuario, Context.ConnectionId, 0, 0));

                //Si la cola de la categoria tiene más de un jugador, comienza una nueva partida para esta categoria
                if (categoria.NumJugadoresBuscando > 1)
                {
                    comenzarPartida(categoria);
                }
            }

            //Manda de nuevo las categorias a los clientes
            List <clsCategoriaYNumJugadoresBuscando> categories = new List <clsCategoriaYNumJugadoresBuscando>();

            foreach (clsCategoriaYJugadoresBuscando cat in partidas.Lista)
            {
                categories.Add(new clsCategoriaYNumJugadoresBuscando(cat));
            }

            Clients.All.sendCategories(categories);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Hace comenzar una nueva partida, cogiendo a los dos jugadores que estén primero en la cola
        /// </summary>
        /// <param name="categoria">Categoria en la que se jugará la partida</param>
        public void comenzarPartida(clsCategoriaYJugadoresBuscando categoria)
        {
            bool clientesDisponibles = false;

            //Coge a los dos jugadores que estén primero en la cola (Aunque esto no es una cola como tal xD, estaría bien cambiarlo)
            //clsJugador jugador1 = categoria.JugadoresBuscando[0];
            //clsJugador jugador2 = categoria.JugadoresBuscando[1];

            Queue <clsJugador> colaJugadoresBuscando = new Queue <clsJugador>(categoria.JugadoresBuscando);
            clsJugador         jugador1 = colaJugadoresBuscando.Dequeue();
            clsJugador         jugador2 = colaJugadoresBuscando.Dequeue();


            //Crea una lista vacia de preguntas (cuando alguno de los clientes entre en la partida entonces se solicitarán las preguntas, no sabía hacerlo de otra forma, haciendolo aqui tengo problemas con la asincronia)
            List <clsQuestion> questions = new List <clsQuestion>();

            //Crea el objeto con la partida
            clsPartida partida = new clsPartida(clsPartida.IdIndex + categoria.Nombre, jugador1, jugador2, questions);

            //Añade la partida a la lista de partidas de la categoría dada
            categoria.Partidas.Add(partida);

            //Elimina de la cola a ambos jugadores que van a empezar a jugar
            String connectionID;
            int    eliminadosDeCola = 0;

            //Por cada categoria o cuando ambos hayan sido eliminados de la cola
            for (int i = 0; i < partidas.Lista.Count && eliminadosDeCola < 2; i++)
            {
                //Por cada jugador en cola o cuando ambos hayan sido eliminados de la cola
                for (int j = 0; j < partidas.Lista[i].JugadoresBuscando.Count && eliminadosDeCola < 2; j++)
                {
                    connectionID = partidas.Lista[i].JugadoresBuscando[j].ConnectionID;

                    //Si es el jugador1 o jugador2, lo saca de cola
                    if (connectionID == partida.Jugador1.ConnectionID || connectionID == partida.Jugador2.ConnectionID)
                    {
                        partidas.Lista[i].JugadoresBuscando.RemoveAt(j);
                        eliminadosDeCola++;
                    }
                }
            }

            //Indica a ambos jugadores que la partida comienza, mandando la informacion de esta (nombre de ambos jugadores y lista de preguntas)
            Clients.Client(jugador1.ConnectionID).comenzarPartida(partida.Jugador1.Nombre, partida.Jugador2.Nombre, partida.Preguntas);
            Clients.Client(jugador2.ConnectionID).comenzarPartida(partida.Jugador1.Nombre, partida.Jugador2.Nombre, partida.Preguntas);
        }