Rutas
/
PHP
PHP
/
Ejercicios
/
La infiltración de Annalyn
La infiltración de Annalyn

La infiltración de Annalyn

Ejercicio de aprendizaje

Introducción

Booleanos

El tipo bool (abreviatura de Boolean, el valor booleano) solo tiene dos valores: true y false. Los valores literales true y false no distinguen entre mayúsculas y minúsculas en el código.

<?php

$value_is_true = true;
$value_is_false = false;

Los valores Boolean se usan a menudo en expresiones lógicas como resultado de un operador y después en estructuras de control.

Operadores lógicos

Hay varios operadores lógicos:

  • !$a: devuelve true si $a no es true
  • $a && $b: devuelve true si $a y $b son ambos true
  • $a || $b: devuelve true si $a o $b son true
Caution

Existen los operadores and y or, que son complementarios de && y || respectivamente. No se comportan igual que && y || y pueden producir resultados inesperados, por lo que se desaconseja su uso.

Instrucciones

En este ejercicio, implementarás la lógica de la misión de un nuevo juego de rol que está desarrollando un amigo. La protagonista del juego es Annalyn, una chica valiente que tiene un perro fiero y leal. Por desgracia, la tragedia se cierne sobre ella: su mejor amiga ha sido secuestrada mientras buscaba bayas en el bosque. Annalyn intentará encontrar y liberar a su mejor amiga, llevando consigo a su perro si así lo desea.

Después de pasar un tiempo siguiendo el rastro de su mejor amiga, encuentra el campamento en el que está encerrada. Resulta que hay dos secuestradores: un poderoso caballero y un astuto arquero.

Una vez encontrados los secuestradores, Annalyn se plantea cuáles de las siguientes acciones puede llevar a cabo:

  • Ataque rápido: se puede realizar un ataque rápido si el caballero está dormido, ya que tarda un tiempo en ponerse la armadura, por lo que estará vulnerable.
  • Espiar: se puede espiar al grupo si al menos uno de ellos está despierto. De lo contrario, espiar es una pérdida de tiempo.
  • Señalizar a la prisionera: se puede dar una señal a la prisionera mediante sonidos de aves si la prisionera está despierta y el arquero está dormido, ya que los arqueros están entrenados en las señales con aves y podrían interceptar el mensaje.
  • Liberar a la prisionera: Annalyn puede intentar colarse en el campamento para liberar a la prisionera. Es una acción arriesgada que solo puede salir bien de una de estas dos maneras:
    • Si Annalyn lleva a su perro consigo, puede rescatar a la prisionera si el arquero está dormido. El caballero le tiene miedo al perro y el arquero no tendrá tiempo de prepararse antes de que Annalyn y la prisionera escapen.
    • Si Annalyn no lleva a su perro, ella y la prisionera tendrán que ser muy sigilosas. Annalyn puede liberar a la prisionera si esta está despierta y el caballero y el arquero están ambos dormidos, pero si la prisionera está dormida no se la puede rescatar: la prisionera se asustaría con la repentina aparición de Annalyn y despertaría al caballero y al arquero.

Tienes cuatro tareas: implementar la lógica para determinar si las acciones anteriores están disponibles según el estado de los tres personajes que se encuentran en el bosque y según si el perro de Annalyn está presente o no.

1. Comprobar si la acción «ataque rápido» es posible

Implementa una función llamada canFastAttack que recibe un valor Boolean que indica si el caballero está despierto. La función devuelve true si la acción «ataque rápido» está disponible según el estado del personaje. De lo contrario, devuelve false:

<?php
$is_knight_awake = true;

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

2. Comprobar si la acción «espiar» es posible

Implementa una función llamada canSpy que recibe tres valores Boolean, que indican si el caballero, el arquero y la prisionera, respectivamente, están despiertos. La función devuelve true si la acción «espiar» está disponible según el estado de los personajes. De lo contrario, devuelve 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. Comprobar si la acción «señalizar a la prisionera» es posible

Implementa una función llamada canSignal que recibe dos valores Boolean, que indican si el arquero y la prisionera, respectivamente, están despiertos. La función devuelve true si la acción «señalizar a la prisionera» está disponible según el estado de los personajes. De lo contrario, devuelve false:

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

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

4. Comprobar si la acción «liberar a la prisionera» es posible

Implementa una función llamada canLiberate que recibe cuatro valores Boolean. Los tres primeros parámetros indican si el caballero, el arquero y la prisionera, respectivamente, están despiertos. El último parámetro indica si el perro de Annalyn está presente. La función devuelve true si la acción «liberar a la prisionera» está disponible según el estado de los personajes y la presencia del perro de Annalyn. De lo contrario, devuelve 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 en GitHub El enlace se abre en una ventana o pestaña nueva
PHP Exercism

¿Listo para empezar La infiltración de Annalyn?

Regístrate en Exercism para aprender y dominar PHP con 11 conceptos122 ejercicios y mentoría humana real, todo gratis.