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)); }