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 Jogadorrecebendo 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ãojogando
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á suaJogada
: 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 (verJogadorSimplorio
, 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:
- 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.
- Empate por contagem de pontos: A partida trava, jogadores de duplas diferentes empatam com o número mínimo de pontos na mão.
- 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.
- 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 emMesa.getQuantidadeDePedrasDoJogador(int)
.
-
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.
-
joga
Jogada joga()
Está na vez deste jogador jogar. Deve retornar umaJogada
dizendo qual pedra quer jogar e de queLado
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
. Retornarnull
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 umaVontade
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.
-
-