資料的集合

本週的教學影片檔:請點我

本週的初始程式碼:請點我

課程進行至此,我們已經學會了以下這些概念:

  • 程式是由資料指令構成的。
  • 資料:由物件組成整個程式的資料架構,用於指令上與電腦互動,物件導向程式設計下的物件有封裝、繼承等特徵。
  • 指令:藉由迴圈或條件語句,批量處理基礎的指令,組合成複雜的控制流,達成程式的目標功能。

請打開本週的初始程式碼,這將是最後一週在模擬器上進行的課程,我們的專案已經擴展到擁有 300 行程式碼的程度,大家將會在這個程式碼中見到許多還沒教過的語法,例如extensionfor-in-stride迴圈、Array等等,以及全新增加的class世界,感謝物件導向程式設計的封裝特性,目前我們還不用真正的去了解整個程式碼的意義,只要知道以下指令的用途就好了:

  • 世界可以藉由世界(長度: , 寬度:)指令創建出來,之後其成為一個長x寬的,近似於棋盤的方塊集合。
  • 世界擁有一個指令:截圖(),可以列印出此世界目前的狀態。
  • 角色擁有一個新指令:加入(世界: , 位置:),可以加入到一個已創建好的世界,並位於指定座標上。
  • 角色的前進()只會在已經加入了一個世界時運作,並且會檢查是否成功的移動到一個鄰近的方塊上。

運行範例程式碼將會看到下圖的結果,機器人從( 1 , 1 )一路往北走,最後卡在( 1 , 5 )無法繼續往北前進。

我從座標( 1 , 1 )前進到了座標( 1 , 2 )
我從座標( 1 , 2 )前進到了座標( 1 , 3 )
我從座標( 1 , 3 )前進到了座標( 1 , 4 )
我從座標( 1 , 4 )前進到了座標( 1 , 5 )
我試圖從座標( 1 , 5 )前進到座標( 1 , 6 ),但這個位置沒有方塊。
我試圖從座標( 1 , 5 )前進到座標( 1 , 6 ),但這個位置沒有方塊。

這個程式碼模擬了一個非常基礎的2D世界,這個世界擁有一格一格的方塊,而機器人可以在方塊上移動。目前的架構中,具體的資料結構如下:每一個方塊對應一個整數,如果值是-1,則視為虛無地帶,角色無法移動到其上;如果值是0或正整數,則畫出方塊和該數字,例如,0代表一般的區域,1或許代表有寶物的區域,2可以代表有怪物的區域...

在這樣的設計下,我們或許可以從這個基礎上設計出一個RPG遊戲,不過在這之前,不妨先想想:這樣的資料架構怎麼配合指令具體做出來呢?這些方塊的型態是什麼,如何構成的?

  • 每個方塊是一個變數或結構,並且在截圖()時會依序畫在該有的座標上,因此他至少要有一個xy
  • 機器人移動時,要查找座標在(x,y)的方塊是否大於等於0,決定是否移動上去,因此還要有一個

或許聰明的你會快速地基於這兩個重點,設計出一個structclass架構...

struct 方塊 {
    var x:Int
    var y:Int
    var:Int
}

接著怎麼辦呢?難道像範例程式碼這樣的世界,我們得去這樣創造嗎?

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)
...

果然,在一個100x100世界,我們得寫10,000行這樣的程式碼,根本是毫無效率的行為,一定有什麼方法可以快速處理!

我們已經學習用迴圈來縮減大量的指令,本週是進入真正開發專案前的最後一步:如何縮減、包裝大量的資料,完成了這個課程後,我們即將真正的打開MacBook,撰寫在手機上運行的程式了!

results matching ""

    No results matching ""