Design

A estrutura do jogo está dividida em dois pacotes: mahjong e graphicalInterface. O pacote Mahjong contém todo o funcionamento do jogo e o graphicalInterface é responsável por apreasentar o jogo ao usuário.



A seguir vem um diagrama UML simplificado onde são representadas as principais classes e interações dentro do pacote mahjong.



Table A principal função da classe Table é mediar o jogo. Ela é responsável por distribuir as peças, determinar quem joga, receber as peças descartadas, calcular a pontuação e encerrar o jogo. Portanto ela funciona como um se fosse um juiz. Além disso, a classe Table também é responsável por enviar notificações à interface sempre que ocorre uma mudança no panorama do jogo.
Player A classe abstrata Player representa um jogador que tem a responsabilidade de decidir qual peça será descartada e de como aproveitar o descarte dos outros jogadores. Essa classe é especializada em duas sub-classes: RealPlayer e VirtualPlayer.
A classe RealPlayer representa usuário e deixa a cargo deste a tomada das decisões.
A classe VirtualPlayer delega as responsabilidades a classe Intelligente.
Intelligence Intelligence é a super-classe das classes que representam a inteligência artificial dos jogadores virtuais. A princípio existem três níveis de inteligência, Júnior, Normal e Master, onde é crescente a dificuldade encontrada pelo jogador real.
Result A classe Result armazena o resultado da rododa corrente. A princípio o resultado está sempre vazioe no momento que um dos jogadores alcançar uma batida o resultado é preenchido com todos os tipos de batida conseguidos pelo jogador. No momento que o resultado é preenchido a mesa (Table) percebe e encerra a rodada fazendo o cálculo dos pontos a partir do conteúdo do resultado.
Analyser A cada jogada a classe Analyser consulta a mão de cada jogador e testa todos os tipos de batida com a intençao de saber se alguém bateu. Quando a mão de um dos jogadores satisfaz a uma das batidas o resultado (Result) é preenchido com aquele tipo de batida.


ImageServer Carrega as imagens e as torna disponíveis às requisições da classe GameInterface.
GameInterface Espera por notificações da classe Table e atualiza a tela de acordo com o tipo de notificação.
DrawDialog Apresenta ao usuário quais operações ele pode fazer com uma peça comprada por ele.
DiscardDialog Apresenta ao usuário quais operações ele pode fazer com uma peça descartada por outro jogador.
FinishedHandDialog Apresenta ao usuário a batida e os pontos no final de cada rodada.
PlayerPanel É responsável por apresentar a mão de cada um dos jogadores. Ela é especializada para cada um dos jogadores.
CenterPanel Mostra informações gerais sobre a rodada, tais como jogador atual, doras, número restante de peças, rodada atual.

principal