Track
/
Crystal
Crystal
/
Esercizi
/
Cacciatore di Crystal
Cacciatore di Crystal

Cacciatore di Crystal

Esercizio di apprendimento

Introduzione

Crystal ha un tipo noto come Bool. Rappresenta i valori true e false.

Operatori logici

Crystal ha tre operatori logici (!, ||, &&), che combinano i Bool e creano espressioni che producono valori diversi.

And(&&)

L'operatore and in Crystal è rappresentato da && e restituisce true se entrambi i valori sono true; altrimenti restituisce false. Quando si usa l'operatore and, un Bool va messo a destra di && ed un altro a sinistra.

true && true
# => true

true && false
# => false

Or(||)

L'operatore or in Crystal è rappresentato da || e restituisce true se almeno uno dei valori dati è true. Se entrambi i valori sono false, allora restituisce false. Quando si usa l'operatore or, un Bool va messo a destra di || ed un altro a sinistra.

true || true
# => true

true || false
# => true

false || false
# => false

Not(!)

L'operatore not in Crystal è rappresentato da ! e restituisce true se il Bool dato è false e restituisce false se viene fornito true. Quando si usa l'operatore not, un Bool va messo dopo l'operatore (!).

!true
# => false

!false
# => true

Usare le parentesi (())

Quando lavori con i booleani, puoi usare le parentesi per decidere quali Bool valutare per primi. Il risultato può cambiare a seconda di come vengono usate le parentesi. In Crystal, ciò che è tra parentesi viene valutato per primo.

true && false && false || true
# => true

true && false && (false || true)
# => false

Poiché ciò che è tra parentesi viene valutato per primo, nel seguente esempio l'operatore not si applica all'espressione dentro le parentesi.

!true && false
# => false

!(true && false)
# => true
Note

Usa le parentesi solo quando influenzano il risultato; altrimenti vanno omesse.

Istruzioni

Stai sviluppando il nuovo acclamato gioco Crystal Hunter. Nel gioco interpreti un personaggio che si muove e raccoglie cristalli. Il giocatore vince raccogliendo tutti i cristalli. Se il giocatore entra in contatto con un bandito, perde tutti i suoi cristalli e la partita. C'è un'eccezione a questa regola: il giocatore può avere un power-up attivo che lo rende invisibile ai banditi.

Il tuo obiettivo è scrivere alcune regole che verranno usate nel gioco.

1. Definire se il personaggio ottiene punti bonus

Nel gioco, il personaggio ottiene punti bonus se tocca un bandito mentre ha un power-up attivo.

Definisci il metodo Rules#bonus_points?, che prende due argomenti (se il personaggio ha un power-up attivo e se il personaggio sta toccando un bandito) e restituisce un valore booleano che indica se il personaggio otterrà punti bonus. Il metodo deve restituire true solo se il personaggio ha un power-up attivo e sta toccando un bandito, e false altrimenti.

Rules.new.bonus_points?(false, true)
# => false

2. Definire se il personaggio segna punti

Nel gioco, il giocatore guadagna punti quando raccoglie un cristallo o un power-up.

Definisci il metodo Rules#score?, che prende due argomenti (se il personaggio sta toccando un power-up e se il personaggio sta toccando un cristallo) e restituisce un valore booleano che indica se il personaggio ha segnato punti oppure no. Il metodo deve restituire true se il personaggio tocca un power-up o un cristallo, e restituire false altrimenti.

Rules.new.score?(true, true)
# => true

3. Definire se il personaggio perde

Definisci il metodo Rules#lose?, che prende due argomenti (se il personaggio ha un power-up attivo e se il personaggio sta toccando un bandito) e restituisce un valore booleano che indica se il personaggio perde oppure no. Il metodo deve restituire true se il personaggio tocca un bandito e non ha un power-up attivo, e restituire false altrimenti.

Rules.new.lose?(false, true)
# => true

4. Definire se il personaggio vince

Definisci il metodo Rules#win?, che prende tre argomenti (se il personaggio ha raccolto tutti i cristalli, se il personaggio ha un power-up attivo e se il personaggio sta toccando un bandito) e restituisce un valore booleano che indica se il personaggio vince oppure no. Il metodo deve restituire true se il personaggio ha raccolto tutti i cristalli e non ha perso in base agli argomenti definiti nella parte 3, e restituire false altrimenti.

Rules.new.win?(false, true, false)
# => false
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Crystal Exercism

Vuoi iniziare Cacciatore di Crystal?

Iscriviti a Exercism per imparare e padroneggiare Crystal con 26 concetti142 esercizi e il mentoring di persone reali, tutto gratis.