Track
/
PHP
PHP
/
Esercizi
/
L'infiltrazione di Annalyn
L'infiltrazione di Annalyn

L'infiltrazione di Annalyn

Esercizio di apprendimento

Introduzione

Valori booleani

Il tipo bool (abbreviazione di boolean) ha solo due valori: true e false. Nel codice, i valori letterali true e false non distinguono tra maiuscole e minuscole.

<?php

$value_is_true = true;
$value_is_false = false;

I valori booleani sono spesso usati nelle espressioni logiche come risultato di un operatore, per poi essere usati nelle strutture di controllo.

Operatori logici

Ci sono diversi operatori logici:

  • !$a: restituisce true se $a non è true
  • $a && $b: restituisce true se sia $a sia $b sono true
  • $a || $b: restituisce true se almeno uno tra $a e $b è true
Caution

Esistono un operatore and e un operatore or, complementari rispettivamente a && e ||. Non hanno lo stesso comportamento di && e || e possono produrre risultati inattesi: per questo se ne sconsiglia l'uso.

Istruzioni

In questo esercizio implementerai la logica delle missioni di un nuovo gioco di ruolo a cui sta lavorando un amico. La protagonista del gioco è Annalyn, una ragazza coraggiosa con un cane da compagnia feroce e fedele. Purtroppo arriva la catastrofe: la sua migliore amica è stata rapita mentre cercava le bacche nel bosco. Annalyn proverà a trovare e liberare la sua migliore amica, portando con sé il cane, se vuole.

Dopo aver seguito per un po' le tracce della sua migliore amica, trova l'accampamento in cui è imprigionata. Scopre che i rapitori sono due: un cavaliere possente e un arciere astuto.

Avendo trovato i rapitori, Annalyn valuta quali delle seguenti azioni può intraprendere:

  • Attacco rapido: si può sferrare un attacco rapido se il cavaliere sta dormendo, perché gli serve tempo per indossare l'armatura e quindi sarà vulnerabile.
  • Spia: si può spiare il gruppo se almeno uno di loro è sveglio. Altrimenti spiare è una perdita di tempo.
  • Segnala il prigioniero: si può inviare un segnale al prigioniero usando versi di uccelli se il prigioniero è sveglio e l'arciere sta dormendo, perché gli arcieri sono addestrati ai richiami degli uccelli e potrebbero intercettare il messaggio.
  • Libera il prigioniero: Annalyn può provare a intrufolarsi nell'accampamento per liberare il prigioniero. È un'impresa rischiosa e può riuscire solo in uno dei due modi seguenti:
    • Se Annalyn ha con sé il suo cane, può liberare il prigioniero se l'arciere sta dormendo. Il cavaliere ha paura del cane e l'arciere non farà in tempo a prepararsi prima che Annalyn e il prigioniero riescano a scappare.
    • Se Annalyn non ha il cane, lei e il prigioniero devono essere molto furtivi! Annalyn può liberare il prigioniero se il prigioniero è sveglio e il cavaliere e l'arciere stanno entrambi dormendo, ma se il prigioniero sta dormendo non si può liberarlo: si spaventerebbe per l'apparizione improvvisa di Annalyn e sveglierebbe il cavaliere e l'arciere.

Hai quattro compiti: implementare la logica che determina se le azioni precedenti sono disponibili in base allo stato dei tre personaggi trovati nel bosco e alla presenza o meno del cane di Annalyn.

1. Verifica se l'azione «Attacco rapido» è possibile

Implementa una funzione chiamata canFastAttack che riceve un valore booleano che indica se il cavaliere è sveglio. Questa funzione restituisce true se l'azione «Attacco rapido» è disponibile in base allo stato del personaggio. Altrimenti restituisce false:

<?php
$is_knight_awake = true;

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

2. Verifica se l'azione «Spia» è possibile

Implementa una funzione chiamata canSpy che riceve tre valori booleani, che indicano rispettivamente se il cavaliere, l'arciere e il prigioniero sono svegli. La funzione restituisce true se l'azione «Spia» è disponibile in base allo stato dei personaggi. Altrimenti restituisce 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. Verifica se l'azione «Segnala il prigioniero» è possibile

Implementa una funzione chiamata canSignal che riceve due valori booleani, che indicano rispettivamente se l'arciere e il prigioniero sono svegli. La funzione restituisce true se l'azione «Segnala il prigioniero» è disponibile in base allo stato dei personaggi. Altrimenti restituisce false:

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

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

4. Verifica se l'azione «Libera il prigioniero» è possibile

Implementa una funzione chiamata canLiberate che riceve quattro valori booleani. I primi tre parametri indicano rispettivamente se il cavaliere, l'arciere e il prigioniero sono svegli. L'ultimo parametro indica se il cane di Annalyn è presente. La funzione restituisce true se l'azione «Libera il prigioniero» è disponibile in base allo stato dei personaggi e alla presenza del cane di Annalyn. Altrimenti restituisce 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
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
PHP Exercism

Vuoi iniziare L'infiltrazione di Annalyn?

Iscriviti a Exercism per imparare e padroneggiare PHP con 11 concetti122 esercizi e il mentoring di persone reali, tutto gratis.