mt
Class Jogo

java.lang.Object
  extended by mt.Jogo
All Implemented Interfaces:
java.lang.Runnable
Direct Known Subclasses:
JogoBT, JogoLocal, JogoTCP

public abstract class Jogo
extends java.lang.Object
implements java.lang.Runnable

Jogo em andamento (independente de estar rodando local ou remotamente).

As implementações desta classe irão cuidar de executar o jogo (no caso de JogoLocal) ou manter a comunicação com um jogo em execução remota (JogoRemoto). Em qualquer caso, os objetos Jogador não terão ciência de onde o jogo está se passando.

A classe também faz o log (para fins de debug). Idealmente haveria uma classe para isso, mas economizamos uns Ks deixando aqui (não pode ser na classe principal porque esta depende das classes MIDP, que o servidor não tem).

Author:
Chester
See Also:
JogoLocal

Field Summary
 Carta cartaDaMesa
          Carta que determina a manilha (em jogo que não usa manilha velha)
protected  Carta[][] cartasJogadasPorRodada
          Guarda quais cartas foram jogadas em cada rodada.
protected  boolean jogoFinalizado
          Indica que o jogo foi finalizado (para evitar que os jogadoresCPU fiquem "rodando em falso" caso o jogo seja abortado
protected static java.lang.String letrasOrdenadas
          Referência para determinar a ordem das cartas no truco
static java.lang.String[] log
          Log rotativo (para exibir na tela do celular)
protected  boolean modoCE
          Sinalizador do modo confronto de estratégias
protected  int numJogadores
          Número de jogadores adicionados até agora
(package private)  int numRodadaAtual
          Rodada que estamos jogando (de 1 a 3).
protected  int[] pontosEquipe
          Pontos de cada equipe na partida.
protected  int[] vaquinhasNoPasto
          Número de vaquinhas no pasto de cada equipe.
 
Constructor Summary
Jogo()
           
 
Method Summary
 void abortaJogo(int posicao)
          Indica que o jogo foi finalizado por iniciativa do jogador naquela posição.
 boolean adiciona(Jogador j)
          Adiiciona um jogador na próxima posição disponível
abstract  void atualizaSituacao(SituacaoJogo s, Jogador j)
          Atualiza um objeto que contém a situação do jogo (exceto pelas cartas do jogador)
abstract  void aumentaAposta(Jogador j)
          Informa que o jogador solicitou um aumento de aposta ("truco", "seis", etc.).
abstract  void decideMao11(Jogador j, boolean aceita)
          Informa ao jogo o resultado de aceite daquela mão de 11
 Carta[] getCartasDaRodada(int rodada)
          Retorna as cartas jogadas por cada jogador naquela rodada
protected  Jogador getJogador(int posicao)
          Recupera um jogador inscrito
 char getManilha()
           
protected  int getValorTruco(Carta c)
           
static int getValorTruco(Carta c, char letraManilha)
          Recupera um valor relativo para a carta, considerando as manilhas em jogo Este método está na superclasse porque, no início da rodada, toda a informação necessária consiste na manilha e em sua regra, e essas já foram transmitidas, evitando assim, dúzias de comandos.
 boolean isAlguemTem11Pontos()
          Informa se alguma das equipes tem 11 pontos (para fins de permitir trucar) Isso não tem a ver com a "mão de 11" - aquela em que uma das equipes apenas tem 11.
abstract  boolean isBaralhoLimpo()
           
abstract  boolean isManilhaVelha()
           
abstract  void jogaCarta(Jogador j, Carta c)
          Informa que o jogador vai descartar aquela carta.
static void log(java.lang.String string)
          Método usado para debug (permite acompanhar o jogo no console)
abstract  void respondeAumento(Jogador j, boolean aceitou)
          Informa que o jogador respondeu a um pedido de aumento de aposta
abstract  void run()
          Inicia o jogo.
 void setManilha(Carta c)
          Determina a letra da manilha, baseado na carta virada (o "vira").
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

letrasOrdenadas

protected static final java.lang.String letrasOrdenadas
Referência para determinar a ordem das cartas no truco

See Also:
Constant Field Values

numRodadaAtual

int numRodadaAtual
Rodada que estamos jogando (de 1 a 3).

(as implementações devem manter atualizado)


numJogadores

protected int numJogadores
Número de jogadores adicionados até agora


cartasJogadasPorRodada

protected Carta[][] cartasJogadasPorRodada
Guarda quais cartas foram jogadas em cada rodada.

(as implementações devem alimentar este array)


cartaDaMesa

public Carta cartaDaMesa
Carta que determina a manilha (em jogo que não usa manilha velha)


pontosEquipe

protected int[] pontosEquipe
Pontos de cada equipe na partida.

As implementações devem atualizar (para se saber quando é mão de 11)


vaquinhasNoPasto

protected int[] vaquinhasNoPasto
Número de vaquinhas no pasto de cada equipe.


modoCE

protected boolean modoCE
Sinalizador do modo confronto de estratégias


jogoFinalizado

protected boolean jogoFinalizado
Indica que o jogo foi finalizado (para evitar que os jogadoresCPU fiquem "rodando em falso" caso o jogo seja abortado


log

public static java.lang.String[] log
Log rotativo (para exibir na tela do celular)

Constructor Detail

Jogo

public Jogo()
Method Detail

getValorTruco

public static int getValorTruco(Carta c,
                                char letraManilha)
Recupera um valor relativo para a carta, considerando as manilhas em jogo

Este método está na superclasse porque, no início da rodada, toda a informação necessária consiste na manilha e em sua regra, e essas já foram transmitidas, evitando assim, dúzias de comandos.

Parameters:
c - Carta cujo valor desejamos

run

public abstract void run()
Inicia o jogo.

O jogo deve ser inicializado numa thread separada da principal, desta forma é mais conveniente que ele seja o Runnable desta thread, daí o nome do método.

Specified by:
run in interface java.lang.Runnable

jogaCarta

public abstract void jogaCarta(Jogador j,
                               Carta c)
Informa que o jogador vai descartar aquela carta.

Tem que ser a vez dele e não pode haver ninguém trucando.

A rotina não verifica se o jogador realmente possuía aquela carta - assume-se que as instâncias de Jogador são honestas e se protegem de clientes remotos desonestos

Parameters:
j -
c -

decideMao11

public abstract void decideMao11(Jogador j,
                                 boolean aceita)
Informa ao jogo o resultado de aceite daquela mão de 11

Parameters:
j - Jogador que está respondendo
aceita - true se o jogador topa jogar, false se deixar para o parceiro decidir

aumentaAposta

public abstract void aumentaAposta(Jogador j)
Informa que o jogador solicitou um aumento de aposta ("truco", "seis", etc.).

Os jogadores são notificados, e a aposta será efetivamente aumentada se um dos adversários responder positivamente.

Observe-se que a vez do jogador fica "suspensa", já que lançamentos de cartas só são aceitos se não houver ninguém trucando. Como o jogador atualmente só pode trucar na sua vez, isso não é problema.

Parameters:
j - Jogador que está solicitando o aumento

respondeAumento

public abstract void respondeAumento(Jogador j,
                                     boolean aceitou)
Informa que o jogador respondeu a um pedido de aumento de aposta

Parameters:
j - Jogador que respondeu ao pedido
aceitou - true se ele mandou descer, false se correu

getCartasDaRodada

public Carta[] getCartasDaRodada(int rodada)
Retorna as cartas jogadas por cada jogador naquela rodada

Parameters:
rodada - número de 1 a 3
Returns:
cartas jogadas naquela rodada (índice = posição do Jogador-1)

atualizaSituacao

public abstract void atualizaSituacao(SituacaoJogo s,
                                      Jogador j)
Atualiza um objeto que contém a situação do jogo (exceto pelas cartas do jogador)

Parameters:
s - objeto a atualizar
j - Jogador que receberá a situação

isBaralhoLimpo

public abstract boolean isBaralhoLimpo()
Returns:
True para jogo sem os 4,5,6 e 7.

isManilhaVelha

public abstract boolean isManilhaVelha()
Returns:
True para manilhas fixas (sem "vira")

getValorTruco

protected int getValorTruco(Carta c)

adiciona

public boolean adiciona(Jogador j)
Adiiciona um jogador na próxima posição disponível

Parameters:
j - Jogador a adicionar
Returns:
true se adicionou o jogador, false se não conseguiu

getJogador

protected Jogador getJogador(int posicao)
Recupera um jogador inscrito

Parameters:
posicao - valor de 1 a 4
Returns:
Objeto correspondente àquela posição

getManilha

public char getManilha()
Returns:
Letra correspondente à manilha, ou constante em caso de manilha fixa
See Also:
SituacaoJogo.MANILHA_INDETERMINADA

setManilha

public void setManilha(Carta c)
Determina a letra da manilha, baseado na carta virada (o "vira").

Deve ser chamado a cada inicialização de mão.

Parameters:
c - Carta virada. Ignorado se for jogo com manilha velha

isAlguemTem11Pontos

public boolean isAlguemTem11Pontos()
Informa se alguma das equipes tem 11 pontos (para fins de permitir trucar)

Isso não tem a ver com a "mão de 11" - aquela em que uma das equipes apenas tem 11. Toda mão de 11 retorna true aqui, mas o 11x11 também.


abortaJogo

public void abortaJogo(int posicao)
Indica que o jogo foi finalizado por iniciativa do jogador naquela posição.

Implementações podem sobrescrever (ex.: para notificar o servidor) mas devem chamar o super()

Parameters:
posicao - posição (1 a 4) do jogador que motivou o abort

log

public static void log(java.lang.String string)
Método usado para debug (permite acompanhar o jogo no console)

Parameters:
string - Mensagem informativa