Tracks
/
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 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 luego 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

Hay un operador and y un operador or, y son complementarios a && y || respectivamente. No tienen el mismo comportamiento 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 búsqueda para un nuevo juego de rol que está desarrollando un amigo. La protagonista del juego es Annalyn, una chica valiente con un perro feroz y leal como mascota. Por desgracia, el desastre llega cuando su mejor amigo es secuestrado mientras buscaba bayas en el bosque. Annalyn intentará encontrar y liberar a su mejor amigo, y puede llevar a su perro con ella en esta misión.

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

Una vez encontrados los secuestradores, Annalyn se pregunta cuál de las siguientes acciones puede realizar:

  • Ataque rápido: se puede hacer un ataque rápido si el caballero está dormido, ya que tarda un tiempo en ponerse la armadura, así 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.
  • Hacer señales al prisionero: se le pueden hacer señales al prisionero con sonidos de aves si el prisionero está despierto y el arquero está dormido, ya que los arqueros están entrenados en hacer señales con aves, así que podrían interceptar el mensaje.
  • Liberar al prisionero: Annalyn puede intentar colarse en el campamento para liberar al prisionero. Es algo arriesgado y solo puede salir bien de una de dos maneras:
    • Si Annalyn lleva a su perro, puede rescatar al prisionero 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 el prisionero escapen.
    • Si Annalyn no lleva a su perro, ¡ella y el prisionero tendrán que ser muy sigilosos! Annalyn puede liberar al prisionero si el prisionero está despierto y el caballero y el arquero están ambos dormidos, pero si el prisionero está dormido no pueden rescatarlo: el prisionero se asustaría con la aparición repentina 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 si el perro de Annalyn está presente o no.

1. Comprueba si es posible la acción «Ataque rápido»

Implementa una función llamada canFastAttack que recibe un valor Boolean que indica si el caballero está despierto. Esta 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. Comprueba si es posible la acción «Espiar»

Implementa una función llamada canSpy que recibe tres valores Boolean, que indican si el caballero, el arquero y el prisionero, 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. Comprueba si es posible la acción «Hacer señales al prisionero»

Implementa una función llamada canSignal que recibe dos valores Boolean, que indican si el arquero y el prisionero, respectivamente, están despiertos. La función devuelve true si la acción «Hacer señales al prisionero» 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. Comprueba si es posible la acción «Liberar al prisionero»

Implementa una función llamada canLiberate que recibe cuatro valores Boolean. Los primeros tres parámetros indican si el caballero, el arquero y el prisionero, 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 al prisionero» 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 una pestaña nuevas
PHP Exercism

¿Todo 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.