Lista 2

Recomendações Importantes

  • A lista deve ser entregue até às 23:59:59 do dia 05/05.
  • 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
    • Random

Questão 1 - Harrison Jones and The First Crusade

O grande conquistador, Sinbad, quer sua ajuda para fazer um simulador de dungeons e ajudar seu amigo Harrison Jones a chegar no tesouro agora que ele já não pode mais entrar nas dungeons. Para isso, com a experiência dele de 7 dungeons, ele memorizou os tipos de armadilhas e suas frequências de aparição. Com esses dados você irá fazer um programa que simule a dungeon e sirva para o usuário tentar chegar no tesouro vivo.

Instruções mais específicas :

    • O mapa da dungeon terá dimensões 10x10.
    • O personagem começa na posição (10,10)
    • O tesouro fica fixo na posição (1,1)
    • A movimentação será feita por : W ( Cima ), A ( Esquerda ), S ( Baixo ), D ( Direita ).
    • O programa deverá aceitar as entradas de movimentação tanto maiúsculas quanto minúsculas.
    • No final de cada movimentação deve ser imprimida a vida atual do jogador e o novo mapa.
    • O personagem entra na dungeon com 3 poções, que recuperam 20 de vida cada, todavia as poções não podem ultrapassar a vida máxima. Para utilizar a poção o o programa deverá receber a entrada P ou p. Após utilizar a poção, não será necessário imprimir um novo mapa, só pedir uma nova direção ou item e imprimir sua nova vida atual.
    • Qualquer outra entrada deverá ser considerada inválida e o programa deverá pedir uma nova entrada. Também não é permitido andar para fora do mapa, nesse caso também deverá ser pedida uma nova entrada.
    • O mapa e o personagem deverão ser duas classes separadas do Main.
    • O personagem terá os atributos : nome, poções e vida. O nome deverá ser pedido ao iniciar o programa.
    • A vida máxima do personagem é igual a 100.
    • O mapa fica para a sua implementação, pode escolher os atributos como quiser.
    • Caso o personagem chegue no tesouro o programa deverá ser encerrado e imprimida uma mensagem de comemoração. Caso ele morra, será imprimida uma mensagem de derrota e também encerrará o programa.

Abaixo segue a tabela das armadilhas preparada por Sinbad para que você crie seu programa.

Exemplos de Mapa :

Questão 2 - Dragon Ball: A volta dos que não foram

Há um boato surgindo na Terra de que os vilões que um dia Goku derrotou encontraram um jeito de ressucitar. Para lidar com eles novamente, você deverá criar um programa que irá simular uma batalha contra eles. No programa, o usuário irá selecionar sua raça, distribuir seus atributos e selecionar suas técnicas. Após isso ele irá escolher as opções de simulação de batalha contra Freeza, Cell ou Majin Buu.

Cada raça tem seu diferencial no que cada atributo oferece para cada ponto distribuído. Além disso, Namek e Saiyan tem uma técnica exclusiva e passiva, para compensar isso, eles só poderão ter 3 técnicas e Humano terá 4 técnicas a sua escolha. A técnica especial de Namek é Regeneração, ao morrer a primeira vez num combate ele volta a vida com 50% da sua vida máxima. A técnica especial do Sayan é Super Sayan, a cada 25% do seu hp máximo perdido, ele aumenta seus atributos ataque e espirito em 25% mudando de forma.

Instruções mais Específicas.

    • Você deverá criar as classes Personagem e Técnica.
    • A classe Personagem terá pelo menos os atributos :
    • Nome
    • Raça
    • Ataque
    • Dano
    • Espírito
    • Ki
    • Estamina
    • Vida
    • Técnica[4]
    • O personagem começa por padrão com :
    • 150 de dano.
    • 300 de ki.
    • 600 de vida.
    • 0 nos outros atributos.
    • O personagem começa com 100 pontos para distribuir entre Ataque, Espírito e Estamina.
    • Uma atributo pode ter no máximo 50 pontos.
    • A classe Técnica terá pelo mneos os atributos :
    • Nome
    • Custo
    • Dano
    • Após a criação do personagem o programa deverá imprimir as informações do personagem e um resultado do Scouter que segue a fórmula : Poder de Luta = Dano * 5,5 + Ki * 3,5 ( Caso o poder de luta ultrapasse 8.000 unidades, deverá ser impresso que o Scouter quebrou ).
    • Após a impressão, o programa deverá irpara um menu com as opções :
    • Batalhar com Freeza.
    • Batalhar com Cell.
    • Batalhar com Majin Buu.
    • Sair.
    • Ao escolher "sair", deverá ser impresso seu histórico de batalha, quantas vezes ganhou e perdeu contra cada oponente.
    • Durante uma batalha, cada turno terá as possíveis ações :
    • Ataque Normal ( 0,5 * dano )
    • Técnica
    • Ao selecionar a opção Técnica, deverá ir para outro menu com as 4 técnicas do personagem para escolher uma.
    • Caso seja impossível utilizar uma técnica por falta de ki ou por não atender suas condições, deverá ser pedida uma nova ação para completar o turno.
    • Após cada ação, deverá ser impresso o dano causado da ação e a vida atual dos jogadores.
    • Os oponentes jogam aleatoriamente 40% de chance para um ataque e 60% de chance para uma técnica, dentro das técnicas a chance é igual para todas.
    • Os oponentes em 40 pontos em todos os atributos e eles tem os mesmos efeitos que os atributo de um Humano.
    • Todos os oponentes tem o efeito passivo de um Sayan.

Tabela de Atributos e seus Efeitos por Raça :

Lista de Técnicas para Criação de Personagem :

Oponentes :

    • Freeza :

    • Cell :

    • Majin Buu :

Questão 3 - Lol Calculator

Peu é um exímio jogador de League of Legends e quis fazer um programinha para ajuda-lo no jogo. Porém, suas habilidades em programação não são lá muito boas, então ele pediu sua ajuda. Sua missão é fazer um programa que simule o dano de um Kha'Zix em um Rengar ou vice-versa. Porém, ambos com itens em seu inventário.


OBS.:

O máximo de itens que cada um pode carregar são 6, e se houver itens iguais, a passiva única deve ser considerada apenas UMA vez.


Não precisa se preocupar com a formatação de saída dos cálculos (NumberFormat).

-- Informações --

(DA= Dano de Ataque / PA= Penetração de Armadura / PV= Pontos de Vida)

Stats base do Rengar level 18:

Vida: 2116.0

Armadura: 85.4

Dano de Ataque: 111

Stats base do Kha'Zix level 18:

Vida: 2018.0

Armadura: 75.0

Dano de Ataque: 108

A fórmula para o MULTIPLICADOR da REDUÇÃO de dano baseado na armadura.


(100/(100 + V)) quando armor maior ou igual que 0.


(2-(100/100 - V)) quando armor menor que 0.

Onde V é o valor da armadura do oponente.


Ex.: 25 de armadura -> 0.8x do dano recebido.

100 de armadura -> 0.5x do dano recebido.

-25 de armadura -> 1.2x do dano recebido.

E a penetração de armadura reduz a armadura do inimigo antes do ataque ser feito.


Ex.: Rengar tem 85.4 de armadura, e o Kha tem 10% de penetração, logo, o Rengar terá 76.8 de armadura ao receber o ataque do Kha,

e se fosse 10 de PA o Rengar teria 75.4 de armadura ao receber o ataque.

Skills:


• Kha'Zix:


Ataque básico:

Dano físico: igual ao DA do campeão.


Taste Their Fear:

Dano físico: 170 + 120% do DA.


Void Spike:

Dano físico: 200 + 100% do DA.


Leap:

Dano físico: 205 + 20% do DA.


• Rengar:


Ataque básico:

Dano físico: igual ao DA do campeão.


Savagery:

Dano físico: 150 + 20% do DA.


Empowered Savagery:

Dano físico: 240 + 50% do DA.


Bola Strike:

Dano físico: 250 + 70% DA.

Itens:


Sword of the Occult:

+10 DA.

Passiva única: +5 DA por stack, e no máximo 20 stacks.

Quando tem 20 Stacks dá um bônus de 10% de PA.

B.F. Sword:

+50 DA.


The Bloodthirster:

+80 DA.


The Black Cleaver:

+50 DA.

Passíva única: +10 PA.


Blade of The Ruined King:

+25 DA.

Passiva única: + 8% da Vida do inimigo em DA.


The Brutalizer:

+25 DA.

Passiva única: +10 PA.

--

Chain Vest:

+40.0 de armadura.

Ninja Tabi:

+25.0 de armadura

Passíva única: bloqueia 10% extra de um ataque básico.

Randuin's Omen:

+70.0 de armadura.

+500 PV.

Thornmail:

+100.0 de armadura.

Seeker's Armguard:

+30.0 de armadura.

Passiva única: +0.5 armadura por stack. Máximo de 30 stacks.

Quando tem 30 stacks, bônus de 20% extra em um ataque básico.

Sunfire Cape:

+45.0 de armadura.

+450 PV.

A questão deve conter um menu, onde deve acabar somente quando o usuário pedir.

Modelo:

Olá invocador, escolha sua opção no menu: //Saída


1 - Fazer novo cálculo //Saída


2 - Sair //Saída


1 //Entrada do usuário


1 - Kha'Zix ataca e Rengar defende. //Saída


2 - Rengar ataca e Kha'Zix defende. //Saída


1 //Entrada do usuário


Digite quantos itens Kha'Zix possui em seu inventário. //Saída


2 //Entrada do usuário


Digite, agora, quais são estes itens. //Saída


1 - Sword of the Occult //Saída


2 - B.F. Sword //Saída


3 - The Bloodthirster //Saída


4 - The Black Cleaver //Saída


5 - Blade of The Ruined King //Saída


6 - The Brutalizer //Saída


2 //Entrada


B.F Sword adicionada(o). //Saída


1 //Entrada


Quantos stacks a Sword of the Occult possui? //Saída


10 //Entrada


Sword of the Occult adicionada(o). //Saída


Digite quantos itens Rengar possui em seu inventário. //Saída


1 // Entrada


Digite, agora, quais são estes itens. //Saída


1 - Chain Vest //Saída


2 - Ninja Tabi //Saída


3 - Randuin's Omen //Saída


4 - Thornmail //Saída


5 - Seeker's Armguard //Saída


6 - Sunfire Cape //Saída



1 //Entrada


Chain Vest adicionada(o). //Saída


4 //Entrada


Thornmail adicionado(a). //Saída


Digite agora quantas vezes o Kha'Zix vai atacar. //Saída


2 //Entrada

Digite que(ais) ataque(s) ele vai utilizar. //Saída


1 - Ataque básico //Saída


2 - Taste Their Fear //Saída


3 - Void Spike //Saída


4 - Leap //Saída


2 //Entrada


O dano causado pelo Taste Their Fear do Kha'Zix foi de 129.48 PV no Rengar. //Saída


3 //Entrada


O dano causado pelo Void Spike do Kha'Zix foi de 125.4 PV no Rengar. //Saída


O dano total causado pelo Kha'Zix no Rengar foi de 254.88, resultando num restante de 1861.12 de vida no Rengar. //Saída


Olá invocador, escolha sua opção no menu: //Saída


1 - Fazer novo cálculo //Saída


2 - Sair //Saída


2 //Entrada


Até a próxima invocador. //Saída

Questão 4 - A obra do mestre Picasso

Ano de 2050, Photoshop caiu em desuso e os designers do CAC requisitaram um sistema que simule uma paleta de cores. Dada uma matriz mxn, com números em cada célula. É feita então uma mistura de 3 células, após isso, indique qual cor do arco-íris é formada. Cores não encontradas na tabela devem ser listadas como BLACK - não manjamos de design =P. É obrigatório o tratamento das cores como classes/objetos, com atributos R, G e B, explorando os conceitos usados em sala. Uma escolha 0 0 encerra o programa. Bronca pra tu tatu.

Ex:

3x4 // mxn, entrada do usuário

255 0 127 75 //entrada do usuário

130 143 255 12 //entrada do usuário

100 20 255 10 //entrada do usuário

//escolha

1 1 //entrada do usuário

1 2 //entrada do usuário

1 2 //entrada do usuário

//saída

Red (255,0,0)

//escolha

1 1 //entrada do usuário

2 2 //entrada do usuário

1 1 //entrada do usuário

Black (255, 143, 255) //saída

0 0 // entrada do usuário, encerra o programa

Questão 5 - Virado na Jubreca. Cowabunga!!!

Jubreca é uma tartaruga treinada pelo IBAMA responsável por testes de software, atualmente ela trabalha num projeto chamado HitOrQuit. Neste projeto, Jubreca caminha sobre um campo e ao receber o comando "hit" do usuário, pinta o número correspondente a quantas vezes o comando foi recebido naquela célula. Ao receber o comando "quit" Jubreca irá imprimir o texto formado pelas letras marcadas, repetindo-as caso o "hit" seja maior que 1. Ps: não deve ser permitida a execução comandos que não sejam os listados, trate esses casos.

Lista de comandos:

w = pra cima Jubreca!

a = pra esquerda Jubreca!

s = pra baixo Jubreca!

d = pra direita Jubreca!

hit = marque mais uma vez essa célula

quit = imprima a saída resultante

Ex:

4x5 // entrada do usuário, Dimensões do campo

12345 // entrada do usuário,Campo

qwert // entrada do usuário, Campo

asdfg // entrada do usuário, Campo

zxcvb //// entrada do usuário, Campo

hit d d hit hit s a hit w hit hit quit //// entrada do usuário, comandos

133w22 // Saída

Questão 6 - Jogo dos Bixos - DESAFIO

Tiger, senhor da inexplorada floresta do CAC, está trazendo para os arredores do CIN um novo jogo, no qual para ser vencedor o jogador precisa dizer qual a maior permutação de um número aleatório dado por Tiger. Você, jovem gafanhoto conhecedor das magias do cogumelo de java, irá fazer um programa que responda corretamente todas as vezes. Dey, afim de quebrar o jogo, decidiu participar e para isso lhe deu os seguintes dados:

Exs:

Para parar o programa digite quit

519 // Entrada

951 // Saída -------------- 003 // Entrada 300 // Saída -------------- -20 // Entrada -02 // Saída

quit //Entrada Até a próxima.//Saída