一步一步教你用Swift開發俄羅斯方塊:No.3 二維數組,swiftno.3
數組是一個很有用的資料結構,很多程式都建立在數組之上,我很少看到哪個應用程式不用到數組的。
而我們的俄羅斯方塊顯然也需要數組,而且是更為特殊的 二維數組。
為什麼是二維數組呢?其實我們的整個遊戲空間,可以看做是一個二維數組地區,就像這樣:
我們的每一個block都佔據在這樣一個20x10的地區之內,20行,10列的一個200個block的二維數組讓我們可以根據(x,y)座標來確定block的位置,而這些blocks其實就是組成我們的L形,或者Z形 等等不同但我們都熟知的俄羅斯方塊;
swift提供了我們array[index]供我們使用,但是我們還需要一個自訂的array2D[x,y]來更方便我們的使用,所以,讓我們來自訂屬於自己的二維數組吧!
確保你選中Swiftris檔案夾,然後你可以選擇⌘ + N 或者 File > New > File…或者左下角的“+”號 > File 來建立新的swift類,如所示:
選擇Swift然後點擊Next, 給你的新類起個名字吧,我們叫做Array2D,意為二維數組,然後我們點擊create
在編輯地區會自動開啟我們剛剛建好的Array2D 類,我們照著進行修改
準備好了,雖然這段代碼不長,但是如果你是個swift的新手,這裡面卻有很多學問,基本上每行都有一個知識點需要學習!
友情提醒:
-號的紅色代碼需要移除,+號的綠色代碼需要手動加上,注釋掉的#1,2,3,4 是便於給大家分段講解,大家輸入的時候可以不輸入
subscript函數裡面 array[(row * columns) + column] , 注意是row 而不是rows。如果你不小心寫成了rows,那很顯然,你的數組會越界。剛開始的時候我沒有注意,就導致數組越界了。
#1
這裡我們命名了一個叫做Array2D的class,在swift裡面通常array是用struct 而不是用class,但是這裡我們卻需要一個class,因為在我們的程式裡面,我們需要傳引用(pass by reference),而不是傳值(pass by value),class是傳引用的,而struct是傳值的。
關於傳值和傳引用的區別如果學過C++的應該不難理解,我記得Effective c++這本書裡面對這部分有很詳盡的解釋,google一下應該也能找到很多答案,這裡我就不展開描述了。
想要查看