---
description: Collect the Total
---

# 收集總數

這個關卡會自動以亂數決定寶石的數量 (`randomNumberOfGems`)，然後我們要寫程式收集剛好這個數量的寶石。

![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M5-JmwCZMKh_d7RfBaN%2F-M5RnA1EhrfBJYiXpNJx%2F-M5Rq7RzXJgCYcznrYJC%2Fcollect%20the%20total.PNG?alt=media\&token=02439798-328d-49fd-b173-ccd9f49e442a)

{% tabs %}
{% tab title="main" %}
```swift
let totalGems = randomNumberOfGems

// 變數初始化
var gems = 0

// 還沒收集夠就繼續走
while gems < totalGems {
    walkAlongLeft {
        if isOnGem { 
            collectGem() 
            gems += 1
        }
    }
}
```
{% endtab %}

{% tab title="navigation" %}
```swift
// ⭐️ 貼著左邊走的策略，
//    將來可以寫入 Actor 的 extension 中。
func walkAlongLeft(handle:()->Void) {
    if !isBlockedLeft {
        turnLeft()
        moveForward()
        handle()
    } else if !isBlocked {
        moveForward()
        handle()
    } else {
        turnRight()
    }
}
```
{% endtab %}
{% endtabs %}
