Interface Jogador

  • All Known Implementing Classes:
    JogadorAlheio, JogadorMamao, JogadorQueNaoGostaDeCarroca, JogadorSimplorio

    public interface Jogador
    Um jogador da partida, ou seja, a IA que decide como jogar.

    Métodos básicos

    void jogador.sentaNaMesa(...): Num jogo de dominó, os quatro Jogadores vão primeiro sentar na mesa (em duplas) e então jogar várias partidas, até que uma das duplas acumule seis pontos e o jogo termine.

    void jogador.recebeMao(...): Cada partida começa com cada Jogador recebendo seis pedras na mão e com a mesa sem pedras. Quatro pedras ficam no dorme e estão fora dessa partida. Os jogadores vão jogando em turnos até que um deles vence ao colocar sua última pedra na mesa*.

    Vontade jogador.getVontadeDeComecar(): Com a exceção da primeira partida, em que quem começa é o jogador que tiver o Dozão**, nas demais partidas quem começa é um dos jogadores da dupla que venceu a partida anterior. A dupla precisa decidir quais dos dois membros vai começar, mas deve fazer isso sem que os membros troquem muita informação. Pra isso, cada jogador deve saber responder "o quanto ele gostaria de começar a jogar" olhando apenas pra suas pedras iniciais, sem se comunicar com seu parceiro de dupla.

    Jogada jogador.joga(): Na sua vez de jogar, o jogador deve analisar o estado da mesa e decidir qual será sua Jogada: qual pedra de sua mão e em que lado da mesa. Caso veja que não tem nenhuma pedra que se encaixe na mesa, a jogada vai ser um toque. Caso seja a primeira jogada da primeira partida***, cabe ao jogador entender que deve jogar a maior carroça (normalmente o Dozão**).


    Usando mais informações sobre o jogo - DominoEventListener

    Jogadores que implementarem DominoEventListener vão ser avisados dos eventos que acontecem no jogo (alguem tocou, tal jogador iniciou a partida, etc. ...)

    Enquanto os quatro métodos da interface Jogador permitem a implementação de um jogador completamente funcional (ver JogadorSimplorio, por exemplo) estratégias de jogo um pouco mais complexas vão exigir que o jogador saiba mais sobre o que se passa no jogo.


    (*) Típicamente, uma partida acaba com um dos jogadores colocando sua última pedra na mesa. É uma "batida". Mas uma partida também pode terminar de outras quatro maneiras diferentes:

    1. Vitória por contagem de pontos na mão: nenhum dos quatro jogadores tem uma pedra que encaixe na mesa e a partida trava. São somados, pra cada jogador, os pontos de suas pedras e vence o jogador que tiver menos.
    2. Empate por contagem de pontos: A partida trava, jogadores de duplas diferentes empatam com o número mínimo de pontos na mão.
    3. Partida abortada por cinco carroças na mão: Se um dos jogadores receber cinco carroças entre as seis pedras inciais de sua mão, a partida é cancelada e uma outra começa.
    4. Vitória por seis carroças na mão: Se um dos jogadores receber seis carroças já como as seis pedras inciais de sua mão, a partida termina imediatamente com vitória pra a dupla desse jogador. Isso é raríssimo de acontecer.

    (**) Pode acontecer do Dozão estar no dorme, e então o jogo deve começar com a carroça de quina. Como o dorme tem quatro pedras, é possivel até que estejam nele as carroças de sena, quina, quadra e terno, obrigando o jogo a ser inciado pelo jogador que tiver a carroça de duque.

    (***) É possível perceber que é a primeira jogada da partida se não existir pedras na mesa. E, se o método getVontadeDeComecar() não foi chamado, então esta é a primeira partida do jogo. É possível também saber quantas partidas foram jogadas ouvindo eventos.

    Author:
    Bruno Abdon
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      Vontade getVontadeDeComecar()
      Usado na primeira rodada de uma partida quando a dupla desse jogador ganhou a partida anterior, pra definir qual dos membros da dupla irá iniciar a partida.
      Jogada joga()
      Está na vez deste jogador jogar.
      void recebeMao​(Pedra pedra1, Pedra pedra2, Pedra pedra3, Pedra pedra4, Pedra pedra5, Pedra pedra6)
      O jogador recebe sua mão: 6 pedras no início de cada partida.
      void sentaNaMesa​(Mesa mesa, int cadeiraQueSentou)
      O jogador toma uma das quatro posições pra jogar no inicio do Jogo, identificadas pelos números de 0 a 3 (fazendo então que as duplas sejam 0 e 2 contra 1 e 3).
    • Method Detail

      • sentaNaMesa

        void sentaNaMesa​(Mesa mesa,
                         int cadeiraQueSentou)
        O jogador toma uma das quatro posições pra jogar no inicio do Jogo, identificadas pelos números de 0 a 3 (fazendo então que as duplas sejam 0 e 2 contra 1 e 3). Esta numeração é consistente com a usada em Mesa.getQuantidadeDePedrasDoJogador(int).
        Parameters:
        mesa - A mesa do jogo do dominó, de onde se poderá descobrir, na hora de jogar, que pedras estão dispostas, qual o Numero aparece em cada Lado e quantas pedras cada Jogador tem na mão.
        cadeiraQueSentou - O número da cadeira em que o jogador se sentou (entre 0 e 3).
      • recebeMao

        void recebeMao​(Pedra pedra1,
                       Pedra pedra2,
                       Pedra pedra3,
                       Pedra pedra4,
                       Pedra pedra5,
                       Pedra pedra6)
        O jogador recebe sua mão: 6 pedras no início de cada partida.
        Parameters:
        pedra1 - A primeira pedra da mão.
        pedra2 - A segunda pedra da mão.
        pedra3 - A terceira pedra da mão.
        pedra4 - A quarta pedra da mão.
        pedra5 - A quinta pedra da mão.
        pedra6 - A última pedra da mão.
      • joga

        Jogada joga()
        Está na vez deste jogador jogar. Deve retornar uma Jogada dizendo qual pedra quer jogar e de que Lado da mesa ela deve ser jogada.

        Obviamente, o jogador deve ter recebido esssa pedra nessa partida e não ter jogado ela ainda.

        É responsabilidade do jogador saber que, se for a primeira rodada da primeira partida, ele deve comecar com o dozão, ou carroça de quina, etc. (se o sistema disser que este jogador deve ser o primeiro a jogar, então é certo que este jogador é quem tem a maior carroça).

        Para tocar, deve retornar o singleton Jogada.TOQUE. Retornar null ou um pedra-beba cancela o jogo imediatamente.

        Returns:
        A Jogada que o jogador decidiu fazer.
      • getVontadeDeComecar

        Vontade getVontadeDeComecar()
        Usado na primeira rodada de uma partida quando a dupla desse jogador ganhou a partida anterior, pra definir qual dos membros da dupla irá iniciar a partida. Cada jogador deve dizer, através deste método, o "quanto ele quer ser o jogador a fazer a primeira jogada". Irá começar a partida aquele que demonstrar uma Vontade maior. Em caso de empate, um dois dois vai ser escolhido aleatoriamente.
        Returns:
        A Vontade deste jogador em ser o primeiro a jogar nessa partida.