@Override public synchronized int encerraPartida(Integer idJogador) throws RemoteException { Partida partida = getMinhaPartida(idJogador); if (partida == null) return -1; Jogador jogador = this.jogadores.get(idJogador); if (partida.getJogadores().size() > 1) { Jogador oponente = this.jogadores.get( partida .getJogadores() .stream() .filter(j -> !j.equals(idJogador)) .collect(Collectors.toList()) .get(0)); jogador.setStatus(6); // 6 -> perdedor por WO oponente.setStatus(5); // 5 -> vencedor por WO } this.partidas.remove(partida); return 0; }
@Override public synchronized int temPartida(Integer idJogador) throws RemoteException { if (partidas.isEmpty()) return 0; if (partidas.size() > 49) throw new RemoteException( "O jogo atingiu seu limite de 50 partidas simultâneas, por favor tente mais tarde."); List<Partida> partidasAux = partidas .stream() .filter(p -> (p.getJogadores() != null && p.getJogadores().size() < 2)) .collect(Collectors.toList()); if (partidasAux.isEmpty()) return 0; Partida partida = partidasAux.get(0); if (partida == null || partida.getJogadores().isEmpty()) return 0; partida.getJogadores().add(idJogador); partida.setJogadorDaVez(1); Jogador jogador = jogadores.get(idJogador); jogador.setStatus(0); jogador.setOrdemJogada(partida.getJogadores().size()); return partida.getJogadores().size(); }
private int verificarVencedor(Partida partida, Jogador jogador) { Jogador oponente = this.jogadores.get( partida .getJogadores() .stream() .filter(j -> !j.equals(jogador.getIdJogador())) .collect(Collectors.toList()) .get(0)); Tabuleiro tabuleiro = partida.getTabuleiro(); boolean vencedor; vencedor = verificarVertical(tabuleiro, jogador.getOrdemJogada()); if (!vencedor) vencedor = verificarHorizontal(tabuleiro, jogador.getOrdemJogada()); if (!vencedor) vencedor = verificarDiagonal(tabuleiro, jogador.getOrdemJogada()); if (oponente.getStatus() == 2 && vencedor) { // 4 -> houve empate jogador.setStatus(4); oponente.setStatus(4); return 4; } if (oponente.getStatus() == 2) { // 3 -> é o perdedor jogador.setStatus(3); return 3; } if (vencedor) { // 2 -> é o vencedor jogador.setStatus(2); oponente.setStatus(3); return 2; } if (oponente.getStatus() == 5) { // 6 -> perdedor por WO jogador.setStatus(6); return 6; } if (tabuleiroCheio(tabuleiro)) { // 4 -> houve empate jogador.setStatus(4); oponente.setStatus(4); return 4; } return -1; }