Lista 4

Recomendações Importantes

  • A lista deve ser entregue até às 23:59:59 do dia 16/06.
  • Deixe seus programas entendíveis. Imprima mensagens para auxiliar o usuário a utilizar o seu programa.
  • Seja criativo. As mensagens do seu programa não necessitam estar iguais aos exemplos, a menos que seja especificado.
  • A lista é individual, portanto não compartilhe seus códigos com outros alunos ou os coloque em locais públicos (Pastebin, Github).
  • Não copie. Se for detectado cópia da internet ou de um colega, as LISTAS envolvidas serão completamente zeradas.
  • Alguns exemplos aqui definidos podem apresentar comentários. Note que são apenas ilustrativos.
  • A correção da Questão Desafio é booleana. Ou seja: você receberá o ponto extra do desafio caso a resposta esteja 100% correta. Qualquer erro, mesmo que seja em apenas um caso, invalidará a questão.
  • Não é permitido o uso da API de Java ou bibliotecas externas, exceto quando permitido explicitamente na questão, na lista, ou autorizado por um monitor através da lista de email (Google Groups) da disciplina. Questões submetidas que violarem essa regra serão consideradas como não entregues.
  • São permitidas nessa lista, para todas as questões:
    • String
    • Scanner

Questão 1 - Dani boy e seus companheiros

Danilo e seus colegas queriam jogar sessões de 3DeT, mas estavam com problemas para organizar as sessões devidos as diferenças de horário entre eles. Para organizar isso, ele teve a ideia de criar um sistema pra organizar as sessões de maneira mais eficiente.

Para isso, ele precisa cadastrar cada pessoal que quer jogar, com seu nome, login, classe preferível, e dias da semana disponíveis. Ele também precisa cadastrar as pessoas dispostas a serem mestres, que possuem as mesmas caracteristicas dos jogadores, mas só estes podem mestrar uma sessão, além de ter um atributo SessoesMestradas(contador de sessões do mestre).

Também é necessário criar os personagens. Cada personagem terá seu nome, sexo, nivel, e classe. Ao ser criado, o nivel do personagem é igual a 1.

As classes disponíveis são Guerreiro, Arqueiro, Mago, Clérigo e Ladino.


.Ao criar a sessão, se escolhe o o dia da semana que a sessão ocorre, o nome da aventura. Após isso, deve-se adicionar o mestre da sessão(que deve estar disponível no dia), os jogadores, e os personagens..Cada sessão para ser iniciada será composta por um mestre, e no minimo 3 jogadores. Para iniciar a sessão, todos os jogadores e o mestre devem podem jogar no dia em da sessão.O mestre pode ter tantos personagens quiser,e participar de várias sessões. Jogadores(não mestre) só podem ter um personagem por sessão, mas podem participar de várias sessões. Após iniciada a sessão, não pode alterar os jogadores,mestre e personagens desta sessão(ou seja, não pode mais adicionar ou remover jogadores, o mestre ou personagens). Para relacionar jogadores e personagens dentro da sessão crie um método para isso.

Cada personagem só pode participar de uma única sessão aberta(ele não pode estar em duas sessões que foram inicializadas ao mesmo tempo). Ao finalizar a sessão, todos os personagens que participaram da sessão sobem um nível, exceto os personagens do mestre,e ficam disponíveis para formação de novas sessões.

Crie um método que forme uma sessão “balanceada”. Forme uma sessão com exatamente um personagem de cada classe, escolhendo quais jogadores participarão da sessão pela sua classe preferível, um mestre(não é preciso escolher quais personagens serão do mestre). Obviamente, esta sessão também deve obedecer a regra de todos os jogadores estarem disponível no mesmo dia da semana.

Na sessão, crie um método que retorne o personagem de maior nível da sessão(se não houver, mostre uma mensagem dizendo que o grupo é balanceado.) .

Nas sessões, crie um método que verifica se a sessão está balanceada(pelo menos um personagem de cada classe)

Ao modificar um personagem, não se pode alterar o nivel, exceto quando se altera a classe, pois assim seu nivel volta a ser 1.

Questão 2 - Decidiram formar times

Crie os repositórios para as três classes básicas com as funções de adicionar um objeto, remover, buscar e verificar se certo elemento existe. Implemente-os com uso de array. O array deve iniciar com capacidade 2 e cada vez que for necessário ultrapassar a capacidade na hora de inserir, deve dobrar de tamanho. Obs.: é obrigatório o uso de interface para definir os repositórios.

Questão 3 - para noobar em equipe

Faça classes de negócio que vão se comunicar com os repositórios. Nestas classes serão lançadas exceções. Você deve lançar exceção para os seguintes casos especiais: Adicionar um objeto que já existe. Remover um objeto que não existe. Buscar um objeto e não encontrá-lo. Atualizar um objeto (sem modificar os logins, caso modifique uma jogador. Ao modificar um jogador, e tornar uma sessão aberta com tal jogador impossivel de ser realizada, finalize a sessão que ficou impossibilitada de ser realizada.). Não deve ser permitido: - Inicializar uma sessão com jogadores de horário incompatível. - Valores inválidos para os atributos dos objetos (Nomes vazios, Doses negativas, etc...).

Questão 4 - e não pararam nunca mais

Faça uma classe de fachada pro seu sistema! A fachada se comunica com as classes de negócio, independe da interface com que o usuário vai interagir (console, GUI etc.). Mantenha a consistência dos dados considerando as relações entre as entidades: - Para inicializar uma sessão é preciso que todos os jogadores possam jogar no dia -Se tentar iniciar a sessão com jogadores que não podem participar no dia, lance uma exceção. - Para criar uma sessão, o Mestre deve estar no repositório(e estar disponível no dia da sessão) Deve conter métodos que utilizem os métodos já citados nas questões anteriores, como achar o MVP da Sessão, criar uma sessão balanceada, etc.

Questão 5 - mas para sorte de todos

Por último e mais importante, faça uma classe de teste, para interagir com o usuário e se comunicar com a fachada, onde através do console seja possível realizar todas as seguintes operações: Criar e excluir objetos. Buscar nos repositórios usando o login(jogador),nome(personagem),sessao(login do mestre e nome da aventura), e visualizar os dados do objeto encontrado Modificar um objeto. Trate todas as exceções da fachada utilizando blocos try/catch de forma que o programa não encerre quando qualquer uma dessas exceções for lançada e que fique claro para os usuários qual erro ocorreu. Faça um menu numérico que facilite os testes (monitor feliz, correção feliz =D). Obs.: nesta questão é permitido o uso de Scanner

Questão 6 - o jogo acaba aos 20

Será concedido o token de desafio à quem conseguir nota maior ou igual a 7,5 nessa lista.