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

L'infiltrazione di Annalyn

Esercizio di apprendimento

Introduzione

Booleani

Il tipo Bool è uno dei mattoni fondamentali del linguaggio. Serve a descrivere se qualcosa è vero o falso, con i rispettivi valori True e False.

I booleani possono essere combinati con gli operatori && «AND» e || «OR», e negati con la funzione not.

I booleani sono anche estremamente utili per creare rami nel codice che vengono eseguiti solo se determinate condizioni sono soddisfatte. In Elm, questo si fa con un'espressione if-then-else, usata come segue.

if someCondition || (someOtherCondition && anotherCondition) then
    doSomething
else
    doSomethingElse

Istruzioni

In questo esercizio implementerai la logica delle missioni per un nuovo gioco di ruolo che sta sviluppando un amico. La protagonista del gioco è Annalyn, una ragazza coraggiosa con un cane feroce e fedele. Purtroppo arriva la catastrofe: la sua migliore amica è stata rapita mentre cercava bacche nel bosco. Annalyn cercherà di trovare e liberare la sua migliore amica, portando con sé il cane, se vuole, in questa missione.

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

Una volta trovati 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, quindi sarà vulnerabile.
  • Attacco furtivo: se Annalyn raggiunge il cavaliere addormentato senza essere individuata, infligge 12 danni con un attacco furtivo. Altrimenti infligge al cavaliere solo 7 danni.
  • Spionaggio: si può spiare il gruppo se almeno uno dei tre è sveglio. Altrimenti, spiare è una perdita di tempo.
  • Segnalare il prigioniero: si può segnalare la presenza del prigioniero con dei versi di uccello se il prigioniero è sveglio e l'arciere dorme, dato che gli arcieri sono addestrati alle segnalazioni con i versi degli uccelli e potrebbero intercettare il messaggio.
  • Liberare il prigioniero: Annalyn può provare a intrufolarsi nell'accampamento per liberare il prigioniero. È un'impresa rischiosa e può riuscire solo in uno di questi due modi:
    • Se Annalyn ha con sé il suo cane, può salvare il prigioniero se l'arciere dorme. Il cavaliere ha paura del cane e l'arciere non farà in tempo a prepararsi prima che Annalyn ed il prigioniero riescano a fuggire.
    • Se Annalyn non ha il cane, allora lei ed il prigioniero devono essere molto furtivi! Annalyn può liberare il prigioniero se il prigioniero è sveglio e sia il cavaliere sia l'arciere dormono, ma se il prigioniero dorme non lo si può salvare: si spaventerebbe per l'apparizione improvvisa di Annalyn e sveglierebbe il cavaliere e l'arciere.

Hai cinque 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 si può sferrare un attacco rapido

Implementa la funzione canFastAttack, che prende un valore booleano che indica se il cavaliere è sveglio. La funzione restituisce True se si può sferrare un attacco rapido in base allo stato del cavaliere. Altrimenti restituisce False:

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

2. Verifica se si può spiare il gruppo

Implementa la funzione canSpy, che prende tre valori booleani che indicano rispettivamente se il cavaliere, l'arciere ed il prigioniero sono svegli. La funzione restituisce True se si può spiare il gruppo, in base allo stato dei tre personaggi. Altrimenti restituisce False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

3. Verifica se si può segnalare il prigioniero

Implementa la funzione canSignalPrisoner, che prende due valori booleani che indicano rispettivamente se l'arciere ed il prigioniero sono svegli. La funzione restituisce True se si può segnalare il prigioniero, in base allo stato dei due personaggi. Altrimenti restituisce False:

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

4. Verifica se si può liberare il prigioniero

Implementa la funzione canFreePrisoner, che prende quattro valori booleani. I primi tre parametri indicano rispettivamente se il cavaliere, l'arciere ed il prigioniero sono svegli. L'ultimo parametro indica se il cane di Annalyn è presente. La funzione restituisce True se si può liberare il prigioniero, in base allo stato dei tre personaggi e alla presenza del cane di Annalyn. Altrimenti restituisce False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. Calcola i danni che potrebbe infliggere un attacco furtivo

Implementa la funzione stealthAttackDamage, che prende un valore booleano che indica se Annalyn è stata individuata. La funzione restituisce 7 se è stata individuata, 12 altrimenti.

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Elm Exercism

Vuoi iniziare L'infiltrazione di Annalyn?

Iscriviti a Exercism per imparare e padroneggiare Elm con 28 concetti110 esercizi e il mentoring di persone reali, tutto gratis.