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; }
@Override public synchronized int enviaJogada(Integer idJogador, Integer numColuna) throws RemoteException { Partida partida = getMinhaPartida(idJogador); Jogador jogador = jogadores.get(idJogador); Integer vencedor = ehMinhaVez(idJogador); if (partida == null) return -1; if (vencedor > 1) return vencedor; Tabuleiro tabuleiro = partida.getTabuleiro(); Integer[][] grade = tabuleiro.getGrade(); if (colunaCheia(tabuleiro, numColuna)) return 0; for (int i = (tabuleiro.getNumColuna() - 1); i >= 0; i--) { if (0 == grade[i][numColuna]) { grade[i][numColuna] = jogador.getOrdemJogada(); if (jogador.getOrdemJogada().equals(1)) partida.setJogadorDaVez(2); else partida.setJogadorDaVez(1); return 1; } } return -1; }
@Override public synchronized int ehMinhaVez(Integer idJogador) throws RemoteException { Partida partida = getMinhaPartida(idJogador); Jogador jogador = jogadores.get(idJogador); Integer vencedor = 0; if (partida == null && jogador == null) return -1; if (partida == null) return jogador.getStatus(); if (partida.getJogadores().size() > 1) vencedor = verificarVencedor(partida, jogador); if (vencedor > 0) return vencedor; if (partida.getJogadorDaVez().equals(jogador.getOrdemJogada())) return 1; else return 0; }