重返世界
說了這麼多,我們總算了解到開頭的問題要如何解決了:
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)
,並且讓它環繞一週試試吧!