Lista 3

Recomendações Importantes

  • A lista deve ser entregue até às 23:59:59 do dia 28/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 - Minha cobra, minha vida

Estava eu, pobre peregrino, vagando por estre as matas de Camarajibe. Após

horas sem ver alguém, e já me sentindo só, revolvi me alimentar de um congumelo

que estava ao "pé" de uma grande árvore. Foi então que um caboclo apareceu em

meu caminho. Perguntando o que eu procurava,

respondi:

- Vim em busca de dobrar meu ego, caboclo.Soube que por aqui isso é possível...

- Para isso deves salvar a minha cobra, jovem transeunte... Ela passa fome, e você deve guiá-la ao alimento...

Assim ele me disse o que devia fazer para conseguir o que buscava.

Não faço ideia da dificuldade desse desafio, então resolvi pedir sua ajuda, exímio programador...

Você deve criar um jogo para que eu possa treinar o suficiente até ir conseguir guiar, de verdade, uma cobra em busca de alimento.

(Sim, é o clássico "jogo da cobrinha" - Snake).

Crie um jogo com dois modos de dificuldades: Fácil e Difícil.

Você deve entrar com um valo X, que será o tamanho da área do jogo (Altura: X; Largura: X)

No modo fácil apenas é exibido o campo e um "alimento" por vez.

No modo difícil é colocado x "muros" na área do jogo, de forma que sempre tenha um caminho até o alimento (se tocar neles, perde).

ATENÇÃO: Uso o caractere M para o muro, o caractere A para o alimento, o caractere - para a área do jogo, um conjunto de * para o corpo da cobra.

Mara se mover use W (para cima), S (para baixo), A (esquerda) e D (direita).

Questão 2 - Politicagi

Um indivíduo quer calcular a popularidade de certas pessoas, apartir do seu conhecimento sobre elas e ele precisa da sua ajuda para isso.

faça um programa que cumpra as seguintes exigências:

-cada pessoa tem exatamente 4 características(uma String nome, uma Pessoa pai, uma Pessoa filho e um double popularidadeParcial)

-uma pessoa possui exatamente um pai e exatamente um filho

-popularidade parcial é considerada a popularidade individual da pessoa, já a popularidade total(citada mais abaixo) é a popularidade da pessoa mais

a de todos os seus descendentes.

-a única exceção para a segunda regra é para a primeira pessoa criada, já que ela é Primeiro. ela não possue pai(valor nulo), mas apartir do filho(que é

inicialmente nulo), tudo é decidido pelo usuário.

-a única exceção para a terceira regra é a popularidade de Primeiro. ela tem uma popularidade parcial pré definida de 10.000.000.000

- o programa tem as seguintes funcionalidades:

-adicionar um filho(que é uma pessoa) na ultima pessoa adicionada(que está com filho como nulo), dando um nome e uma propriedade para ele.

-dizer qual a popularidade parcial de uma pessoa pelo nome da pessoa

-dizer qual a popularidade total de uma pessoa pelo nome da pessoa

-a cada pessoa adicionada no programa, a popularidade parcial de Primeiro cai em um.

exemplo:

1. adicionar pessoa

2. mostrar popularidade parcial de alguem

3. mostrar popularidade total de alguem

//entrada

1

diga o nome

//entrada

fulano

diga a popularidade

//entrada

10

adicionado

1. adicionar pessoa

2. mostrar popularidade parcial de alguem

3. mostrar popularidade total de alguem

//entrada

2

diga o nome da pessoa

//entrada

fulano

a popularidade parcial de fulano é 10

1. adicionar pessoa

2. mostrar popularidade parcial de alguem

3. mostrar popularidade total de alguem

//entrada

3

diga o nome

//entrada

Primeiro

a popularidade total de Primeiro é 10.000.000.009

Questão 3 - Fatlascou

fatlascou é parecido com o fatorial... a diferença é que, no lugar de ser fatorial(n)=n*fatorial(n-1)(para todo n sendo inteiro positivo), o calculo é feito da seguinte forma:

fatlascou(n)= (n+ )*fatlascou(n-1)

(para todo n sendo inteiro positivo)

exemplos:

digite um numero para calcular o seu fatlascou

ex:

//entrada

3

O fatlascou de 3 é 90

//entrada

50

O fatlascou de 50 é 19246337653651600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Obs: n >0 e n < 105

Questão 4 - Blozz Cards

A Blozzard, editora e produtora de jogos de computador e de videojogos americana renomada, após experiências positivas com programadores do CIn, decidiu procurar o Centro mais uma vez em busca de ajuda. A empresa idealizou um jogo de cartas colecionáveis, BlozzCards, que possivelmente fará muito sucesso. Seu papel será a implementação de um programa para organizar melhor a coleção do usuário, mantendo nota de todas as cartas que possui. Além disso, o programa também deve ser capaz de organizar decks.

No jogo, um deck possui 20 cartas. Cada carta, no entanto, deve ser acompanhada de exatamente uma cópia, totalizando 10 cartas distintas. São três tipos básicos de cartas: criaturas, magias e equipamentos. Além disso, as criaturas podem ser do tipo comum ou especial, e as magias podem ser de ataque ou de efeito.

Toda carta possui ID X, nome N, custo C e descrição D. Criaturas e equipamentos possuem, além disso, ataque A e vida V. Criaturas especiais possuem também habilidade H. Magias de ataque possuem ataque A. Decks são ID K e possuem um nome N.

Comandos:

Obs: Inicialmente, são possíveis 10 cartas e 9 decks, mas sempre que o limite for excedido, a capacidade é dobrada.

Você pode assumir que a entrada estará no formato correto, com o número correto de entradas, sendo inteiro quando deve ser inteiro e String quando deve ser String, sem vírgulas no nome ou na descrição.

Restrições:

Vida de criatura > 0

Ataque de criatura >= 0

Bem vindo ao BlozzCard Collection Manager!

adde 1, Battle Axe, 20, Descrição, 200, -100 // Entrada do usuário

Carta adicionada com sucesso!

addcc 2, Gruntasd, 1, "Descrição", 0, 1 // Entrada do usuário

Carta adicionada com sucesso!

addce 3, Chieftain, 8000, "Descrição", 8001, 8002, "hue" // Entrada do usuário

Carta adicionada com sucesso!

addma 4, Shock Bolt, 8, "Descrição", 50 // Entrada do usuário

Carta adicionada com sucesso!

addme 5, Draw Cards, 5, "Descrição // Entrada do usuário

Carta adicionada com sucesso!

addme 6, TestCard, 10, Descrição // Entrada do usuário

Carta adicionada com sucesso!

dispc 6 // Entrada do usuário

ID: 6

Nome: TestCard

Custo: 10

Descrição: Descrição

dispallc // Entrada do usuário

Coleção:

-Criaturas:

Gruntasd [Custo=1] [ID=2]

Chieftain [Custo=8000] [ID=3]

-Equipamentos:

Battle Axe [Custo=20] [ID=1]

-Magias:

Draw Cards [Custo=5] [ID=5]

Shock Bolt [Custo=8] [ID=4]

TestCard [Custo=10] [ID=6]

rem 6 // Entrada do usuário

Carta removida com sucesso!

dispallc // Entrada do usuário

Coleção:

-Criaturas:

Gruntasd [Custo=1] [ID=2]

Chieftain [Custo=8000] [ID=3]

-Equipamentos:

Battle Axe [Custo=20] [ID=1]

-Magias:

Draw Cards [Custo=5] [ID=5]

Shock Bolt [Custo=8] [ID=4]

create 1, Agro Deck // Entrada do usuário

Deck adicionado com sucesso!

rename 1, Noob Deck // Entrada do usuário

Nome alterado com sucesso!

addd 1,1 // Entrada do usuário

Carta adicionada ao deck com sucesso!

addd 1,2 // Entrada do usuário

Carta adicionada ao deck com sucesso!

addd 1,3 // Entrada do usuário

Carta adicionada ao deck com sucesso!

addd 1,4 // Entrada do usuário

Carta adicionada ao deck com sucesso!

addd 1,5 // Entrada do usuário

Carta adicionada ao deck com sucesso!

dispd 1 // Entrada do usuário

Noob Deck

-Criaturas:

Gruntasd [Custo=1]

Chieftain [Custo=8000]

-Equipamentos:

Battle Axe [Custo=20]

-Magias:

Draw Cards [Custo=5]

Shock Bolt [Custo=8]

dispalld // Entrada do usuário

Decks:

Noob Deck [ID=1]

del 1 // Entrada do usuário

Deck removido com sucesso!

dispalld // Entrada do usuário

Nenhum deck na coleção.

clearall // Entrada do usuário

Programa resetado com sucesso!

dispallc // Entrada do usuário

Nenhuma carta na coleção

stop // Entrada do usuário

Fim de programa!

Questão 5 - Munchkin

Bem vindo ao mundo louco de Munchkin. Aqui, enfrentar bicho com nome estranho com armas desconhecidas ou receber maldições assustadoramente esquisitas é algo normal.

Nessa aventura, um herói desbrava uma masmorra, abrindo suas portas para enfrentar desafios. Esse é um clássico jogo do mundo dos cardgames e o seu criador Steve Jackson pede para você, mais novo programador do CIn, usar sua experiência em computação pra criar um jogo que se baseia nesse cardgame.

Essa jornada se inicia com um PERSONAGEM com as seguintes características:

    • Nome: o jogador escolhe o nome.
    • Raça: inicialmente Humano, podendo mudar no decorrer do jogo.
    • Classe: inicialmente nenhuma, podendo mudar no decorrer do jogo.
    • Equipamentos: inicialmente começa com um Bastão para Iniciantes() e durante o jogo pode ser acoplado 1xArmadura, 1xBota, 1xCapacete
    • Mochila: inicialmente vazia, mas podendo carregar até 5 itens.
    • Nível: começa-se com o Nível 1, podendo chegar até o Nível 10 (a forma de se ganhar o jogo).

O PERSONAGEM tem uma valor de FORÇA que será útil nas batalhas e essa tem a seguinte formula para ser calculada:

FORÇA = nível do personagem + força dos equipamentos + habilidades da classe

Obs:

    • Só pode carregar 1xArma
    • Não pode ficar com Nível menor que 1
    • O jogador pode vender uma quantidade de item igual a 1000 peças de ouro para conquistar 1 Nível. Se sobrar peças de ouro, não irá acumular para outra venda.
    • O nível 10 só pode ser conquistado em uma batalha

O jogo é dividido em rodadas que será dividida na seguinte ordem:

    1. Uma porta é aberta e aparece uma Monstro ou uma Maldição
    2. Quando abrir a porta, SE aparecer uma MALDIÇÃO o PERSONAGEM sofre o que ela disser e passa para a próxima rodada.
    3. Quando abrir a porta, SE aparecer uma MONSTRO uma batalha começa e é decidida comparando o Nível do Monstro e a Força do PERSONAGEM
    4. Quando no combate, SE Força do PERSONAGEM > Nível do Monstro: o jogador vence a batalha e ganha a quantidade de Tesouros e Níveis que o monstro fornece e vai para a próxima rodada
    5. Quando no combate, SE Nível do Monstro >= Força do PERSONAGEM: o jogador perde a batalha e tem a chance de Fugir
    6. Quando perder no combate, para Fugir deve-se ter uma variável aleatória que varia de 1 - 6 e para conseguir fugir tem que tirar um número maior ou igual a 4
    7. Quando perder no combate, SE conseguir Fugir: o jogador não recebe nada do Monstro e vai para a próxima rodada
    8. Quando perder no combate, SE não conseguir Fugir: o jogador sofre a Coisa Ruim do Monstro e dependendo vai para a próxima rodada

O jogo só termina quando o PERSONAGEM atingir o Nível 10 ou ele morrer.

Obs:

    • A probabilidade de aparecer um Monstro é de 60% e de aparecer uma Maldição 40%

Os MONSTROS tem as seguintes caracteristicas:

    • Nome
    • Nível
    • N° de Tesouros
    • N° de Níveis que dará ao personagem

Os MONSTROS também possuem Habilidades e uma Coisa Ruim.

Os MONSTROS que existem nessa masmorra são os seguintes:

Obs:

    • Quando é dito que o MONSTRO não persegue, deve-se pular o combate e passar a rodada sem ganhar Nível e Tesouros que o MONSTRO daria.

As MALDIÇÕES tem os seguintes efeitos:

    • Maldição Realmente Irritante: perca um item que lhe dá maior bônus
    • Imposto de Renda: descarte itens até seu valor somado seja igual a 800 peças de ouro. Se não tiver suficiente descarte todos os seus itens da Mochila.
    • Perca Seu Calçado: perde os calçados que estiver usando. Se não tiver passe para a próxima rodada.
    • Perca Sua Classe: Descarte sua Classe. Se não tiver perde 1 Nível.
    • Perca Seu Capacete: perde qualquer coisa que estiver usando na cabeça. Se não tiver passe para a próxima rodada.
    • Perca Sua Raça: Descarte sua Raça e volte a ser Humano. Se não tiver passe para o próximo turno.
    • Perca Sua Armadura: perde a armadura que estiver usando. Se não tiver passe para a próxima rodada
    • Perca 1 Nível: perde 1 Nível. Se estiver no Nível 1 não acontece nada e passa para a próxima rodada

Obs:

    • Todas as maldições tem probabilidade igual de acontecer

Os Tesouros obtidos depois de se vencer um combate com o monstro podem ser um título de uma CLASSE, a modificação para uma nova RAÇA ou EQUIPAMENTOS para o personagem com a probabilidade de 20%, 20% e 60% respectivamente.

As possíveis RAÇAS que o personagem pode ser são as seguintes:

Anão

    • o personagem pode carregar 2xArmas
    • o personagem pode carregar 6 itens na Mochila

Elfo

    • +1 para Fugir
    • ganha 1 nível a mais quando derrota um monstro

Halfling

    • vende um item por turno pelo dobro do preço
    • se falhar na primeira tentativa de Fuga, pode descartar um item para tentar Fugir de novo

As possíveis CLASSES com suas respectiva habilidades que o personagem pode ser são as seguintes:

Clérigo

    • Ressureição: tem uma chance de voltar ao jogo quando morrer
    • Espantar: pode descartar 1 item da Mochila por turno para ganhar +2 de força

Mago

    • Magia de Voo: pode descartar até 3 itens da Mochila quando estiver Fugindo para ganhar +1 por item
    • Enfeitiçar: descarte todos os itens da Mochila e evite de lutar com o Monstro, ganha os Tesouros mas não recebem o nível que o Monstro oferece

Guerreira

    • Fúria: pode descartar até 3 itens da Mochila para ganhar +1 de força por item
    • Vitória: vence os combates mesmo se empatar com o monstro

Obs:

    • Cada PERSONAGEM só pode ter uma RAÇA e uma CLASSE, dessa forma se receber uma CLASSE ou RAÇA como tesouro e já possui uma das duas deve-se dar a opção para o jogador de escolher em trocar de CLASSE ou RAÇA ou manter a atual, se a escolha for a segunda ignora-se a CLASSE ou RAÇA obtida como tesouro.
    • Quando for usar alguma das habilidades que pede para descartar itens dá mochila, oferecer a possibilidade do jogador escolher
    • A probabilidade de sair uma das CLASSES ou RAÇAS é a mesma

Os EQUIPAMENTOS encontrados como tesouro tem as seguintes características:

    • Nome
    • Bônus de Força
    • Tipo
    • Valor em Peças de Ouro

Os Equipamentos disponíveis no jogo são:

Exemplo de Jogo

//Saída do programa - Menu de Inicio de Rodada

Nome Personagem: Calouro

Nível 1

O que deseja fazer?

    1. Abrir Porta
    2. Ver Equipamentos
    3. Ver Mochila

//Entrada do jogador

1

//Saída do programa - Menu batalha

Você acaba de encontrar um Vaso de Planta, Nível 1

Sua força é igual 2.

Parabéns você conseguiu vencer o Vaso de Plantas.

Você conquistou 1 Tesouro e 1 Nível.

Você esta no Nível 2 agora.

O Tesouro foi: Armadura de Couro

Nome Personagem: Calouro

Nível 2

O que deseja fazer?

    1. Abrir Porta
    2. Ver Equipamentos
    3. Ver Mochila

//Entrada do jogador

3

// Saída do programa

Mochila

    1. Armadura de Couro Tipo: Armadura Bônus: 2 Valor: 300
    2. x
    3. x
    4. x
    5. x

O que deseja fazer?

    1. Equipar-se
    2. Vender itens para comprar nível
    3. Voltar

//Entrada do jogador

1

//Saída do programa

Escolha o equipamento

//Entrada do jogador

1

--Voltando para o Menu de Início de Rodada

Nome Personagem: Calouro

Nível 2

O que deseja fazer?

    1. Abrir Porta
    2. Ver Equipamentos
    3. Ver Mochila

//Entrada do jogador

1

//Saída do programa

MALDIÇÃO - Perca sua armadura

Nome Personagem: Calouro

Nível 2

O que deseja fazer?

    1. Abrir Porta
    2. Ver Equipamentos
    3. Ver Mochila

//Entrada jogador

1

//Saída do programa

Você acaba de encontrar um Nerd Histérico, Nível 5

Sua força é de 3

Você vai ter que fugir.

Eita, você não conseguiu fugir, enfrente a Coisa Ruim do Nerd Histérico.

Você voltou a ser Humano e não tem mais Classe

Questão 6 - M4TR1X - DESAFIO

Em matemática, uma matriz m x n é conjunto retangular de números, símbolos ou expressões, organizados em m linhas e n colunas. Cada um dos itens de uma matriz é chamado de elemento. As matrizes também são muito utilizadas para a resolução de sistemas de equações lineares e transformações lineares.

José, aluno bastante curioso que começou a estudar matrizes agora, e fez dois jogos para se entreter. No primeiro, ele escolhia uma matriz aleatória e um inteiro aleatório. Ele tentava descobrir, então, se era possível formar esse inteiro com os elementos da matriz. No segundo, ele pegava a mesma matriz, e calculava a menor soma de um canto a outro da matriz, variando apenas a linha ou apenas a coluna em cada movimento.

Dados dois inteiros, L e C, uma matriz LxC de inteiros e um inteiro N, retorne:

Na primeira linha se é possível formar N como a soma de elementos da matriz, sem utilizar o mesmo elemento duas vezes.

Na segunda linha, o menor caminho do canto superior esquerdo ao canto inferior direito. (O caminho com a menor soma, movimentando-se para cima, baixo, esquerda ou direita, sem se movimentar para fora da matriz).

O programa termina com as entradas L = 0 e C = 0.

Limites da matriz M:

L*C <= 25

0 < L,C

-10^6 <= M(i,j) <= 10^6

2 3 // Entrada do usuário

1 2 3 // Entrada do usuário

4 5 6 // Entrada do usuário

10 // Entrada do usuário

Sim // Saída

12 // Saída

4 4 // Entrada do usuário

5 5 5 5 // Entrada do usuário

10 10 10 10 // Entrada do usuário

15 15 15 15 // Entrada do usuário

20 20 20 20 // Entrada do usuário

11 // Entrada do usuário

Não // Saída

65 // Saída

0 0 // Entrada do usuário (Fim de programa)