Trilhas
/
Elm
Elm
/
Exercícios
/
A infiltração de Annalyn
A infiltração de Annalyn

A infiltração de Annalyn

Exercício de aprendizagem

Introdução

Boolean

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

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

Os valores Boolean também são extremamente úteis para criar blocos no seu código que só são executados se certas condições forem atendidas. Em Elm, isso é feito com uma expressão if-then-else, usada da seguinte forma.

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

Instruções

Neste exercício, você vai implementar a lógica de missão de um novo jogo de RPG que um amigo está desenvolvendo. A personagem principal do jogo é Annalyn, uma menina corajosa com um cachorro de estimação feroz e leal. Infelizmente, o desastre acontece: sua melhor amiga foi sequestrada enquanto procurava frutas silvestres na floresta. Annalyn vai tentar encontrar e libertar sua melhor amiga, podendo levar o cachorro com ela nessa missão.

Depois de algum tempo seguindo o rastro de sua melhor amiga, ela encontra o acampamento onde sua melhor amiga está presa. Acontece que há dois sequestradores: um cavaleiro poderoso e um arqueiro astuto.

Tendo encontrado os sequestradores, Annalyn considera quais das ações a seguir ela pode realizar:

  • Ataque rápido: um ataque rápido pode ser feito se o cavaleiro estiver dormindo, pois ele leva tempo para vestir a armadura e, por isso, fica vulnerável.
  • Ataque furtivo: se Annalyn chegar ao cavaleiro adormecido sem ser detectada, ela causa 12 de dano com um ataque furtivo. Caso contrário, ela causa apenas 7 de dano ao cavaleiro.
  • Espionar: o grupo pode ser espionado se pelo menos um deles estiver acordado. Caso contrário, espionar é 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 dormindo, pois os arqueiros são treinados em sinais de pássaros e poderiam interceptar a mensagem.
  • Libertar o prisioneiro: Annalyn pode tentar entrar sorrateiramente no acampamento para libertar o prisioneiro. Isso é arriscado e só pode dar certo de uma das duas formas:
    • Se Annalyn estiver com seu cachorro, ela pode resgatar o prisioneiro se o arqueiro estiver dormindo. O cavaleiro tem medo do cachorro e o arqueiro não terá tempo de se preparar antes que Annalyn e o prisioneiro consigam escapar.
    • Se Annalyn não estiver com o cachorro, ela e o prisioneiro precisam ser muito sorrateiros! Annalyn pode libertar o prisioneiro se o prisioneiro estiver acordado e o cavaleiro e o arqueiro estiverem ambos dormindo, mas se o prisioneiro estiver dormindo, ele não pode ser resgatado: o prisioneiro se assustaria com a aparição repentina de Annalyn e acordaria o cavaleiro e o arqueiro.

Você tem cinco tarefas: implementar a lógica que determina se as ações acima estão disponíveis com base no estado dos três personagens encontrados na floresta e na presença ou não do cachorro de Annalyn.

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

Implemente a função canFastAttack, que recebe um valor Boolean indicando se o cavaleiro está acordado. Essa função retorna True se um ataque rápido puder ser feito com base no estado do cavaleiro. Caso contrário, retorna False:

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

2. Verificar se o grupo pode ser espionado

Implemente a função canSpy, que recebe três valores Boolean, indicando se o cavaleiro, o arqueiro e o prisioneiro, respectivamente, estão acordados. A função retorna True se o grupo puder ser espionado, com base no estado dos três personagens. Caso contrário, retorna False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

3. Verificar se o prisioneiro pode ser sinalizado

Implemente a função canSignalPrisoner, que recebe dois valores Boolean, indicando se o arqueiro e o prisioneiro, respectivamente, estão acordados. A função retorna True se o prisioneiro puder ser sinalizado, com base no estado dos dois personagens. Caso contrário, retorna False:

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

4. Verificar se o prisioneiro pode ser libertado

Implemente a função canFreePrisoner, que recebe quatro valores Boolean. Os três primeiros parâmetros indicam se o cavaleiro, o arqueiro e o prisioneiro, respectivamente, estão acordados. O último parâmetro indica se o cachorro de Annalyn está presente. A função retorna True se o prisioneiro puder ser libertado, com base no estado dos três personagens e na presença do cachorro de Annalyn. Caso contrário, retorna False:

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

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. Calcular o dano que um ataque furtivo pode causar

Implemente a função stealthAttackDamage, que recebe um valor Boolean indicando se Annalyn foi detectada. Essa função retorna 7 se ela foi detectada, e 12 caso contrário.

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
Editar via GitHub O link abre em uma nova janela ou aba
Elm Exercism

Tudo pronto para começar A infiltração de Annalyn?

Crie sua conta no Exercism para aprender e dominar Elm com 28 conceitos110 exercícios e mentoria humana de verdade, tudo de graça.