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

A infiltração de Annalyn

Exercício de aprendizagem

Introdução

Booleanos

O tipo bool (abreviação de booleano) tem apenas dois valores: true e false. Os valores literais true e false não diferenciam maiúsculas de minúsculas no código.

<?php

$value_is_true = true;
$value_is_false = false;

Valores Boolean são usados com frequência em expressões lógicas como resultado de um operador e depois em estruturas de controle.

Operadores lógicos

Existem vários operadores lógicos:

  • !$a: retorna true se $a não for true
  • $a && $b: retorna true se $a e $b forem ambos true
  • $a || $b: retorna true se $a ou $b forem true
Caution

Existem também os operadores and e or, que são complementares a && e ||, respectivamente. Eles não têm o mesmo comportamento que && e || e podem produzir resultados inesperados, por isso seu uso não é recomendado.

Instruções

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

Depois de passar um tempo seguindo o rastro de seu melhor amigo, ela encontra o acampamento onde ele está preso. Acontece que há dois sequestradores: um cavaleiro poderoso e um arqueiro astuto.

Tendo encontrado os sequestradores, Annalyn avalia em quais das ações a seguir ela pode se envolver:

  • Ataque rápido: um ataque rápido é possível se o cavaleiro estiver dormindo, já que ele leva um tempo para vestir a armadura e ficará vulnerável.
  • Espionar: dá para espionar o grupo se pelo menos um deles estiver acordado. Caso contrário, espionar é perda de tempo.
  • Sinalizar ao prisioneiro: dá para sinalizar ao prisioneiro usando sons de pássaros se o prisioneiro estiver acordado e o arqueiro estiver dormindo, já que os arqueiros são treinados em sinais com pássaros e poderiam interceptar a mensagem.
  • Liberar o prisioneiro: Annalyn pode tentar se infiltrar no acampamento para libertar o prisioneiro. É uma ação arriscada e só pode dar certo de duas maneiras:
    • Se Annalyn estiver com seu cão, ela consegue resgatar o prisioneiro se o arqueiro estiver dormindo. O cavaleiro tem medo do cão e o arqueiro não vai ter tempo de se preparar antes que Annalyn e o prisioneiro consigam fugir.
    • Se Annalyn não estiver com o cão, 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 dormindo, mas se o prisioneiro estiver dormindo não dá para resgatá-lo: ele se assustaria com a aparição repentina de Annalyn e acordaria o cavaleiro e o arqueiro.

Você tem quatro 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 cão de estimação de Annalyn.

1. Verifique se a ação 'Ataque rápido' é possível

Implemente uma função chamada canFastAttack que recebe um valor boolean que indica se o cavaleiro está acordado. A função retorna true se a ação 'Ataque rápido' estiver disponível com base no estado do personagem. Caso contrário, retorna false:

<?php
$is_knight_awake = true;

$infiltration = new AnnalynsInfiltration();
$infiltration->canFastAttack($is_knight_awake);
// => false

2. Verifique se a ação 'Espionar' é possível

Implemente uma função chamada 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 a ação 'Espionar' estiver disponível com base no estado dos personagens. Caso contrário, retorna false:

<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;

$infiltration = new AnnalynsInfiltration();
$infiltration->canSpy($is_knight_awake, $is_archer_awake, $is_prisoner_awake);
// => true

3. Verifique se a ação 'Sinalizar ao prisioneiro' é possível

Implemente uma função chamada canSignal que recebe dois valores boolean, indicando se o arqueiro e o prisioneiro, respectivamente, estão acordados. A função retorna true se a ação 'Sinalizar ao prisioneiro' estiver disponível com base no estado dos personagens. Caso contrário, retorna false:

<?php
$is_archer_awake = false;
$is_prisoner_awake = true;

$infiltration = new AnnalynsInfiltration();
$infiltration->canSignal($is_archer_awake, $is_prisoner_awake);
// => true

4. Verifique se a ação 'Liberar o prisioneiro' é possível

Implemente uma função chamada canLiberate 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 cão de estimação de Annalyn está presente. A função retorna true se a ação 'Liberar o prisioneiro' estiver disponível com base no estado dos personagens e na presença do cão de estimação de Annalyn. Caso contrário, retorna false:

<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$is_dog_present = false;

$infiltration = new AnnalynsInfiltration();
$infiltration->canLiberate(
    $is_knight_awake,
    $is_archer_awake,
    $is_prisoner_awake,
    $is_dog_present
);
// => false
Editar via GitHub O link abre em uma nova janela ou aba
PHP Exercism

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

Crie sua conta no Exercism para aprender e dominar PHP com 11 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.