重返世界

說了這麼多,我們總算了解到開頭的問題要如何解決了:

var 方塊1-0 = 方塊(x:1, y:0,:-1)
var 方塊1-1 = 方塊(x:1, y:1,:0)
var 方塊1-2 = 方塊(x:1, y:2,:1)
var 方塊1-3 = 方塊(x:1, y:3,:1)
...

我們的世界和圈圈叉叉類似,屬於一個2D世界,每個方格可以由一個x座標和y座標定義出位置。因此在一個世界中,每一行方格可以由一個整數陣列Array<Int>表示,也可以寫作[Int],這兩種程式碼效果完全一樣。

那麼,整個世界由好幾行方格構成,因此在世界中設計方格陣列時,其類型應該是「一系列整數陣列的陣列」,也就是Array<Array<Int>>,也可以寫作[[Int]],大家會發現後面這種寫法在陣列的層次很多時會比較簡便。

現在,打開範例程式碼,你應該比較有能力看懂創建新世界時的程式碼了:

let 新世界 = 世界([
    [-1,-1, 1],
    [-1, 0, 1, 1, 1, 0],
    [-1, 1,-1,-1,-1, 1, 1],
    [-1, 1,-1,-1,-1, 1],
    [ 1, 1,-1,-1,-1, 1],
    [-1, 0, 1, 1, 1, 0],
    [-1,-1,-1,-1, 1]
])

這段程式碼的意思實際上就是由一個[[Int]]型態的陣列,去初始化一個世界,而初始化的程式碼其實也只是計算出世界應有的長寬(此例中會創建一個7x7世界)、將使用者沒放完的方塊都當作虛無,並且將其它的方塊設定到世界裡面去,想看到初始化之後世界方塊陣列,你也可以試著執行print(新世界.方塊)看看 ,不過電腦可不會幫你排版。

附帶一提,在Swift中,各種大、中、小括號內的程式碼是可以分成很多行寫的,括號本身則通常必須與指令相連,一個完整的物件或完整的指令,也不能拆成很多行,例如,這樣的程式碼是會正確無誤的執行的:

print(
2
*
3
)

當然啦,把print本身拆成兩行(例如說print),或者把名為abcdef的變數拆成abcdef兩行這種行為,電腦就沒辦法了。這種拆行的技巧在常數或變數名稱很長,或者初始化複雜的陣列時,會讓程式碼看起來可讀性比較高。

現在,試著創建一個5x5的環形世界(中間的3x3部分是虛無方塊),將機器人放在(0,0),並且讓它環繞一週試試吧!

解答

results matching ""

    No results matching ""