O Crystal tem um tipo conhecido como Bool.
Representa os valores true e false.
O Crystal tem três operadores lógicos (!, ||, &&), que combinam Bools e formam expressões que produzem valores diferentes.
&&)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
||)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
!)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
())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
Só deves usar parênteses quando afetam o resultado; caso contrário, devem ser omitidos.
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.
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
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
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
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
Inscreve-te no Exercism para aprenderes e dominares Crystal com 26 conceitos142 exercícios, e mentoria humana real, tudo grátis.