Esempio n. 1
0
        public IActionResult CriarJogo()
        {
            Jogo          jogo;
            JogadorPessoa jogadorAtual = _userManager.GetUserAsync(User).Result.jogador;

            jogo = (from t in _context.Jogos.Include(b => b.Jogador1).Include(b => b.Jogador2)
                    where t.Jogador1 == null || t.Jogador2 == null
                    select t).FirstOrDefault();

            if (jogo == null)
            {
                jogo          = new Jogo();
                jogo.Jogador1 = jogadorAtual;
                _context.Add(jogo);
            }
            else
            {
                if (jogo.Jogador1 == null)
                {
                    jogo.Jogador1 = jogadorAtual;
                }
                else
                {
                    jogo.Jogador2 = jogadorAtual;
                }
            }

            _context.SaveChanges();

            return(RedirectToAction(nameof(Lobby), new { id = jogo.Id }));
        }
        // GET: Torneios/Details/5
        public async Task <IActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var torneio = await _context.Torneio.Include(t => t.Jogos)
                          .FirstOrDefaultAsync(m => m.Id == id);

            if (torneio == null)
            {
                return(NotFound());
            }

            foreach (Jogo jogo in torneio.Jogos)
            {
                JogadorPessoa jp = new JogadorPessoa();

                jogo.Jogador1 = _context.JogadorPessoa.Where(j => j.Id == jogo.Jogador1Id).FirstOrDefault();
                jp            = (JogadorPessoa)jogo.Jogador1;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador1Id).FirstOrDefault();
                jogo.Jogador1 = jp;

                jogo.Jogador2 = _context.JogadorPessoa.Where(j => j.Id == jogo.Jogador2Id).FirstOrDefault();
                jp            = (JogadorPessoa)jogo.Jogador2;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador2Id).FirstOrDefault();
                jogo.Jogador2 = jp;

                jogo.tabuleiro = _context.Jogo.Include(j => j.tabuleiro).Where(j => j.Id == jogo.Id).Select(j => j.tabuleiro).FirstOrDefault();
            }

            return(View(torneio));
        }
        /// <summary>
        /// Ação para criar o jogo com uma máquina.
        /// Seleciona uma inteligencia artificial aletoriamente e inclui no jogo.
        /// </summary>
        /// <returns>Redireciona o usuário para o jogo.</returns>
        public IActionResult CriarJogoMaquina()
        {
            var           jogadorData = _userManager.GetUserAsync(User).Result;
            int?          jogadorId   = jogadorData.JogadorId;
            JogadorPessoa player      = _context.JogadorPessoa.Find(jogadorId);

            player.Usuario = jogadorData;

            if (player == null || player.Id == 0)
            {
                return(NotFound());
            }

            var maquinas = _context.JogadorMaquina.ToList();

            if (maquinas.Count < 1)
            {
                return(BadRequest("Nenhuma máquina cadastrada"));
            }

            Jogador randMachinePlayer = (Jogador)maquinas[new Random().Next(0, maquinas.Count - 1)];

            Jogo Jogo = new Jogo
            {
                Jogador1  = player,
                Jogador2  = randMachinePlayer,
                tabuleiro = new Tabuleiro()
            };

            _context.Add(Jogo);
            _context.SaveChanges();

            return(RedirectToAction(nameof(Lobby), new { id = Jogo.Id }));
        }
        public IActionResult VerificaVencedor(int id)
        {
            var jogo = _context.Jogo.Include(j => j.tabuleiro).Include(j => j.Jogador1).Include(j => j.Jogador2).Where(j => j.Id == id).FirstOrDefault();

            if (jogo == null)
            {
                return(NotFound());
            }

            if (jogo.tabuleiro == null)
            {
                return(BadRequest());
            }

            if (jogo.Jogador1 is JogadorPessoa)
            {
                JogadorPessoa jp = new JogadorPessoa();
                jp            = (JogadorPessoa)jogo.Jogador1;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador1Id).FirstOrDefault();
                jogo.Jogador1 = jp;
            }

            if (jogo.Jogador2 is JogadorPessoa)
            {
                JogadorPessoa jp = new JogadorPessoa();
                jp            = (JogadorPessoa)jogo.Jogador2;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador2Id).FirstOrDefault();
                jogo.Jogador2 = jp;
            }

            int?jogadorId = _userManager.GetUserAsync(User).Result.JogadorId;

            if (!(jogadorId == jogo.Jogador1Id || jogadorId == jogo.Jogador2Id))
            {
                return(Forbid());
            }

            jogo.tabuleiro.VerificaVencedor();
            _context.SaveChanges();

            if (jogo.tabuleiro.Vencedor == 1)
            {
                return(Ok(new { message = "Parabéns, o jogador 1 (" + jogo.Jogador1.Nome + ") venceu o jogo." }));
            }
            else if (jogo.tabuleiro.Vencedor == 2)
            {
                return(Ok(new { message = "Parabéns, o jogador 2 (" + jogo.Jogador2.Nome + ") venceu o jogo." }));
            }
            else if (jogo.tabuleiro.Vencedor == -1)
            {
                return(Ok(new { message = "Ops, o jogo terminou empatado." }));
            }
            else
            {
                return(Ok(0));
            }
        }
        public IActionResult Tabuleiro(int id)
        {
            Jogo jogo = _context.Jogo.Include(j => j.Jogador1)
                        .Include(j => j.Jogador2)
                        .Include(j => j.tabuleiro)
                        .Include(j => j.Torneio)
                        .Where(j => j.Id == id).Select(j => j).FirstOrDefault();

            if (jogo == null)
            {
                return(NotFound());
            }

            if (jogo.Jogador1 is JogadorPessoa)
            {
                JogadorPessoa jp = new JogadorPessoa();
                jp            = (JogadorPessoa)jogo.Jogador1;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador1Id).FirstOrDefault();
                jogo.Jogador1 = jp;
            }

            if (jogo.Jogador2 is JogadorPessoa)
            {
                JogadorPessoa jp = new JogadorPessoa();
                jp            = (JogadorPessoa)jogo.Jogador2;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador2Id).FirstOrDefault();
                jogo.Jogador2 = jp;
            }

            int?jogadorId = _userManager.GetUserAsync(User).Result.JogadorId;

            if (!(jogadorId == jogo.Jogador1Id || jogadorId == jogo.Jogador2Id))
            {
                return(Forbid());
            }

            if (jogo.tabuleiro == null)
            {
                jogo.tabuleiro = new Tabuleiro();
                _context.SaveChanges();
            }

            if (jogo.TorneioId == null)
            {
                ViewData["tituloTabuleiro"] = "Jogo amistoso";
            }
            else
            {
                ViewData["tituloTabuleiro"] = "Torneio" + ((jogo.Torneio == null)?"":" " + jogo.Torneio.Nome);
            }

            ViewData["authPlayerId"] = _userManager.GetUserAsync(User).Result.JogadorId;

            return(View(jogo));
        }
        /// <summary>
        /// Ação para criar o jogo com uma pessoa.
        /// Verifica se já existe um jogo faltando jogador, se existir utiliza esse, se não cria um novo.
        /// </summary>
        /// <returns>Redireciona o usuário para o jogo.</returns>
        public IActionResult CriarJogoPessoa()
        {
            Jogo Jogo = _context.Jogo.Include(j => j.Jogador1)
                        .Include(j => j.Jogador2)
                        .FirstOrDefault(j => j.Jogador1 == null || j.Jogador2 == null);
            var           jogadorData = _userManager.GetUserAsync(User).Result;
            int?          jogadorId   = jogadorData.JogadorId;
            JogadorPessoa player      = _context.JogadorPessoa.Find(jogadorId);

            player.Usuario = jogadorData;

            if (player == null || player.Id == 0)
            {
                return(NotFound());
            }

            if (Jogo == null)
            {
                Jogo = new Jogo
                {
                    Jogador1  = player,
                    tabuleiro = new Tabuleiro()
                };
                _context.Add(Jogo);
            }
            else if (Jogo.Jogador1 != player && Jogo.Jogador2 != player)
            {
                if (Jogo.Jogador1 == null)
                {
                    Jogo.Jogador1 = player;
                }
                else if (Jogo.Jogador2 == null)
                {
                    Jogo.Jogador2 = player;
                }
            }

            _context.SaveChanges();

            return(RedirectToAction(nameof(Lobby), new { id = Jogo.Id }));
        }
        public IActionResult Lobby(int id)
        {
            Jogo jogo = _context.Jogo.Include(j => j.Jogador1)
                        .Include(j => j.Jogador2)
                        .Include(j => j.tabuleiro)
                        .Where(j => j.Id == id).Select(j => j).FirstOrDefault();

            if (jogo == null)
            {
                return(NotFound());
            }

            if (jogo.Jogador1 is JogadorPessoa)
            {
                JogadorPessoa jp = new JogadorPessoa();
                jp            = (JogadorPessoa)jogo.Jogador1;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador1Id).FirstOrDefault();
                jogo.Jogador1 = jp;
            }

            if (jogo.Jogador2 is JogadorPessoa)
            {
                JogadorPessoa jp = new JogadorPessoa();
                jp            = (JogadorPessoa)jogo.Jogador2;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador2Id).FirstOrDefault();
                jogo.Jogador2 = jp;
            }

            int?jogadorId = _userManager.GetUserAsync(User).Result.JogadorId;

            if (!(jogadorId == jogo.Jogador1Id || jogadorId == jogo.Jogador2Id))
            {
                return(Forbid());
            }

            return(View(jogo));
        }
        public IActionResult ContinuarJogo()
        {
            var jogadorData = _userManager.GetUserAsync(User).Result;
            var jogos       = _context.Jogo.Include(j => j.Jogador1)
                              .Include(j => j.Jogador2)
                              .Include(j => j.tabuleiro)
                              .Include(j => j.Torneio)
                              .Where(j => (j.Jogador1.Id == jogadorData.JogadorId ||
                                           j.Jogador2.Id == jogadorData.JogadorId));

            foreach (Jogo jogo in jogos)
            {
                if (jogo.Jogador1 is JogadorPessoa)
                {
                    JogadorPessoa jp = new JogadorPessoa();
                    jp            = (JogadorPessoa)jogo.Jogador1;
                    jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador1Id).FirstOrDefault();
                    jogo.Jogador1 = jp;
                }

                if (jogo.Jogador2 is JogadorPessoa)
                {
                    JogadorPessoa jp = new JogadorPessoa();
                    jp            = (JogadorPessoa)jogo.Jogador2;
                    jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador2Id).FirstOrDefault();
                    jogo.Jogador2 = jp;
                }

                if (jogo.tabuleiro == null)
                {
                    jogo.tabuleiro = new Tabuleiro();
                }
            }

            return(View(jogos));
        }
        public IActionResult Jogar(int JogoId, int coluna)
        {
            var jogo = _context.Jogo.Include(j => j.tabuleiro)
                       .Include(j => j.Jogador1)
                       .Include(j => j.Jogador2)
                       .Where(j => j.Id == JogoId).FirstOrDefault();

            if (jogo == null)
            {
                return(NotFound());
            }

            if (jogo.tabuleiro == null)
            {
                return(BadRequest());
            }

            if (jogo.Jogador1 is JogadorPessoa)
            {
                JogadorPessoa jp = new JogadorPessoa();
                jp            = (JogadorPessoa)jogo.Jogador1;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador1Id).FirstOrDefault();
                jogo.Jogador1 = jp;
            }

            if (jogo.Jogador2 is JogadorPessoa)
            {
                JogadorPessoa jp = new JogadorPessoa();
                jp            = (JogadorPessoa)jogo.Jogador2;
                jp.Usuario    = _context.ApplicationUser.Where(j => j.JogadorId == jogo.Jogador2Id).FirstOrDefault();
                jogo.Jogador2 = jp;
            }

            if (jogo.tabuleiro.Vencedor == 1)
            {
                return(BadRequest(new Exception("O jogo já foi vencido pelo jogador 1 (" + jogo.Jogador1.Nome + ").")));
            }
            else if (jogo.tabuleiro.Vencedor == 2)
            {
                return(BadRequest(new Exception("O jogo já foi vencido pelo jogador 2 (" + jogo.Jogador2.Nome + ").")));
            }
            else if (jogo.tabuleiro.Vencedor == -1)
            {
                return(BadRequest(new Exception("O jogo já terminou empatado.")));
            }

            int?jogadorId = _userManager.GetUserAsync(User).Result.JogadorId;

            if (!(jogadorId == jogo.Jogador1Id || jogadorId == jogo.Jogador2Id))
            {
                return(Forbid());
            }

            int?currentPlayerId;

            if (jogo.tabuleiro.JogadorAtual == 1)
            {
                currentPlayerId = jogo.Jogador1Id;
            }
            else
            {
                currentPlayerId = jogo.Jogador2Id;
            }

            if (jogadorId != currentPlayerId)
            {
                return(BadRequest(new Exception("Não é a sua vez de jogar")));
            }

            try
            {
                jogo.tabuleiro.Jogar(coluna, jogo.tabuleiro.JogadorAtual);

                /*Jogador outroJogador = (jogo.tabuleiro.JogadorAtual == 1) ? jogo.Jogador1 : jogo.Jogador2;
                 * this.VerificaJogadaComputador(outroJogador, jogo);*/

                _context.SaveChanges();
            }catch (Exception e)
            {
                return(BadRequest(e));
            }

            return(Ok(jogo.tabuleiro));
        }
        public IActionResult Ranking(int id)
        {
            var torneio = _context.Torneio.Include(t => t.Jogadores).Include(t => t.Jogos).SingleOrDefault(m => m.Id == id);

            if (torneio == null)
            {
                return(NotFound());
            }

            if (torneio.Jogos == null)
            {
                return(BadRequest());
            }

            Dictionary <String, int> ranking = new Dictionary <String, int>();

            foreach (Jogador jogador in torneio.Jogadores)
            {
                if (jogador is JogadorPessoa)
                {
                    JogadorPessoa jp = new JogadorPessoa();
                    jp               = (JogadorPessoa)jogador;
                    jp.Usuario       = _context.ApplicationUser.Where(j => j.JogadorId == jp.Id).FirstOrDefault();
                    ranking[jp.Nome] = 0;
                }
                else
                {
                    ranking[jogador.Nome] = 0;
                }
            }

            foreach (Jogo jogo in torneio.Jogos)
            {
                Jogo jg = _context.Jogo.Include(j => j.Jogador1).Include(j => j.Jogador2).Include(j => j.tabuleiro).Where(j => j.Id == jogo.Id).FirstOrDefault();

                if (jg.tabuleiro == null)
                {
                    jg.tabuleiro = new Tabuleiro();
                }

                if (jg.tabuleiro.Vencedor == 1)
                {
                    ranking[jg.Jogador1.Nome] = ranking[jg.Jogador1.Nome] + 3;
                }
                else if (jg.tabuleiro.Vencedor == 2)
                {
                    ranking[jg.Jogador2.Nome] = ranking[jg.Jogador2.Nome] + 3;
                }
                else if (jg.tabuleiro.Vencedor == -1)
                {
                    ranking[jg.Jogador1.Nome] = ranking[jg.Jogador1.Nome] + 1;
                    ranking[jg.Jogador2.Nome] = ranking[jg.Jogador2.Nome] + 1;
                }
            }

            var orderRanking = from entry in ranking orderby entry.Value descending select entry;

            RankingModel rm = new RankingModel
            {
                TorneioNome = torneio.Nome,
                ranking     = orderRanking.ToDictionary(t => t.Key, t => t.Value)
            };

            return(View(rm));
        }