Rutas
/
Crystal
Crystal
/
Ejercicios
/
Cazador de cristales
Cazador de cristales

Cazador de cristales

Ejercicio de aprendizaje

Introducción

Crystal tiene un tipo conocido como Bool. Representa los valores true y false.

Operadores lógicos

Crystal tiene tres operadores lógicos (!, ||, &&), que combinan valores booleanos y forman expresiones que producen valores diferentes.

And (&&)

El operador and en Crystal se representa con && y devuelve true si ambos valores son true; en caso contrario, devuelve false. Al usar el operador and, se coloca un valor booleano a la derecha de && y otro a la izquierda.

true && true
# => true

true && false
# => false

Or (||)

El operador or en Crystal se representa con || y devuelve true si al menos uno de los valores dados es true. Si ambos valores son false, devuelve false. Al usar el operador or, se coloca un valor booleano a la derecha de || y otro a la izquierda.

true || true
# => true

true || false
# => true

false || false
# => false

Not (!)

El operador not en Crystal se representa con ! y devuelve true si el valor booleano dado es false, y devuelve false si se le proporciona true. Al usar el operador not, se coloca un valor booleano después del operador (!).

!true
# => false

!false
# => true

Uso de los paréntesis (())

Cuando trabajas con valores booleanos, puedes usar paréntesis para decidir qué valores se evalúan primero. El resultado puede variar según cómo se usen los paréntesis. En Crystal, lo que está entre paréntesis se evalúa primero.

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

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

Como lo que está entre paréntesis se evalúa primero, en el siguiente ejemplo el operador not se aplicará a la expresión que hay dentro de los paréntesis.

!true && false
# => false

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

Solo deberías usar paréntesis cuando afecten al resultado; de lo contrario, es mejor omitirlos.

Instrucciones

Estás desarrollando el nuevo y muy valorado juego Crystal Hunter. En el juego, eres un personaje que se mueve y recoge cristales. El jugador gana cuando recoge todos los cristales. Si el jugador entra en contacto con un bandido, perderá todos sus cristales y la partida. Hay una excepción a esta regla: el jugador puede tener activo un potenciador que lo hace invisible para los bandidos.

Tu objetivo es escribir algunas reglas que se usarán en el juego.

1. Define si el personaje obtiene puntos extra

En el juego, el personaje obtiene puntos extra si toca a un bandido mientras tiene un potenciador.

Define el método Rules#bonus_points?, que recibe dos argumentos (si el personaje tiene un potenciador activo y si el personaje está tocando a un bandido) y devuelve un valor Boolean que indica si el personaje obtendrá puntos extra. El método debe devolver true únicamente si el personaje tiene un potenciador activo y está tocando a un bandido, y false en caso contrario.

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

2. Define si el personaje puntúa

El jugador obtiene puntos en el juego cuando recoge un cristal o un potenciador.

Define el método Rules#score?, que recibe dos argumentos (si el personaje está tocando un potenciador y si el personaje está tocando un cristal) y devuelve un valor Boolean que indica si el personaje ha puntuado o no. El método debe devolver true si el personaje toca un potenciador o un cristal, y false en caso contrario.

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

3. Define si el personaje pierde

Define el método Rules#lose?, que recibe dos argumentos (si el personaje tiene un potenciador activo y si el personaje está tocando a un bandido) y devuelve un valor Boolean que indica si el personaje pierde o no. El método debe devolver true si el personaje toca a un bandido y no tiene un potenciador activo, y false en caso contrario.

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

4. Define si el personaje gana

Define el método Rules#win?, que recibe tres argumentos (si el personaje ha recogido todos los cristales, si el personaje tiene un potenciador activo y si el personaje está tocando a un bandido) y devuelve un valor Boolean que indica si el personaje gana o no. El método debe devolver true si el personaje ha reunido todos los cristales y no ha perdido según los argumentos definidos en el apartado 3, y false en caso contrario.

Rules.new.win?(false, true, false)
# => false
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Crystal Exercism

¿Listo para empezar Cazador de cristales?

Regístrate en Exercism para aprender y dominar Crystal con 26 conceptos142 ejercicios y mentoría humana real, todo gratis.