Trilhas
/
Crystal
Crystal
/
Exercícios
/
Caçador de cristais
Caçador de cristais

Caçador de cristais

Exercício de aprendizagem

Introdução

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

Operadores lógicos

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

And(&&)

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

Or(||)

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

Not(!)

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

Usando parênteses (())

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
Note

Você só deve usar parênteses quando eles afetarem o resultado; caso contrário, devem ser omitidos.

Instruções

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.

1. Defina se o personagem ganha pontos de bônus

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

2. Defina se o personagem marca pontos

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

3. Defina se o personagem perde

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

4. Defina se o personagem vence

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
Editar via GitHub O link abre em uma nova janela ou aba
Crystal Exercism

Tudo pronto para começar Caçador de cristais?

Crie sua conta no Exercism para aprender e dominar Crystal com 26 conceitos142 exercícios e mentoria humana de verdade, tudo de graça.