O seu grupo deve trabalhar em conjunto com o máximo de colaboração possível e vocês podem deixar sua criatividade trabalhar desde que implementem o que foi solicitado aqui na descrição do projeto. Em caso de dúvidas, principalmente caso ninguém no seu grupo conhecer muito bem o domínio de jogos RPG, fiquem à vontade para consultar o especialista no domínio, nosso monitor Rafael Correia, postando uma mensagem no paca no fórum apropriado.
Você deverá entregar um pacote contendo um conjunto de classes implementando todos os conceitos acima descritos. Além disso, deverá entregar uma classe de teste que cria uma ou mais instâncias de todas as classes definidas e exercita todos os seus métodos. Opcionalmente, você poderá criar uma bateria de testes automatizados utilizando o arcabouço de testes automatizados SUnit que vem junto com o Squeak. Isso fará o monitor bem feliz...
O arquivo a ser entregue é um arquivo Zip que contém 2 arquivos:
Nesta fase do jogo, o grupo de alunos terá que desenvolver duas partes do jogo.
A interface Web da construção do avatar, distribuição de talentos e habilidades de acordo com o nível do avatar, utilizando o arcabouço Seaside. Aparência, Legibilidade e facilidade de uso serão critérios que contarão na avaliação da interface.
A classe que inicia a interface do jogo deve se chamar WAEPJogo.
O exemplo da aula de Seaside ministrada por Hugo Corbucci se encontra
aqui.
Ele está em formato de arquivo do Monticello.
Quando dois jogadores vão colocar seus avatares em duelo, eles entram numa arena de batalha. Somente dois avatares poderão lutar entre si. A arena de batalha tem o poder de decidir a ordem que os ataques serão lançados e qual dos avatares foi o vencedor. Para um avatar vencer, ele deve consumir os Pontos de Saúde do adversário até chegarem a zero.
Para diminuir a saúde do adversário o avatar deve atacá-lo utilizando suas habilidades de ataque. Cada habilidade tem um efeito diferente no oponente e sua potência depende do nível do avatar e do nível do seu oponente (que pode ter uma defesa boa), lembrando que algumas habilidades podem gerar desvantagens no oponente, por exemplo, deixá-lo envenenado por 3 rodadas, o que reduziria, por rodada, um montante de saúde, que depende do nível da habilidade de envenenamento e do nível de resistência do oponente. Existem também habilidades de defesa, como o aumento da resistência, cura de pontos de saúde e outros, tais habilidades ajudam o avatar a resistir mais durante a luta. Uma habilidade (não importa se de ataque ou defesa) tem um alvo e ela causa um efeito nesse alvo que pode ser uma redução de saúde (caso seja habilidade de ataque) ou uma proteção (caso seja uma habilidade de defesa).
Não se pode esquecer que ao atacar um oponente, antes de reduzir a saúde do oponente os atributos do avatar devem ser levados em conta. Por exemplo, a resistência, esquiva (movimento feito para desviar de um ataque) e outros atributos que o grupo implementou como atributo de defesa.
A batalha na arena é dividida por rodadas (ou turnos). A cada rodada, os avatares duelando podem usar uma habilidade. Note que os efeitos das habilidades precisam ter uma ordem para ocorrer. Nesse caso a arena deve priorizar as habilidades de defesa. Quando os dois tiveram a oportunidade de usar suas habilidades, a rodada acaba e se inicia outra rodada e assim vai até acabar a luta. A luta acaba, como já dito anteriormente, quando um dos personagens tem sua saúde reduzida a zero.
Nesta fase do jogo, o grupo de alunos terá que desenvolver o que falta no jogo, isto é, a interface Web completa para que o avatar seja criado e que dois avatares entrem em duelo. Lembrem-se que deve haver uma sala onde serão listados os oponentes que foram registrados para lutar. O usuário pode registrar-se na sala ou escolher um oponente que já esteja registrado. Para que a luta seja mais equilibrada não se pode batalhar com oponentes que tenham mais de 3 níveis de diferença para o seu (tanto a mais, quanto a menos).
Cada turno DEVE exibir um log na página contando o que aconteceu no turno, exemplo:
Guerreiro 1 atacou Mago 1 com a habilidade Chuva de Espada e causou um dano de 20 pontos.
Mago 1 atacou Guerreiro 1 com a habilidade Bola de Fogo e causou um dano de 13 pontos.
Outro exemplo
Mago 1 usou a habilidade Cura em si mesmo e recuperou 15 pontos de saúde.
Guerreiro 1 atacou Mago 1 com a habilidade Corte Profundo e causou um dano de 10 pontos e Mago sofrerá de Sangria por 3 turnos.
Um exemplo do turno seguinte a esse
Mago 1 atacou Guerreiro 1 com a habilidade Míssil Arcano e causou um dano de 35 pontos.
Guerreiro 1 atacou Mago 1 com a habilidade Chuva de Espada e causou um dano de 20 pontos.
Mago 1 sofreu 3 de dano por causa de Sangria que terminará em 2 turnos.
No final da batalha, deve ser mostrado quanto cada jogador ganhou de experiência. Note que o perdedor ganha metade da experiência que ganharia se tivesse vencido a luta. O montante de experiência que o avatar ganha é proporcional ao nível de seu oponente.
A classe que inicia a interface do jogo deve se chamar WAEPJogo. Vale lembrar que apresentação do trabalho conta bastante, espera-se tanto uma documentação básica explicativa quanto código bem escrito e organizado. Finalmente, a interface Web deve ser elegante, com boa usabilidade e legibilidade.