Escolar Documentos
Profissional Documentos
Cultura Documentos
Trabalho 2
1 Objetivo
Estudo e aplicao dos conceitos de programao orientada a objetos, abordados em aula, para uma
aplicao na rea de jogos utilizando-se da linguagem de programao Java.
2 Regras do Jogo
As regras do LaMa so:
1. Cada jogador inicia com um Heri com trinta pontos de vida. Vence o jogador que reduzir a vida
do Heri do oponente a zero.
2. O baralho possui trinta cartas, sendo 22 Lacaios e 8 Magias.
3. O primeiro jogador inicia com 3 cartas, enquanto o segundo jogador inicia o jogo com 4 cartas.
4. Todo o incio de turno cada jogador compra uma carta do baralho, de maneira aleatria.
5. No turno i, cada jogador possui min(i, 10) de mana para ser utilizado em uso de cartas ou poder
herico, no podendo ultrapassar este valor. O limite de mana acrescido at o dcimo turno e
ento no aumenta mais. Exceo: O segundo jogador possui dois de mana no primeiro turno ao
invs de um de mana.
6. Existem dois tipos de carta: Lacaios e Magias.
Lacaios so baixados mesa e no podem atacar no turno em que so baixados, apenas no
turno seguinte (se ainda estiverem vivos!).
Magias possuem efeitos imediatos ao serem utilizadas. Existem trs tipos de magias: (i) dano
em alvo, (ii) dano em rea, (iii) magia de buff. As magias de dano em alvo causam dano em
um nico lacaio do oponente escolha do jogador utilizador ou no heri do oponente. As
magias de rea causam dano em todos os lacaios e tambm no heri do oponente. Por fim, as
magias de buff podem aumentar o ataque e a vida de um dos lacaios do jogador que a utilizar.
No permitido usar magia de buff em lacaio do oponente.
7. No possvel ter mais de sete lacaios em campo.
1
8. Um lacaio s pode atacar no mximo uma vez por turno, assim como o poder herico tambm s
pode ser utilizado no mximo uma vez por turno.
9. O jogador pode utilizar, uma vez por turno, o poder herico de seu Heri ao custo de duas unidades
de mana. O poder herico faz o Heri atacar um alvo qualquer com um de dano. Se o alvo do poder
herico for um Lacaio, o Heri que atacou receber de dano o ataque do Lacaio alvo.
10. Cada Lacaio pode escolher atacar um alvo por turno. Os possveis alvos so: o Heri do oponente
e os Lacaios em mesa do oponente. Se o Lacaio x atacar o Lacaio y, o Lacaio y tem sua vida
diminuda pelo poder de ataque do Lacaio x, e o Lacaio x tem sua vida diminuda pelo poder de
ataque do Lacaio y. Se a vida de um Lacaio chegar a zero, ele morre e retirado da mesa.
11. Se um Lacaio atacar um Heri, a vida do Heri reduzida pelo poder de ataque do Lacaio mas o
Lacaio no sofre nenhum tipo de dano.
12. O jogador pode possuir at sete cartas na mo. Se j possuir sete cartas ao incio de seu turno, a
nova carta que seria comprada descartada.
13. Quando o jogador fica sem cartas para comprar do baralho chamamos esse estado de jogo de fadiga.
A fadiga inicia quando em um dado turno no for possvel a um jogador comprar cartas porque o
baralho j est esgotado, ento o jogador recebe um de dano no incio daquele turno. No prximo
incio de turno receber dois de dano, depois trs, e assim por diante.
14. Para o Trabalho 2, os lacaios podem possuir efeitos especiais de investida, ataque duplo ou
provocar. (Seo 5).
3 Descrio do Trabalho
A atividade proposta para este trabalho ser a implementao de um Motor para o jogo LaMa (Lacaios
e Magias).
Motor(): Mtodo construtor. Inicializa os atributos da classe. A classe MotorRA dever chamar
este construtor atravs do mtodo super().
executarPartida() (abstrato): o mtodo que executado aps o objeto Motor ser instanciado e
realiza uma partida entre dois jogadores. Este mtodo deve retornar um inteiro contendo qual o
jogador vencedor se no houver nenhum erro durante a execuo do Motor. O valor de retorno 1
se o primeiro jogador vencedor, e 2 se o segundo jogador o vencedor. Se houver algum erro, o
MotorRA dever disparar uma exceo correspondente (Seo 6.2).
processarJogada() (abstrato): Neste mtodo devero ser processadas uma a uma as jogadas que um
jogador realizar em um certo turno. obrigatrio que a classe MotorRA implemente este mtodo
e utilize-o para realizar o processamento das jogadas.
2
imprimir() (final): Este mtodo responsvel por imprimir mensagens de log no terminal e
tambm em um arquivo (dependendo dos parmetros verbose e saidaArquivo do Motor).
gerarListaCartasPadrao() (final): Este mtodo gera uma lista de cartas do baralho padro LaMa.
A Tabela 1 lista os atributos da classe Motor. Os atributos devero ser utilizados durante a implemen-
tao da classe MotorRA. Com exceo dos atributos verbose e saidaArquivo, todos os atributos possuem
escopo protected e portanto podem ser acessados diretamente pelas classes herdeiras (como o caso de
MotorRA). responsabilidade da classe MotorRA manipular estes atributos de maneira correta.
Para uma implementao correta deste trabalho necessrio que esses atributos sejam inicializados
no construtor atravs do uso do mtodo super().
4 Demais classes
4.1 Classe Jogador
O Motor dever se comunicar com a classe Jogador atravs dos mtodos construtor Jogador() e proces-
sarTurno(). O mtodo construtor executado somente uma vez, fornecendo a mo inicial e a informao
se a classe Jogador primeiro ou segundo jogador na partida. Em seguida sero feitas vrias chamadas
ao mtodo processarTurno() para cada turno daquela partida.
3
ento o mtodo get correspondente se chamar getVidaAtual (note que a letra v virou maiscula).
Note que a classe Carta (Tabela 2) uma classe abstrata. Existem duas classes que herdam da classe
Carta: CartaLacaio e CartaMagia que sero descritas a seguir.
Ateno: o mtodo equals() para Carta compara se os IDs das cartas so iguais. A classe Carta
implementa a interface Comparable e o somente o atributo ID utilizado para comparar as cartas. Pode-se
supor que qualquer baralho LaMa vlido contm IDs nicos para cada jogador e para cada carta (mesmo
tratando-se de cartas de mesmo nome).
Ateno: o atributo efeito dever ser utilizado e considerado pelo MotorRA se e somente se o efeito
correspondente estiver contido no conjunto do atributo funcionalidadesAtivas inicializado no MotorRA
(Seo 5).
4
Tabela 4: Classe CartaMagia
tipo: Um atributo do tipo TipoJogada (enumerao) que define se a jogada trata-se de baixar um
lacaio mesa (TipoJogada.LACAIO), utilizar uma magia (TipoJogada.MAGIA), atacar com um
lacaio (TipoJogada.ATAQUE) ou utilizar um poder herico (TipoJogada.PODER).
cartaJogada: Um atributo da classe Carta que define qual carta est sendo utilizada. No caso de
baixar um lacaio (TipoJogada.LACAIO) o lacaio que ser baixado, no caso de utilizar uma magia
a carta da magia (TipoJogada.MAGIA), no caso de atacar com um lacaio o lacaio que ir atacar
(TipoJogada.ATAQUE). Toma valor null no caso de Poder Herico.
5
Tabela 6: Atributos relevantes por tipo de Jogada
cartaAlvo: Um atributo da classe Carta que define qual carta ser utilizada como alvo. Ou ento
toma o valor null para ter como alvo o heri do oponente. Se for realizar um ataque (TipoJo-
gada.ATAQUE) ou utilizar uma magia de alvo (TipoJogada.MAGIA) o campo deve conter a carta
do lacaio do oponente que ser alvo desse dano, ou ento null para ter o heri como alvo.
Note que alguns campos no so utilizados dependendo da jogada, a Tabela 6 mostra quais campos
so utilizados para cada tipo de jogada (X) e quais no so (vazio). Por exemplo, se a jogada de baixar
um lacaio, o tipo ser TipoJogada.LACAIO, e o atributo cartaJogada ser o lacaio que ser baixado
mesa. Porm o atributo cartaAlvo ser ignorado e como conveno deve-se utilizar null nesta situao.
O construtor da classe Jogada : public Jogada(TipoJogada tipo, Carta cartaJogada, Carta cartaAlvo).
5 Efeitos
Um novo recurso do jogo LaMa dever ser implementado: os efeitos especiais de lacaio. Esses efeitos
so caracterizados no objeto CartaLacaio pelo atribudo efeito. Tais efeitos podem ser trs:
INVESTIDA: um lacaio com esse efeito pode atacar no mesmo turno em que baixado mesa.
ATAQUE_DUPLO: um lacaio com esse efeito pode atacar duas vezes por turno. O lacaio pode
atacar dois alvos diferentes. Entretanto, se o primeiro ataque causar a morte do lacaio ele no
poder atacar uma segunda vez.
PROVOCAR: se houver algum lacaio com esse efeito em campo de um jogador, os lacaios do outro
jogador e tambm o poder herico deste s podero ter como alvo o lacaio com efeito provocar. Em
outras palavras, no possvel atacar outro alvo diferente do lacaio com PROVOCAR. Somente
aps o(s) lacaio(s) com PROVOCAR morrer(em) que permitido atacar outros alvos. Magias
podem ser utilizadas em qualquer alvo independentemente do efeito PROVOCAR.
6
5.1 Enumerao TipoEfeito
Trata-se de uma enumerao usada como atributo na classe CartaLacaio. A enumerao pode assumir os
seguintes valores: NADA, INVESTIDA, ATAQUE_DUPLO, PROVOCAR.
6 Funcionamento do Motor
O Motor dever funcionar de maneira a controlar o jogo LaMa, interagindo com os jogadores e validando
as suas jogadas a cada turno. Assim que houver um vencedor o MotorRA dever retornar um inteiro
informando quem venceu o jogo. Ou, caso seja encontrada uma Jogada invlida, o MotorRA dever
disparar uma exceo do tipo LamaException (Seo 6.2) contendo as informaes pertinentes.
atravs destas informaes que o Motor ser posteriormente avaliado quanto corretude (alm
de inspeo do cdigo), portanto muito importante preencher essas informaes corretamente. Mais
informaes para preenchimento dos atributos de LamaException esto na Seo 6.2.
Alm disso o Motor dever informar com mensagens cada jogada que realizada por qual jogador e
quais os efeitos destas jogadas. Detalhes sobre as mensagens esto na Seo 6.1.
7
verificou-se invlida. Por fim, o atributo message deve ter uma mensagem contendo informaes do erro.
A mensagem de formato livre mas dever conter pelo menos as informaes descritas na Tabela 8.
Portanto cada jogada precisa ser verificada, em ordem, se no viola nenhuma regra antes de ser exe-
cutada no jogo. Assim que for verificada uma jogada invlida, o MotorRA dever realizar disparar a
exceo contendo todas as informaes pertinentes.
7 Independncia de Baralho
O MotorRA dever funcionar para qualquer baralho contendo cartas LaMa vlidas e no somente para o
baralho padro disponibilizado.
8 Diagrama
disponibilizado para o Trabalho 2 um diagrama de classes contendo as principais classes utilizadas
nesse projeto. recomendvel a consulta ao diagrama para uma viso mais sistmica do projeto.
9 Sada do programa
Ateno: a classe MotorRA deve imprimir mensagens apenas atravs do mtodo imprimir(). Qualquer
impresso fora deste mtodo ser considerada fora do padro e penalizada de acordo.
10 Critrio de Avaliao
O trabalho ser avaliado atravs dos seguintes critrios:
Onde:
N T2 : Nota do Trabalho 2
N P1 : Nota correspondente ao critrio de corretude.
8
Tabela 8: Tabela de cdigos de erros
Cdigo Descrio do erro Mensagem de erro deve conter pelo menos e de maneira clara
1 Baixar lacaio ou usar magia ID da carta que seria usada/baixada, IDs das cartas na mo.
sem possuir a carta na mo
2 Realizar uma jogada que o O Tipo da Jogada, quanto de mana a jogada custaria, quanto de mana
limite de mana no permite h disponvel.
3 Tentar baixar uma carta de ID e nome da carta que seria utilizada incorretamente
magia como carta lacaio
4 Baixar um lacaio j tendo ID e nome do lacaio que iria ser baixado
sete outros lacaios em mesa
5 Atacar com um lacaio inva- ID (invlido) da carta lacaio que iria atacar
lido de origem do ataque
6 Atacar com um lacaio que ID da carta lacaio que iria atacar
foi baixado neste turno
7 Atacar com um lacaio mais ID da carta lacaio que iria atacar
de uma vez por turno
8 Atacar com um lacaio um ID do lacaio atacante, ID (invlido) do alvo que seria atacado
alvo invlido
9 Tentar usar uma carta de la- ID e nome da carta que seria utilizada incorretamente
caio como uma magia
10 Usar uma magia de alvo ou ID da magia de alvo, ID (invlido) do alvo
buff em um alvo invlido
11 Usar o poder herico mais ID do alvo
de uma vez por turno
12 Usar o poder herico em um ID do alvo invlido
alvo invlido
13 Existindo um lacaio com ID do alvo invlido, ID do lacaio vivo com provocar
provocar, atacar outro alvo
Obs: Deve-se escrever na mensagem Heri X quando o heri for o alvo, X sendo 1 ou 2.
9
3. Mensagens do Motor: As mensagens que o Motor emitir com o mtodo imprimir() devem ser
sucintas e ao mesmo tempo possuir as informaes relevantes para informar cada jogada.
4. Comentrios: Os comentrios devem ser suficientes para explicar os trechos mais importantes da
implementao e bem identados, com preferncia para o formato JavaDoc 1 .
5. Convenes: A implementao deve seguir as convenes de nomes de atributos e mtodos do
Java. O encapsulamento dos atributos deve ser observado.
11 Observaes
O trabalho individual.
No permitido nenhum tipo de compartilhamento de cdigo entre os alunos ou o uso de cdigos
de terceiros. Uma nica exceo permitida consiste na API padro da linguagem Java 2 . Em caso
de plgio, todos os alunos envolvidos sero reprovados com mdia zero.
O aluno deve realizar os testes de sua classe no ambiente de programao JavaSE 1.8 (Java 8). Uma
vez que os cdigos sero testados nesse ambiente.
12 Submisso
O trabalho dever ser submetido at s 23:55 do dia 27 de junho pelo moodle. A submisso deve ser
exclusivamente um arquivo MotorRAxxxxxx.java (onde xxxxxx o RA do aluno). Importante:
em caso de mais de uma classe, todas as classes devero estar no mesmo arquivo e somente a classe
MotorRAxxxxxx deve ser pblica.
1 https://pt.wikipedia.org/wiki/Javadoc
2 http://docs.oracle.com/javase/8/docs/api/
10