Percursos
/
Crystal
Crystal
/
Exercícios
/
Caçador de Cristais
Caçador de Cristais

Caçador de Cristais

Exercício de aprendizagem

Introdução

O Crystal tem um tipo conhecido como Bool. Representa os valores true e false.

Operadores lógicos

O Crystal tem três operadores lógicos (!, ||, &&), que combinam Bools e formam expressões que produzem valores diferentes.

E(&&)

O operador e em Crystal é representado por && e devolve true se ambos os valores forem true; caso contrário, devolve false. Quando usas o operador e, colocas um Bool à direita do && e outro à esquerda.

true && true
# => true

true && false
# => false

Ou(||)

O operador ou em Crystal é representado por || e devolve true se pelo menos um dos valores dados for true. Se ambos os valores forem false, devolve false. Quando usas o operador ou, deves colocar um Bool à direita do || e outro à esquerda.

true || true
# => true

true || false
# => true

false || false
# => false

Não(!)

O operador não em Crystal é representado por ! e devolve true se o Bool dado for false, e devolve false se lhe for passado true. Quando usas o operador não, deves colocar um Bool depois do operador (!).

!true
# => false

!false
# => true

Usar parênteses(())

Quando trabalhas com Bools, podes usar parênteses para decidir que Bools avaliar primeiro. O resultado pode ser diferente consoante a forma como usas os parênteses. Em Crystal, o que está entre parênteses é avaliado primeiro.

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

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

Como o que está entre parênteses é avaliado primeiro, no exemplo seguinte o operador não aplica-se à expressão que está dentro dos parênteses.

!true && false
# => false

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

Só deves usar parênteses quando afetam o resultado; caso contrário, devem ser omitidos.

Instruções

Estás a desenvolver o novo e muito apreciado jogo Crystal Hunter. No jogo, és uma personagem que se desloca e recolhe cristais. O jogador ganha quando apanha todos os cristais. Se o jogador entrar em contacto com um bandido, perde todos os cristais e o jogo. Há uma exceção a esta regra: o jogador pode ter um power-up ativo que o torna invisível para os bandidos.

O teu objetivo é escrever algumas regras que vão ser usadas no jogo.

1. Define se a personagem ganha pontos de bónus

No jogo, a personagem ganha pontos de bónus se tocar num bandido enquanto tem um power-up ativo.

Define o método Rules#bonus_points?, que recebe dois argumentos (se a personagem tem um power-up ativo e se a personagem está a tocar num bandido) e devolve um valor Boolean que indica se a personagem vai ganhar pontos de bónus. O método deve devolver true apenas se a personagem tiver um power-up ativo e estiver a tocar num bandido, e false caso contrário.

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

2. Define se a personagem pontua

O jogador ganha pontos no jogo quando apanha um cristal ou um power-up.

Define o método Rules#score?, que recebe dois argumentos (se a personagem está a tocar num power-up e se a personagem está a tocar num cristal) e devolve um valor Boolean que indica se a personagem pontuou ou não. O método deve devolver true se a personagem tocar num power-up ou num cristal e false caso contrário.

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

3. Define se a personagem perde

Define o método Rules#lose?, que recebe dois argumentos (se a personagem tem um power-up ativo e se a personagem está a tocar num bandido) e devolve um valor Boolean que indica se a personagem perde ou não. O método deve devolver true se a personagem tocar num bandido e não tiver um power-up ativo, e false caso contrário.

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

4. Define se a personagem ganha

Define o método Rules#win?, que recebe três argumentos (se a personagem apanhou todos os cristais, se a personagem tem um power-up ativo e se a personagem está a tocar num bandido) e devolve um valor Boolean que indica se a personagem ganha ou não. O método deve devolver true se a personagem tiver reunido todos os cristais e não tiver perdido com base nos argumentos definidos na parte 3, e false caso contrário.

Rules.new.win?(false, true, false)
# => false
Editar via GitHub A ligação abre numa nova janela ou separador
Crystal Exercism

Estás pronto para começar Caçador de Cristais?

Inscreve-te no Exercism para aprenderes e dominares Crystal com 26 conceitos142 exercícios, e mentoria humana real, tudo grátis.