Erich D. Lunardeli Silvestre <[email protected]> Visão geral Serviços Interfaces Detalhes Avaliação Cliente do Jogador 1 Cliente do Jogador 2 SOAP SOAP SOAP Cliente do Jogador N Serviço de Bingo SOAP Serviço “Confiável” de Geração de Números Aleatórios Responsabilidades: Criar instâncias de bingo; Listar bingos; Gerar e distribuir cartelas; Verificar ganhadores; Armazenar e fornecer o estado de cada bingo. Responsabilidades: Gerar números pseudo-aleatórios em faixas determinadas; NÃO armazenar estado. PartidaDeBingo criar(Bingo bingo, int númeroDeJogadores) ; Parâmetros: bingo = bingo a ser realizado pelo serviço númeroDeJogadores = número de jogadores a esperar antes de iniciar os sorteios do bingo Retorno: partida criada, ela já deve possuir um número atribuído PartidaDeBingo obterPartida (int númeroDaPartida) Este método deve ser utilizado para a obtenção do estado da partida Parâmetro: númeroDaPartida = número da partida a obter Retorno: partida de bingo PartidaDeBingo[] listarPartidas(); Retorna a lista de partidas que ainda não foram iniciadas PartidaDeBingo entrar (String nome, int númeroDaPartida) Parâmetros: nome = nome pelo qual o jogador será reconhecido númeroDaPartida = numero da partida a entrar Retorno: Partida de bingo, ela deve conter todos os dados de estado preenchidos Obs: é bloqueante, só retorna quando o último jogador entrar ou um timeout acontecer. void sair (String nome, int númeroDaPartida) Parâmetros: nome = nome do jogador númeroDaPartida = numero da partida a deixar int[] gerarAleatorios(int menor, int maior, int[]excluídos, int quantidade) Parâmetros: menor = menor número a gerar maior = maior número a gerar excluídos = números que não devem ser “gerados” quantidade = números a gerar Retorno: Uma lista de números pseudo-aleatórios contidos no intervalo [menor, maior] e que não estejam na lista de excluídos. NÃO pode haver números repetidos. Classe Bingo Atributos: String nomeDoCriador nome do criador do bingo, ex: Joãozinho. String nomeDoBingo Nome do bingo, ex: Bingo da Igreja X String[] prêmios (opcional Premio[]) Lista dos prêmios oferecidos no bingo Um par de métodos get/set para cada atributo Classe Premio (opcional) Atributos: String nome = nome do prêmio String urlDaImagemDoPrêmio = url da imagem do prêmio Um par de métodos get/set para cada atributo Classe PartidaDeBingo Atributos: Int número Número de identificação da partida, deve ser único String estado Estado atual do bingo, valores possíveis: [“Não iniciado”, “Iniciado”, “Finalizado” ] int Rodada Número da rodada atual Cartela[] cartelas As cartelas de todos jogadores que participam da partida String[] ganhadores Lista dos ganhadores de cada rodada em ordem crescente int[] númerosSorteados Lista de números já sorteados na rodada atual String observações Reservado para mensagens. Por exemplo: Falta uma dezena para jogador X ganhar o prêmio Y. Um par de métodos get/set para cada atributo Classe Cartela Atributo: int[] dezenas Dezenas da cartela String nomeDoJogador Nome do dono da cartela Um par de métodos get/set para cada atributo Alguns métodos a cargo do desenvolvedor, ex: marcarDezena(int dezena). Uma interface gráfica deve ser implementada e permitir ao usuário: A criação de uma nova partida de bingo Listagem das partidas ainda não iniciadas Entrar em uma partida que esteja listada Quando em um bingo: Listagem dos atributos (nome, premios (se tiver URL mostrar imagem), etc..) Estado atual (atributos da classe partida) Cartela do jogador e as marcações (opcional: cartela dos demais jogadores) A atualização da interface gráfica com o Serviço de Bingo será feita pelo serviço obterPartida() O número de dezenas de cada cartela é livre, assim como a faixa de números sorteados : Sugestão: 20 e [1,50] Toda geração aleatória de números deve ser feita pelo Serviço de Geração de Números Aleatórios Uma rodada é encerrada quando um jogador completa sua cartela Ao fim de cada rodada: Um prêmio é atribuído ao vencedor As marcações das cartelas são zeradas Cada sorteio de dezena deve levar no máximo 5 segundos Implementação: Alguma linguagem que suporte WS: C++, Java, Python Sugestão: Java + Axis + Apache Tomcat O importante é que tanto a interface gráfica, quanto clientes e serviços funcionem Apresentação Enviar código do projeto pelo menos 1 dia antes via email Marcar horário via e-mail [email protected]