Треки
/
Crystal
Crystal
/
Вправи
/
Мисливець за кристалами
Мисливець за кристалами

Мисливець за кристалами

Навчальна вправа

Вступ

Crystal має тип, відомий як Bool. Він представляє значення true і false.

Логічні оператори

У Crystal є три логічні оператори: ! (логічне заперечення), || (логічне або) і && (логічне і). Вони поєднують булеві значення (англ. Boolean) і створюють вирази, що дають різні значення.

І(&&)

Оператор і у Crystal позначається && (і) і повертає true, якщо обидва значення true; інакше він повертає false. Коли ми використовуємо оператор і, одне булеве значення ставиться праворуч від && (і), а інше - ліворуч.

true && true
# => true

true && false
# => false

Або(||)

Оператор або у Crystal позначається || (або) і повертає true, якщо принаймні одне з наданих значень true. Якщо обидва значення false, то він повертає false. Коли ми використовуємо оператор або, одне булеве значення слід поставити праворуч від || (або), а інше - ліворуч.

true || true
# => true

true || false
# => true

false || false
# => false

Заперечення(!)

Логічне заперечення у Crystal позначається ! і повертає true, якщо надане булеве значення false, і повертає false, якщо надано true. Коли ми використовуємо логічне заперечення, одне булеве значення слід поставити після оператора (!).

!true
# => false

!false
# => true

Використання дужок(())

Коли ми працюємо з булевими значеннями, дужки дають змогу вирішити, які булеві значення обчислювати першими. Результат може відрізнятися залежно від того, як використано дужки. У Crystal те, що стоїть у дужках, обчислюється першим.

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

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

Оскільки те, що стоїть у дужках, обчислюється першим, у наведеному далі прикладі логічне заперечення застосується до виразу всередині дужок.

!true && false
# => false

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

Використовуйте дужки лише тоді, коли вони впливають на результат; інакше їх слід опускати.

Вказівки

Ми розробляємо нову надзвичайно популярну гру Crystal Hunter. У грі ми граємо за персонажа, який рухається та збирає кристали. Гравець перемагає, якщо збере всі кристали. Якщо гравець торкнеться бандита, він втратить усі свої кристали і програє. У цього правила є виняток: у гравця може бути активне підсилення, яке робить його невидимим для бандитів.

Наша мета - написати правила, які будуть використовуватися у грі.

1. Визначити, чи отримує персонаж бонусні очки

У грі персонаж отримує бонусні очки, якщо торкнеться бандита, маючи активне підсилення.

Визначте метод Rules#bonus_points?, який приймає два аргументи (чи має персонаж активне підсилення та чи торкається персонаж бандита) і повертає булеве значення (англ. Boolean), яке вказує, чи отримає персонаж бонусні очки. Метод має повертати true, лише якщо персонаж має активне підсилення і торкається бандита, та false в іншому разі.

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

2. Визначити, чи отримує персонаж очки

Гравець отримує очки, коли підбирає кристал або підсилення.

Визначте метод Rules#score?, який приймає два аргументи (чи торкається персонаж підсилення та чи торкається персонаж кристала) і повертає булеве значення, яке вказує, чи отримав персонаж очки. Метод має повертати true, якщо персонаж торкається підсилення або кристала, та false в іншому разі.

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

3. Визначити, чи програє персонаж

Визначте метод Rules#lose?, який приймає два аргументи (чи має персонаж активне підсилення та чи торкається персонаж бандита) і повертає булеве значення, яке вказує, чи програє персонаж. Метод має повертати true, якщо персонаж торкається бандита і не має активного підсилення, та false в іншому разі.

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

4. Визначити, чи перемагає персонаж

Визначте метод Rules#win?, який приймає три аргументи (чи зібрав персонаж усі кристали, чи має персонаж активне підсилення та чи торкається персонаж бандита) і повертає булеве значення, яке вказує, чи перемагає персонаж. Метод має повертати true, якщо персонаж зібрав усі кристали і не програв згідно з аргументами, визначеними в частині 3, та false в іншому разі.

Rules.new.win?(false, true, false)
# => false
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Crystal Exercism

Час розпочати Мисливець за кристалами?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Crystal, а також 26 концепцій142 вправи та справжнє наставництво від людей, і все це безкоштовно.