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