Você está na página 1de 7

UNIVERSIDADE FEDERAL DE PELOTAS

Disciplina: Programação Orientada a Objetos


Professor: Felipe Marques

Dungeon Clash
Jogos RPG são bastante populares, especialmente depois do
surgimento do Dungeons & Dragons na década de 70.
Inspirado por estes tipos de jogos, surge o Dungeon Clash,
criado com o objetivo de oferecer uma vivência prática de
programação para os alunos da disciplina de POO. O jogo
propoe uma aventura RPG para ser jogada em equipe. Um
time de personagens, com diferentes habilidades, pode ser
montado para concluir desafios, enfrentando ogros, trolls,
gobblings, zumbis, etc.

A dinâmica do jogo é simples e consiste de uma série etapas,


sendo que em cada uma delas, batalhas irão acontecer. Neste
confronto, os personagens são caracterizados por diferentes
classes que determinam suas habilidades, progressão de
níveis e uso de itens. Cada personagem é identificado pelo
seu nome, classe e nível, além de possuir três atributos
principais: força física (capacidade de ataque e resistência),
agilidade (velocidade de ataque e esquiva) e inteligência
(uso e resistência a magias), os quais variam de acordo com a classe. Eles terão também pontos de
vida (PV), pontos de magia (PM) e pontos de experiência (PE). Conforme o quadro abaixo, as
classes disponíveis inicialmente são arqueiro, guerreiro, mago e monstro, cada uma com suas
próprias habilidades, atributos iniciais e evolução detalhados em tabelas específicas. Novas classes
podem ser introduzidas no futuro, e os atributos de cada classe podem ser ajustados para equilibrar
as batalhas.

Arqueiro Guerreiro Mago Monstro


Suas flechas causam Ótimo em ataques corpo a Magos podem lançar Grande força física. Burro
menos dano que a espada corpo armado. Tem média magias e com o uso de como uma porta. Incapaz
de um guerreiro, mas tem força bruta para ataque itens, aumentam suas de usar magia.
a capacidade de atacar de desarmado. Sua resistência habilidades.
forma ágil! Desvia é ótima!
facilmente de ataques.
A cada nível, ganha 3 A cada nível, ganha 4 A cada nível, ganha 3 A cada nível, ganha 4
pontos de agilidade, 2 de pontos de força, 1 de pontos de inteligência, 1 pontos de força e 1 ponto
inteligência e 1 de força agilidade e 1 de de força e 2 de agilidade. de agilidade.
inteligência.

1. Arqueiro

Habilidade Dano Tempo de Alvo Pontos de


descanso Magia
(unidades)
Socar nível*Math.ceil(agilidade*0.1+força*0.3) 3 Único 0

Atirar flecha nível*Math.ceil(força*0.3+agilidade*0.5) 4 Único 0

Flecha nível*Math.ceil(força*0.3+agilidade*0.5 7 Único nível*Math


Encantada +inteligência*0.4) .ceil(
inteligência
+agilidade*
0.2)

2. Guerreiro

Habilidade Dano Tempo de Alvo Pontos de


descanso Magia
(unidades)

Socar nível*Math.ceil(agilidade*0.1+força 4 Único 0


*0.3)

Golpe de nível*Math.ceil(agilidade*0.3+força 5 Único 0


espada *0.7)

Espada nível*Math.ceil(força*0.3+agilidade 7 Único nível*Math.ceil(


Flamejante *0.5 inteligência*0.4) inteligência+forç
a*0.2)

3. Mago

Habilidade Dano Tempo de Alvo Pontos de


descanso Magia
(unidades)

Socar nível*Math.ceil(agilidade*0.1+força 2 Único 0


*0.1)

Enfraquecer nível*Math.ceil( 5 Único nível*Math.ceil


agilidade*0.2+força*0.3+ (inteligência*
inteligência*0.5) 0.5)

Cura Amigo nível*Math.ceil(agilidade*0.2+força 4 Único( nível*Math.ceil


*0.5+ inteligência*0.8) Aliado) (inteligência*
0.7)

4. Monstro

Habilidade Dano Tempo de Alvo Pontos de


descanso Magia
(unidades)

Socar nível*Math.ceil(agilidade*0.4+força 5 Único 0


*0.8)
Chutar nível*Math.ceil(agilidade*0.5+força 8 Único 0
*1.0)

Grito nível*Math.ceil(agilidade*0.2+força 6 Todos 0


atordoante *0.4)

5. Pontos de vida, magia e experiência

Os pontos de vida (PV) de um personagem definem sua resistência a golpes. Os pontos de magia
permitem ao personagem usar magias utilizando estes pontos. Abaixo, a definição de PV e PM
máximos:

PVmax = nível * força + (nível * agilidade/2)

PMmax = nível * inteligência + (nível * agilidade/3)

Os pontos de experiência (PE) servem para fazer um personagem passar para o próximo nível. A
cada nível os pontos de experiência voltam a zero e são necessários mais pontos para subir de nível.
PE aumenta quando um personagem inimigo é derrotado, pela seguinte equação:

PE += nível do adversário derrotado * 5

Para subir de nível, é necessário ter uma quantia de PE específica, definida pela fórmula:

PE necessário para subir de nível = nível atual * 25

6. Batalhas

Deve ser possível travar uma batalha entre, no máximo, 3 personagens heróis contra n inimigos. Os
três heróis devem ser escolhidos pelo usuário, entre guerreiro, arqueiro e mago. O usuário deve
digitar o nome e escolher a classe. Os inimigos podem ter qualquer classe e serão, inicialmente,
controlados pelo usuário (não há necessidade de implementar uma IA para controlar os inimigos).

Ao iniciar a batalha, o jogo deve exibir as informações dos dois times, com ID, nome, Classe, PV,
PM, Nível do personagem e tempo de espera. No momento zero, ao início do jogo, todos os
personagens terão tempo de espera igual a zero. Dessa forma, todos tem uma chance de atacar nesse
momento. Assim, deve-se sortear qual entre todos os personagens ataca primeiro.

Ao escolher qual personagem ataca, deve-se exibir a lista de suas habilidades, com nome, PM
necessário, dano que causa, tempo de espera que ela causa e quem/quantos ela afeta. Como cada
habilidade tem um tempo de espera, quando um personagem ataca, seu tempo de espera será
modificado para o tempo da habilidade usada. Ele deve ficar sem atacar até que seu tempo de
descanso atinja zero (0) novamente. A cada turno, o tempo de descanso é reduzido em 1. Se
ninguém puder atacar, o tempo de todos é reduzido em um e o turno se passa sem que ninguém
ataque, até que alguém atinja tempo zero (0). Turnos silenciosos não precisam ser notificados na
tela. Se por acaso dois ou mais personagens puderem atacar no mesmo instante, um sorteio é feito
para decidir qual deles irá atacar primeiro.

Uma vez atordoado (PV = 0), um personagem não pode atacar. Pontos de experiência vão para
todos os membros do time vencedor, incluindo aqueles que terminarem atordoados. Através de
um arquivo chamado jogo.txt serão definidas as equipes inimigas e uma descrição da fase, onde
cada conjunto desses define uma etapa do jogo. O formato do arquivo será:

<NomeDoInimigo1> <ClasseDoInimigo1> <NívelDoInimigo1>

<NomeDoInimigo2> <ClasseDoInimigo2> <NívelDoInimigo2>

<NomeDoInimigoN> <ClasseDoInimigoN> <NívelDoInimigoN>

fase Descrição da fase 1

<NomeDoInimigo1> <ClasseDoInimigo1> <NívelDoInimigo1>

<NomeDoInimigo2> <ClasseDoInimigo2> <NívelDoInimigo2>

<NomeDoInimigoN> <ClasseDoInimigoN> <NívelDoInimigoN>

fase Descrição da fase 2

Exemplo de Arquivo
Ogro Monstro 1

fase Um grupo de alunos caminhava tranquilamente pelo campus, quando se deparam com uma
criatura estranha. Depois de um grito horrendo, ela para cima dos alunos. É hora de
usar suas habilidades para derrotar a criatura!

Gobbling Monstro 1

ZumbiGerreiro Guerreio 2

fase Após derrotar o Ogro, o grupo segue em direção ao RU. Lá se deparam com duas
criaturas…

A cada vez que a palavra “fase” é encontrada no arquivo game.txt, a lista de inimigos é fechada
para uma batalha ser travada. Dessa forma, é possível criar n batalhas em um jogo, com inimigos de
diversas classes e níveis em cada batalha. Deve-se ter o cuidado de não colocar quantidade e nível
dos inimigos que não condizem com o nível dos aliados. Testes devem ser feitos para conferir o
balanceamento de cada batalha.

Dica: Para facilitar os testes, recomenda-se que as primeiras linhas do arquivo texto apresentem os
dados dos heróis do jogo, evitando que seja necessário incluir estes dados em toda execução dos
testes.

7. O Projeto

O projeto define um conjunto de classes mínimo, que devem ser implementadas conforme as
descrições a seguir. Caso julgue necessário, é possivel utilizar outras classes de objetos, desde que
elas não alterem a concepção do projeto definido pelo conjunto de classes mínimo.

7.1. Classe Personagem


Esta classe define os atributos e métodos comuns a todos os personagens do jogo. Os
atributos(privados) que devem estar nesta classe são:

● String nome; // Nome do personagem


● int nivel, PE; // Nível do personagem, Pontos de Experiência
● float PV, PM; // Pontos de Vida, Pontos de Magia
● int tempoEspera; // Tempo de espera resultando do uso de uma habilidade
● Classe classe; // Define a classe do personagem (Arqueiro/Guerreiro/Mago/ Monstro)
● int ID; // Identificador único do personagem. Lembre do uso da técnica de atributos
estaticos (static) para implementar um contador automatizado.

Naturalmente, os métodos que manipulam estes atributos devem estar implementados nesta classe,
entre eles um método para computar o ganho de pontos de experiência e realizar a subida de nível
quando possível, um método para atacar um inimigo, um método para atacar uma equipe (pois
existem habilidades como o "grito atordoante" do monstro, que atingem todos os adversários) e um
método para registrar o dano sofrido.

7.2. Classe Classe (de personagens)

Esta classe é abstrata, estende a classe Personagem e mantém atributos para forca, agilidade,
inteligencia e um conjunto/coleção de objetos da classe Habilidade. O método construtor desta
classe deve receber como parâmetro valores para força, agilidade e inteligência.

7.3. Classes Arquiro, Gerreiro, Mago e Monstro

Estas classes estendem a classe 'Classe' de personagens, implementando um método construtor que
inicializa os atributos de força, agilidade, inteligência e adiciona as habilidades do personagem, de
acordo com os quadros de cada personagem, que foram apresentados anteriormente.

7.4. Classe Habilidade

Esta classe define os atributos e métodos para caracterizar as habilidades dos personagens do jogo
(agrega habilidades). Os atributos(privados) que devem estar nesta classe são:

● String nome; // Nome da habilidade


● PesosDeAtributos pesosDano, pesosMana; // Define pesos de dano e mana(magia)
associados a habilidade
● int tempo; // Tempo de espera associado a habilidade
● boolean afetaTodos; // Se afeta todos os personagens da equipe adversária
● boolean afetaAmigos; // Se pode ser utilizada em amigos
● int ID; // Identificador único da habilidade. Lembre do uso da técnica de atributos estaticos
(static) para implementar um contador automatizado.

7.5. Classe PesosDeAtributos

Esta classe define um conjunto de atributos (privados), que referem-se aos pesos associados a forca,
agilidade, inteligencia, presentes nas fórmulas apresentadas nos quadros que definem as classes de
personagens.

7.6. Classe Equipe


A classe Equipe deve manter uma coleção de personagens (agregação). O projeto básico define que
cada batalha se dá entre duas equipes, a equipe do herois e a equipe dos inimigos. Como
funcionalidades básicas, esta classe deve implementar métodos para adicionar e buscar personagens
em uma equipe, retornar a equipe (coleção), computar pontos de experiência para a equipe,
determinar o próximo atacante, atualizar o tempo de espera, entre outros.

7.7. Classe Jogo

A única classe que pede entrada de dados e exibe mensagens na tela é a Jogo, que controlará o jogo.
A classe principal, que pode se chamar DungeonClash, apenas deve chamar um objeto de Jogo no
método main. Reforçando: Nenhuma classe pede entrada ou exibe saída em seus métodos, com
exceção da classe Jogo. Dessa forma as classes que tratam os personagens (classes de dados)
ficarão genéricas e podem ser facilmente adaptadas para um projeto com uma interface visual
diferente.

Da Avaliação

Como resultados desse trabalho, deverão ser entregues a implementação (código fonte compilável,
representando 80% da nota) e um relatório (representando 20% da nota).

Importante: Os trabalhos deverão ser apresentados durante os horários das aulas da última semana
do semestre (12 a 13 de março). Trabalhos que não forem apresentados ou que não compilarem,
não serão avaliados!

A implementação do projeto base definido acima, acompanhado do relatório, vale 9 pontos. Os


critérios de avaliação da implementação são os seguintes:
● (2 pontos) Habilidade em estruturar programas pela decomposição da tarefa em subtarefas,
utilizando subprogramação para implementá-las.
● (3 pontos) Emprego dos conceitos de POO: abstração, encapsulamento, herança e
polimorfismo.
● (3 pontos) Atendimento aos requisitos mínimos da especificação do problema.

Atividade Extra: A implementação de uma interface gráfica funcional somará 2 pontos aos 9
pontos mencionados anteriormente, ou seja, para atingir os 10 pontos, é necessário implementar
uma interface gráfica. O ponto excedente a 10 poderá ser somado a nota de uma das provas. Para se
considerada uma interface gráfica válida, é necessário que sejam utilizados controladores de layout,
botões, paineis com imagens, caixas de texto e labels.

Dos Grupos

O trabalho poderá ser feito em grupos de até TRÊS pessoas.

Da Entrega do Trabalho

O trabalho deve ser entregue via e-aula:


● Até o dia 11/03/2024 às 22:00, com a possibilidade de obter valor integral da nota.
● Até às 12:00 do dia 12/03/2024 (considerando 1 ponto a menos por 12h de atraso. Por
exemplo: Trabalhos entregues no dia 12/03/2024 às 10:00 terão nota máxima igual a 8).
● Entregas após às 12:00 do dia 12/03/2024 não serão mais avaliadas em hipótese
alguma.
Um representante do grupo deve submeter os seguintes arquivos para completar a entrega do
trabalho:
● Relatório do projeto, incluindo:
○ Capa, identificando o título do trabalho e os integrantes do grupo.
○ Introdução.
○ Breve descrição das funcionalidades implementadas, e um resumo das dificuldades
encontradas durante o trabalho.
○ Passos para compilar e rodar o programa gerado.
○ Exemplos de utilização. (Algumas telas durante o jogo)
○ Diagrama de classes, com nome das classes, atributos e métodos.
○ Breve explicação em onde e como foram aplicados os conceitos de orientação
objeto.
○ Conclusão.
○ Sugestões de trabalhos futuros.
● Arquivos fonte: para simplificar, pode-se compactar o diretório do projeto em um arquivo
ZIP, que deverá ser entregue via e-aula.

Código de Honra

O trabalho deve ser implementado na sua totalidade, sem uso de código de outros (colegas ou não).
O trabalho enviado deve representar um esforço honesto em resolver o problema - isto é, não é algo
"pela metade", que não implementa funcionalidades essenciais. Violações a esta conduta serão
penalizadas e o violador não só terá nota nula neste trabalho, ficando portanto sem parte da nota da
disciplina. Os plágios estão sujeitos a sanções administrativas pelo colegiado do curso.

OBSERVAÇÃO: Este documento poderá ser alterado em sala de aula ou e-aula, sem aviso
prévio. Portanto, compareçam às aulas e visualizem esse documento no site sempre que
possível.

Você também pode gostar