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

A infiltração da Annalyn

Exercício de aprendizagem

Introdução

Um booleano representa um de dois valores: true ou false. Os operadores lógicos (!, &&, ||) são normalmente usados com valores Boolean e devolvem um valor Boolean.

Instruções

Neste exercício, vais implementar a lógica da missão de 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 sua melhor amiga foi raptada enquanto procurava bagas na floresta. A Annalyn vai tentar encontrar e libertar a sua melhor amiga, podendo levar o cão com ela nesta missão.

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

Depois de encontrar os raptores, a Annalyn pensa em 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, ficando assim vulnerável.
  • Espiar: pode espiar-se o grupo se pelo menos um deles estiver acordado. Caso contrário, espiar é uma perda de tempo.
  • Sinalizar o prisioneiro: pode sinalizar-se o prisioneiro 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 e podem intercetar a mensagem.
  • Libertar o prisioneiro: a Annalyn pode tentar entrar furtivamente no acampamento para libertar o prisioneiro. É uma coisa arriscada e só pode ter sucesso de uma de duas formas:
    • Se a Annalyn tiver o cã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 podem ser resgatados: o prisioneiro ficaria sobressaltado com o aparecimento súbito da Annalyn e acordaria o cavaleiro e o arqueiro.

Tens quatro tarefas: implementar a lógica que determina 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 da Annalyn.

1. Verificar se a ação «Ataque rápido» é possível

Implementa uma função chamada canExecuteFastAttack que recebe um valor Boolean que indica se o cavaleiro está acordado. Esta função devolve true se a ação «Ataque rápido» estiver disponível com base no estado da personagem. Caso contrário, devolve false:

const knightIsAwake = true;
canExecuteFastAttack(knightIsAwake);
// => false

2. Verificar se a ação «Espiar» é possível

Implementa uma função chamada canSpy que recebe três valores Boolean, que indicam se o cavaleiro, o arqueiro e o prisioneiro, respetivamente, estão acordados. A função devolve true se a ação «Espiar» estiver disponível com base no estado das personagens. Caso contrário, devolve false:

const knightIsAwake = false;
const archerIsAwake = true;
const prisonerIsAwake = false;
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake);
// => true

3. Verificar se a ação «Sinalizar o prisioneiro» é possível

Implementa uma função chamada canSignalPrisoner que recebe dois valores Boolean, que indicam se o arqueiro e o prisioneiro, respetivamente, estão acordados. A função devolve true se a ação «Sinalizar o prisioneiro» estiver disponível com base no estado das personagens. Caso contrário, devolve false:

const archerIsAwake = false;
const prisonerIsAwake = true;
canSignalPrisoner(archerIsAwake, prisonerIsAwake);
// => true

4. Verificar se a ação «Libertar o prisioneiro» é possível

Implementa uma função chamada canFreePrisoner que recebe quatro valores Boolean. 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 da Annalyn está presente. A função devolve true se a ação «Libertar o prisioneiro» estiver disponível com base no estado das personagens e na presença do cão da Annalyn. Caso contrário, devolve false:

const knightIsAwake = false;
const archerIsAwake = true;
const prisonerIsAwake = false;
const petDogIsPresent = false;
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent);
// => false
Editar via GitHub A ligação abre numa nova janela ou separador
JavaScript Exercism

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

Inscreve-te no Exercism para aprenderes e dominares JavaScript com 37 conceitos159 exercícios, e mentoria humana real, tudo grátis.