重返世界
說了這麼多,我們總算了解到開頭的問題要如何解決了:
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本身拆成兩行(例如說pri和nt),或者把名為abcdef的變數拆成abcd和ef兩行這種行為,電腦就沒辦法了。這種拆行的技巧在常數或變數名稱很長,或者初始化複雜的陣列時,會讓程式碼看起來可讀性比較高。
現在,試著創建一個5x5的環形世界(中間的3x3部分是虛無方塊),將機器人放在(0,0),並且讓它環繞一週試試吧!