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 String obtemGrade(Integer idJogador) throws RemoteException { Partida partida = getMinhaPartida(idJogador); String grade = " "; if (partida == null) return ""; Tabuleiro tabuleiro = partida.getTabuleiro(); for (int i = 0; i < tabuleiro.getNumColuna(); i++) { grade += "c" + i + " "; } grade += "\n"; for (int i = 0; i < tabuleiro.getNumColuna(); i++) { for (int j = 0; j < tabuleiro.getNumColuna(); j++) { grade += "[" + tabuleiro.getGrade()[i][j] + "]"; } grade += "\n"; } return grade; }
@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; }