Exemplo n.º 1
0
  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;
  }
Exemplo n.º 2
0
  @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;
  }
Exemplo n.º 3
0
  @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;
  }