private boolean colunaCheia(Tabuleiro tabuleiro, Integer numColuna) { for (int i = 0; i < tabuleiro.getNumColuna(); i++) { if (0 == tabuleiro.getGrade()[i][numColuna]) return false; } return true; }
private boolean tabuleiroCheio(Tabuleiro tabuleiro) { Integer[][] grade = tabuleiro.getGrade(); Integer size = tabuleiro.getNumColuna(); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (0 == grade[i][j]) { return false; } } } return true; }
private boolean verificarHorizontal(Tabuleiro tabuleiro, Integer jogador) { Integer[][] grade = tabuleiro.getGrade(); Integer size = tabuleiro.getNumColuna(); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (0 != grade[i][j]) { if (grade[i][j].equals(jogador)) { if (j + 1 < size && grade[i][j + 1].equals(jogador)) { if (j + 2 < size && grade[i][j + 2].equals(jogador)) { if (j + 3 < size && grade[i][j + 3].equals(jogador)) { return true; } } } } } } } return false; }
@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; }
private boolean verificarDiagonal(Tabuleiro tabuleiro, Integer jogador) { Integer[][] grade = tabuleiro.getGrade(); Integer size = tabuleiro.getNumColuna(); // Diagonal maior for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (0 != grade[i][j]) { if (grade[i][j].equals(jogador)) { if (i + 1 < size && j + 1 < size && grade[i + 1][j + 1].equals(jogador)) { if (i + 2 < size && j + 2 < size && grade[i + 2][j + 2].equals(jogador)) { if (i + 3 < size && j + 3 < size && grade[i + 3][j + 3].equals(jogador)) { return true; } } } } } } } // Diagonal menor for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (0 != grade[i][j]) { if (grade[i][j].equals(jogador)) { if (i + 1 < size && j - 1 > -1 && grade[i + 1][j - 1].equals(jogador)) { if (i + 2 < size && j - 2 > -1 && grade[i + 2][j - 2].equals(jogador)) { if (i + 3 < size && j - 3 > -1 && grade[i + 3][j - 3].equals(jogador)) { return true; } } } } } } } return false; }
@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; }