Danilo S. Carvalho, Ph.D. Research Associate - Artificial Intelligence / NLP

2ª Lista de Exercícios - Computação II (DCC - UFRJ) - PLE

Atenção: Escrever Javadoc para todos os programas.

  1. Considere as classes que representem os conceitos: carro, bicicleta, moto, caminhão, jipe, canoa, lancha e tanque anfíbio. Cada veículo individual dessas categorias possui uma velocidade máxima (km/h), uma quantidade máxima de carga (kg) e uma quantidade máxima de passageiros (todos dentro de uma faixa possível na categoria). Além disso, podem possuir as seguintes capacidades: aquático, off-road, interior impermeável. Veículos aquáticos podem andar na água, veículos off-road podem andar fora do asfalto e veículos com interior impermeável não deixam molhar seus ocupantes em caso de chuva.

    Implemente um programa Java que dada uma entrada (padrão) escrita na forma:

     <distância>, <tipo de caminho>, <número de pessoas>, <quantidade de carga>, <tempo limite>, <clima>
    

    entregue uma lista de veículos (instâncias) com suas respectivas características, que podem realizar a viagem sem problemas.

    Onde:

    • distância: número real indicando a distância até o destino em km.
    • tipo de caminho: rodovia, estrada de terra, rio, lago, mar.
    • número de pessoas: número inteiro de pessoas que precisam viajar, incluindo o condutor.
    • quantidade de carga: peso total da carga que será carregada na viagem.
    • tempo limite: tempo máximo (em horas) que a viagem precisa ser completada.
    • clima: sol ou chuva.

    Para simplificar, assuma que a velocidade média da viagem é a metade da velocidade máxima do veículo.

    Exemplos:

    • Entrada:
       40.0, estrada de terra, 2, 300.0, 1.5, sol
      
    • Saída:
       caminhão: vel. máxima = 80km/h, carga max. = 2000.0kg, max. passageiros = 1
       jipe: vel. máxima = 140km/h, carga max. = 500.0kg, max. passageiros = 3
      
    • Entrada:
       10.0, lago, 3, 100.0, 0.5, chuva
      
    • Saída:
       lancha: vel. máxima = 100km/h, carga max. = 800.0kg, max. passageiros = 5
      
    • Entrada:
       2.0, lago, 2, 20.0, 0.5, sol
      
    • Saída:
       lancha: vel. máxima = 85km/h, carga max. = 600.0kg, max. passageiros = 4
       canoa: vel. máxima = 10km/h, carga max. = 200.0kg, max. passageiros = 2
      
    • Entrada:
       10.0, mar, 2, 900.0, 0.5, chuva
      
    • Saída:
       tanque anfíbio: vel. máxima = 40km/h, carga max. = 1000.0kg, max. passageiros = 1
      

    (Dica: consultem os métodos da classe String.)

    É obrigatório o uso de herança, interfaces, e atributos de classe nesse exercício.


  2. Implemente um protótipo de jogo “text adventure” em Java de acordo com as seguintes especificações:

    • O protótipo deve ter apenas um tabuleiro 10x10.
    • O protagonista possui pontos de vida (HP) e ataque (ATK), onde HP + ATK = 100.
    • Uma célula do tabuleiro pode conter um muro, um monstro, um item de recuperação, ou nada.
    • Muros são intransponíveis.
    • O protagonista (jogador) começa em uma célula (linha, coluna) aleatória, que esteja vazia.
    • Se encontrar um monstro, o protagonista precisa derrotá-lo ou fugir.
    • Se encontrar um item de recuperação o protagonista recupera um percentual do seu HP.
    • Monstros possuem pontos de vida (HP), ataque (ATK), e uma técnica ofensiva.
    • Devem haver pelo menos 3 técnicas ofensivas distintas.
    • Devem haver pelo menos 4 tipos de monstro.
    • O jogo é operado um turno por vez, pela entrada padrão.
    • As ações possíveis ao jogador são: (andar para) direita, esquerda, frente, trás, e atacar.
    • Um monstro é derrotado quando seus pontos de vida são reduzidos a zero.
    • O protagonista é derrotado quando seus pontos de vida são reduzidos a zero (game over).
    • O protagonista vence o jogo quando derrota todos os monstros.

    Exemplo:

     :frente
     Não há nada aqui...
     :frente
     Há um muro à frente.
     :esquerda
     Há um Zumbi aqui (ATK: 10).
     :atacar
     Você feriu o Zumbi (HP: -20).
     Zumbi atacou com mordida.
     Você foi ferido pelo Zumbi (HP: 70).
     :atacar
     Você feriu o Zumbi (HP: -20).
     Você derrotou o Zumbi.
     :direita
     Você encontrou um item de recuperação (HP: 90).
    

    É obrigatório o uso dos conceitos de encapsulamento e polimorfismo nesse exercício.