Percursos
/
Elm
Elm
/
Exercícios
/
A infiltração da Annalyn
A infiltração da Annalyn

A infiltração da Annalyn

Exercício de aprendizagem

Introdução

Boolean

O tipo Bool é um dos blocos de construção da linguagem. Serve para descrever se algo é verdadeiro ou falso, com os respetivos valores True e False.

Os Boolean podem ser combinados com os operadores && ("E") e || ("OU"), e negados com a função not.

Os Boolean também são extremamente úteis para criar ramificações no teu código que só são executadas quando determinadas condições se verificam. Em Elm, isto faz-se com uma expressão if-then-else, usada da seguinte forma.

if someCondition || (someOtherCondition && anotherCondition) then
    doSomething
else
    doSomethingElse

Instruções

Neste exercício, vais implementar a lógica da missão para um novo jogo de RPG que um amigo está a desenvolver. A personagem principal do jogo é a Annalyn, uma rapariga corajosa com um cão de estimação feroz e leal. Infelizmente, o desastre acontece: a melhor amiga dela foi raptada enquanto procurava frutos silvestres na floresta. A Annalyn vai tentar encontrar e libertar a melhor amiga, levando opcionalmente o cão com ela nesta missão.

Após algum tempo a seguir o rasto da melhor amiga, encontra o acampamento onde a melhor amiga está presa. Acontece que há dois raptores: um cavaleiro poderoso e um arqueiro astuto.

Depois de encontrar os raptores, a Annalyn considera quais das seguintes ações pode realizar:

  • Ataque rápido: pode fazer-se um ataque rápido se o cavaleiro estiver a dormir, pois ele demora algum tempo a vestir a armadura, o que o torna vulnerável.
  • Ataque furtivo: se a Annalyn chegar ao cavaleiro adormecido sem ser detetada, causa 12 de dano com um ataque furtivo. Caso contrário, causa apenas 7 de dano ao cavaleiro.
  • Espiar: pode espiar-se o grupo se pelo menos um deles estiver acordado. Caso contrário, espiar é uma perda de tempo.
  • Sinalizar o prisioneiro: o prisioneiro pode ser sinalizado com sons de pássaros se o prisioneiro estiver acordado e o arqueiro estiver a dormir, pois os arqueiros são treinados em sinais de pássaros, pelo que podem intercetar a mensagem.
  • Libertar o prisioneiro: a Annalyn pode tentar entrar furtivamente no acampamento para libertar o prisioneiro. Isto é arriscado e só pode correr bem de uma de duas maneiras:
    • Se a Annalyn tiver o cão de estimação com ela, pode resgatar o prisioneiro se o arqueiro estiver a dormir. O cavaleiro tem medo do cão e o arqueiro não terá tempo de se preparar antes de a Annalyn e o prisioneiro conseguirem escapar.
    • Se a Annalyn não tiver o cão, então ela e o prisioneiro têm de ser muito furtivos! A Annalyn pode libertar o prisioneiro se o prisioneiro estiver acordado e o cavaleiro e o arqueiro estiverem ambos a dormir, mas se o prisioneiro estiver a dormir não pode ser resgatado: o prisioneiro ficaria sobressaltado com o aparecimento súbito da Annalyn e acordaria o cavaleiro e o arqueiro.

Tens cinco tarefas: implementar a lógica para determinar se as ações acima estão disponíveis, com base no estado das três personagens encontradas na floresta e na presença ou não do cão de estimação da Annalyn.

1. Verifica se um ataque rápido pode ser feito

Implementa a função canFastAttack, que recebe um valor booleano que indica se o cavaleiro está acordado. Esta função devolve True se um ataque rápido puder ser feito, com base no estado do cavaleiro. Caso contrário, devolve False:

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

2. Verifica se o grupo pode ser espiado

Implementa a função canSpy, que recebe três valores booleanos, indicando se o cavaleiro, o arqueiro e o prisioneiro, respetivamente, estão acordados. A função devolve True se o grupo puder ser espiado, com base no estado das três personagens. Caso contrário, devolve False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

3. Verifica se o prisioneiro pode ser sinalizado

Implementa a função canSignalPrisoner, que recebe dois valores booleanos, indicando se o arqueiro e o prisioneiro, respetivamente, estão acordados. A função devolve True se o prisioneiro puder ser sinalizado, com base no estado das duas personagens. Caso contrário, devolve False:

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

4. Verifica se o prisioneiro pode ser libertado

Implementa a função canFreePrisoner, que recebe quatro valores booleanos. Os três primeiros parâmetros indicam se o cavaleiro, o arqueiro e o prisioneiro, respetivamente, estão acordados. O último parâmetro indica se o cão de estimação da Annalyn está presente. A função devolve True se o prisioneiro puder ser libertado, com base no estado das três personagens e na presença do cão de estimação da Annalyn. Caso contrário, devolve False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. Calcula o dano que um ataque furtivo pode causar

Implementa a função stealthAttackDamage, que recebe um valor booleano que indica se a Annalyn foi detetada. Esta função devolve 7 se foi detetada, 12 caso contrário.

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
Editar via GitHub A ligação abre numa nova janela ou separador
Elm Exercism

Estás pronto para começar A infiltração da Annalyn?

Inscreve-te no Exercism para aprenderes e dominares Elm com 28 conceitos110 exercícios, e mentoria humana real, tudo grátis.