Crystal tem um tipo conhecido como Bool.
Representa os valores true e false.
Crystal tem três operadores lógicos (!, ||, &&), que combinam Bools e criam expressões que produzem valores diferentes.
&&)O operador and em Crystal é representado por && e retorna true se os dois valores forem true; caso contrário, retorna false.
Ao usar o operador and, um Bool fica do lado direito do && e o outro do lado esquerdo.
true && true
# => true
true && false
# => false
||)O operador or em Crystal é representado por || e retorna true se pelo menos um dos valores fornecidos for true.
Se os dois valores forem false, ele retorna false.
Ao usar o operador or, um Bool deve ficar do lado direito do || e o outro do lado esquerdo.
true || true
# => true
true || false
# => true
false || false
# => false
!)O operador not em Crystal é representado por ! e retorna true se o Bool fornecido for false e retorna false se true for fornecido.
Ao usar o operador not, um Bool deve ficar depois do operador (!).
!true
# => false
!false
# => true
())Ao trabalhar com Bools, você pode usar parênteses para decidir quais Bools avaliar primeiro. O resultado pode variar dependendo de como os parênteses são usados. 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 a seguir o operador not será aplicado à expressão dentro dos parênteses.
!true && false
# => false
!(true && false)
# => true
Você só deve usar parênteses quando eles afetarem o resultado; caso contrário, devem ser omitidos.
Você está desenvolvendo o novo e muito apreciado jogo Crystal Hunter. No jogo, você é um personagem que se movimenta pelo cenário e coleta cristais. O jogador vence ao pegar todos os cristais. Se o jogador tocar em um bandido, perde todos os cristais e o jogo. Há uma exceção a essa regra: o jogador pode ter um power-up ativo que o deixa invisível para os bandidos.
Seu objetivo é escrever algumas regras que serão usadas no jogo.
No jogo, o personagem ganha pontos de bônus se tocar em um bandido enquanto estiver com um power-up.
Defina o método Rules#bonus_points?, que recebe dois argumentos (se o personagem tem um power-up ativo e se o personagem está tocando em um bandido) e retorna um valor booleano que diz se o personagem vai ganhar pontos de bônus.
O método deve retornar true somente se o personagem tiver um power-up ativo e estiver tocando em um bandido, e false caso contrário.
Rules.new.bonus_points?(false, true)
# => false
O jogador ganha pontos no jogo quando pega um cristal ou um power-up.
Defina o método Rules#score?, que recebe dois argumentos (se o personagem está tocando em um power-up e se o personagem está tocando em um cristal) e retorna um valor booleano que indica se o personagem marcou pontos ou não.
O método deve retornar true se o personagem tocar em um power-up ou em um cristal e false caso contrário.
Rules.new.score?(true, true)
# => true
Defina o método Rules#lose?, que recebe dois argumentos (se o personagem tem um power-up ativo e se o personagem está tocando em um bandido) e retorna um valor booleano que indica se o personagem perde ou não.
O método deve retornar true se o personagem tocar em um bandido e não tiver um power-up ativo, e false caso contrário.
Rules.new.lose?(false, true)
# => true
Defina o método Rules#win?, que recebe três argumentos (se o personagem pegou todos os cristais, se o personagem tem um power-up ativo e se o personagem está tocando em um bandido) e retorna um valor booleano que indica se o personagem vence ou não.
O método deve retornar true se o personagem tiver juntado todos os cristais e não tiver perdido de acordo com os argumentos definidos na parte 3, e false caso contrário.
Rules.new.win?(false, true, false)
# => false
Crie sua conta no Exercism para aprender e dominar Crystal com 26 conceitos142 exercícios e mentoria humana de verdade, tudo de graça.