Ejemplo n.º 1
0
        private void SimularJuego(JuegoDomino juego, int? preferenciaCuadre = null)
        {
            while (juego.Jugadores[0].Fichas.Count > 0 &&
                   juego.Jugadores[1].Fichas.Count > 0 &&
                   juego.Jugadores[2].Fichas.Count > 0 &&
                   juego.Jugadores[3].Fichas.Count > 0 &&
                   juego.TurnoActual != -1)
            {
                var jugador = juego.Jugadores[juego.TurnoActual];

                if (juego.Fichas.Count == 0)
                {
                    juego.JugarFicha(jugador,
                        jugador.Fichas.Contains(new Ficha(6, 6)) ? new Ficha(6, 6) : jugador.Fichas[0]);
                }
                else
                {
                    var fichaInicial = juego.Fichas.First();
                    var fichaFinal = juego.Fichas.Last();

                    var fichasValidas = jugador.Fichas.Where(f =>
                        fichaInicial.PuedeJugarA(f) || fichaFinal.PuedeJugarB(f)).ToList();

                    if (fichasValidas.Any())
                    {
                        if (preferenciaCuadre.HasValue)
                        {
                            if (!fichasValidas.Any(f => f.Valor.Contains(preferenciaCuadre.Value)))
                            {
                                //Si no hay fichas con el vlaor deseado, se juega una de las posibles
                                juego.JugarFicha(jugador, fichasValidas.First());
                            }
                            else
                            {
                                //Se intenta cuadrar
                                var fichaAJugar = fichasValidas.FirstOrDefault(
                                    f => fichaInicial.PuedeJugarA(f) && fichaFinal.PuedeJugarB(f));

                                if (fichaAJugar != null)
                                {
                                    juego.JugarFicha(jugador, fichaAJugar, preferenciaCuadre);
                                }
                                else
                                {
                                    //Si no se puede se cuadrar se intenta conservar el fijo (cabeza)
                                    var fichasQueNoMatanFijo = fichasValidas
                                        .Where(f => !f.Valor.Contains(preferenciaCuadre.Value))
                                        .ToList();

                                    juego.JugarFicha(jugador,
                                        fichasQueNoMatanFijo.Any()
                                            ? fichasQueNoMatanFijo.First()
                                            : fichasValidas.First());
                                }
                            }

                        }
                        else
                        {
                            juego.JugarFicha(jugador, fichasValidas.First());
                        }
                    }
                    else
                    {
                        juego.PasarTurno(jugador);
                    }
                }

                juego.DibujarTablero();
            }
        }
Ejemplo n.º 2
0
        public void LaSegundaPartidaPuedeComenzarConCualquierFicha()
        {
            var juego = new JuegoDomino();
            SimularJuego(juego);

            juego.NuevaPartida();
            juego.Jugadores = InicializarJugadores(0);

            juego.JugarFicha(juego.Jugadores[juego.TurnoActual],
                             juego.Jugadores[juego.TurnoActual].Fichas[0]);

            Assert.AreEqual(1, juego.Fichas.Count);
        }