水晶獵人

水晶獵人

學習練習

簡介

Crystal 有一種型別叫做 Bool。 它代表 true 和 false 這兩個值。

邏輯運算子

Crystal 有三個邏輯運算子(!、||、&&),它們可以組合布林值,並構成會得出不同值的運算式。

且(&&)

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 中的非運算子以 ! 表示,如果給定的布林值是 false,就回傳 true;如果給定的是 true,則回傳 false。 使用非運算子時,布林值應該放在運算子(!)後面。

!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? 方法,它接受兩個引數(角色是否有使用中的強化道具 以及 角色是否碰到強盜),並回傳一個布林值,指出角色是否會獲得額外分數。這個方法只有在角色擁有使用中的強化道具且碰到強盜時才應回傳 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? 方法,它接受三個引數(角色是否已撿起所有水晶、角色是否有使用中的強化道具,以及 角色是否碰到強盜),並回傳一個布林值,指出角色是否獲勝。如果角色已收集所有水晶,且根據第 3 部分定義的引數判斷並未落敗,這個方法應回傳 true,否則回傳 false。

Rules.new.win?(false, true, false)
# => false
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Crystal Exercism

準備好開始 水晶獵人 了嗎?

註冊 Exercism,透過 26 個概念142 個練習 和真人引導來學習並精通 Crystal,全部免費。