學習軌道
/
Elm
Elm
/
練習
/
安娜琳的滲透行動
安娜琳的滲透行動

安娜琳的滲透行動

學習練習

簡介

布林值

Bool型別是這個程式語言的基礎之一。 它用來描述某件事是 true 還是 false,分別對應 True 和 False 這兩個值。

布林值可以用 &&「AND」和 ||「OR」運算子組合,也可以用 not函式取反。

布林值也非常適合用來在程式碼中建立分支,這些分支只有在符合某些條件時才會執行。 在 Elm 中,這是用 if-then-else運算式完成的,用法如下。

if someCondition || (someOtherCondition && anotherCondition) then
    doSomething
else
    doSomethingElse

說明

在這道練習中,你要為一位朋友正在開發的新 RPG 遊戲實作任務邏輯。遊戲的主角是 Annalyn,一個勇敢的女孩,身邊帶著一隻兇猛又忠誠的寵物狗。不幸的是,災難降臨了,她最好的朋友在森林裡尋找莓果時遭到綁架。Annalyn 會試著找到並救出她最好的朋友,這趟任務中她可以選擇要不要帶上她的狗。

追蹤好友的足跡一段時間後,她找到了囚禁好友的營地。原來綁匪有兩個人:一位強大的騎士和一名狡猾的弓箭手。

找到綁匪之後,Annalyn 開始考慮自己能採取下列哪些行動:

  • 快速攻擊:如果騎士正在睡覺,就能發動快速攻擊,因為他穿上盔甲需要時間,這段期間他會很脆弱。
  • 潛行攻擊:如果 Annalyn 能在不被發現的情況下接近熟睡的騎士,她就能以潛行攻擊造成 12 點傷害。否則,她只能對騎士造成 7 點傷害。
  • 偵察:只要他們之中至少有一人醒著,就能對這群人進行偵察。否則,偵察只是浪費時間。
  • 向囚犯打暗號:如果囚犯醒著,而弓箭手正在睡覺,就能用鳥叫聲向囚犯打暗號,因為弓箭手受過鳥叫暗號的訓練,可能會攔截到訊息。
  • 釋放囚犯:Annalyn 可以試著潛入營地釋放囚犯。 這是件冒險的事,只有兩種情況下能成功:
    • 如果 Annalyn 帶著她的寵物狗,那麼只要弓箭手睡著,她就能救出囚犯。 騎士怕狗,弓箭手也來不及在 Annalyn 和囚犯逃走前做好準備。
    • 如果 Annalyn 沒帶狗,那她和囚犯就得非常小心才行! 只要囚犯醒著,而且騎士和弓箭手都在睡覺,Annalyn 就能釋放囚犯;但如果囚犯在睡覺,就救不了他:囚犯會因為 Annalyn 突然出現而嚇到,反而吵醒騎士和弓箭手。

你有五項任務:根據森林裡這三個角色的狀態,以及 Annalyn 的寵物狗是否在場,實作判斷上述行動是否可行的邏輯。

1. 檢查是否能發動快速攻擊

實作 canFastAttack 函式,它接受一個布林值,表示騎士是否醒著。這個函式會根據騎士的狀態,在能發動快速攻擊時回傳 True,否則回傳 False:

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

2. 檢查是否能偵察這群人

實作 canSpy 函式,它接受三個布林值,分別表示騎士、弓箭手和囚犯是否醒著。這個函式會根據這三個角色的狀態,在能偵察這群人時回傳 True,否則回傳 False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

3. 檢查是否能向囚犯打暗號

實作 canSignalPrisoner 函式,它接受兩個布林值,分別表示弓箭手和囚犯是否醒著。這個函式會根據這兩個角色的狀態,在能向囚犯打暗號時回傳 True,否則回傳 False:

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

4. 檢查是否能釋放囚犯

實作 canFreePrisoner 函式,它接受四個布林值。前三個參數分別表示騎士、弓箭手和囚犯是否醒著。最後一個參數表示 Annalyn 的寵物狗是否在場。這個函式會根據這三個角色的狀態以及 Annalyn 的寵物狗是否在場,在能釋放囚犯時回傳 True,否則回傳 False:

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. 計算潛行攻擊能造成的傷害

實作 stealthAttackDamage 函式,它接受一個布林值,表示 Annalyn 是否被發現。這個函式在她被發現時回傳 7,否則回傳 12。

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Elm Exercism

準備好開始 安娜琳的滲透行動 了嗎?

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