示例#1
0
        // GET: Jogador
        public ActionResult Index()
        {
            var lista = _jogadorRepositorio.GetTodos();

            return(View(lista));
        }
        public ActionResult ProximoTurno(int Id)
        {
            // pega ultimo turno(atual) ,se partida estiver null turno será zero se não tuno  vai receber o valor do turno dauqela partida
            var ultimaPartida = _partidaRepositorio.Get(a => a.CampeonatoId == Id).OrderByDescending(p => p.Turno).FirstOrDefault();

            int turno = 0;

            if (ultimaPartida != null)
            {
                turno = ultimaPartida.Turno;
            }

            List <Jogador> jogadores = null;

            if (turno == 0)
            {
                jogadores = _jogadorRepositorio.GetTodos();
            }
            else
            {
                var possuiPartidaSemResultado = _partidaRepositorio.Get(a => a.JogadorIdVencedor == null && a.Turno == turno).Any();

                if (possuiPartidaSemResultado)
                {
                    TempData["mensagemErro"] = "Favor Verifique se alguma partida não possui resultado";
                    return(RedirectToAction("Index", new { Id = Id }));
                }
                else
                {
                    jogadores = _partidaRepositorio.Get(a => a.Turno == turno && a.CampeonatoId == Id).Select(a => a.JogadorVencedor).ToList();
                }
            }

            var possilidades = new List <int>()
            {
                2, 4, 8, 16, 32
            };
            var resultado = possilidades.FirstOrDefault(p => p == jogadores.Count);

            if (resultado == 0)
            {
                var msg = string.Join(",", possilidades);
                TempData["mensagemErro"] = "O sistema não possui quantidade de jogadores suficiente, para se iniciar um campeonato é necessário " + msg;
                return(RedirectToAction("Index", new { Id = Id }));
            }

            turno++;



            //combina jogadores criandndo partida
            for (var i = 0; i < jogadores.Count; i++)
            {
                var jogador1 = jogadores[i];
                var jogador2 = jogadores[++i];
                var partida  = new Partida()
                {
                    JogadorId1   = jogador1.JogadorId,
                    JogadorId2   = jogador2.JogadorId,
                    Turno        = turno,
                    CampeonatoId = Id
                };

                _partidaRepositorio.Adicionar(partida);
            }


            return(RedirectToAction("Index", new { Id = Id }));
        }