Crystal tiene un tipo conocido como Bool.
Representa los valores true y false.
Crystal tiene tres operadores lógicos (!, ||, &&), que combinan Bools y forman expresiones que producen valores distintos.
&&)El operador and en Crystal se representa con && y devuelve true si ambos valores son true; de lo contrario, devuelve false.
Cuando usas el operador and, se coloca un Bool a la derecha del && y otro a la izquierda.
true && true
# => true
true && false
# => false
||)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.
Cuando usas el operador or, debes colocar un Bool a la derecha del || y otro a la izquierda.
true || true
# => true
true || false
# => true
false || false
# => false
!)El operador not en Crystal se representa con ! y devuelve true si el Bool dado es false, y devuelve false si se le da true.
Cuando usas el operador not, debes colocar un Bool después del operador (!).
!true
# => false
!false
# => true
())Cuando trabajas con Bools, puedes usar paréntesis para decidir cuáles 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 está dentro de los paréntesis.
!true && false
# => false
!(true && false)
# => true
Solo deberías usar paréntesis cuando afecten el resultado; de lo contrario, conviene omitirlos.
Estás en el proceso de desarrollar el nuevo y muy apreciado juego Crystal Hunter. En el juego, eres un personaje que se mueve por el escenario y recolecta cristales. El jugador gana si recoge todos los cristales. Si el jugador entra en contacto con un bandido, pierde todos sus cristales y el juego. Hay una excepción a esta regla: el jugador puede tener un power-up activo que lo hace invisible para los bandidos.
Tu objetivo es escribir algunas reglas que se usarán en el juego.
En el juego, el personaje obtiene puntos de bonificación si toca a un bandido mientras tiene un power-up.
Define el método Rules#bonus_points? que recibe dos argumentos (si el personaje tiene un power-up activo y si el personaje está tocando a un bandido) y devuelve un valor Boolean que indica si el personaje obtendrá puntos de bonificación.
El método debe devolver true solo si el personaje tiene un power-up activo y está tocando a un bandido, y false en caso contrario.
Rules.new.bonus_points?(false, true)
# => false
El jugador obtiene puntos en el juego cuando recoge un cristal o un power-up.
Define el método Rules#score?, que recibe dos argumentos (si el personaje está tocando un power-up y si el personaje está tocando un cristal) y devuelve un valor Boolean que indica si el personaje anotó puntos o no.
El método debe devolver true si el personaje toca un power-up o un cristal, y false en caso contrario.
Rules.new.score?(true, true)
# => true
Define el método Rules#lose?, que recibe dos argumentos (si el personaje tiene un power-up 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 power-up activo, y false en caso contrario.
Rules.new.lose?(false, true)
# => true
Define el método Rules#win?, que recibe tres argumentos (si el personaje ha recogido todos los cristales, si el personaje tiene un power-up 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 la parte 3, y false en caso contrario.
Rules.new.win?(false, true, false)
# => false
Regístrate en Exercism para aprender y dominar Crystal con 26 conceptos142 ejercicios y mentoría humana real, todo gratis.