瘋狂ios講義瘋狂連載之實現遊戲邏輯(2)

13.6.5 定義獲取通道的工具方法

這裏所謂的通道指的是一個方塊上、下、左、右4個方向上的空白方塊圖13.10顯示了一個方塊四周的通道。

100108_BDc6_262659.jpg

13.10 方塊四周的通道


下面是獲取某個座標點四周通道的4個方法。

程序清單codes/13/Link/Link/sources/board/FKGameService.m

wKioL1MFZlfiF-uQAAPNUHG6n3M698.jpgwKioL1MFZoyz_V3oAAOdxwp2s9s526.jpgwKioL1MFZuLRKB-2AANwJ2jdqLA543.jpg

13.6.6 沒有轉折點的橫向連接

如果兩個FKPieceFKPiece二維數組中的第二維索引值相等那麼這兩個FKPiece就位於同一行如前面的linkWithBeginPiece:endPiece:方法中①號代碼所示此時程序需要調用isXBlockFromP1: toP2:pieceWidth:判斷p1p2之間是否有障礙。下面是該方法的代碼。

程序清單codes/13/Link/Link/sources/board/FKGameService.m

wKioL1MFZvaxbfzNAAIqxHENaAY269.jpg

從上面的判斷可以看出如果兩個方塊位於同一行且它們之間沒有障礙那麼這兩個方塊就可以消除兩個方塊的連接信息就是它們的中心。

13.6.7 沒有轉折點的縱向連接

與之相似的是如果兩個FKPieceFKPiece二維數組中的第一維索引值相等那麼這兩個FKPiece就位於同一列如前面的linkWithBeginPiece:endPiece:方法中②號代碼所示此時程序需要調用isYBlockFromP1: toP2:pieceHeight:方法判斷p1p2之間是否有障礙。下面是該方法的代碼。

程序清單codes/13/Link/Link/sources/board/FKGameService.m

 

wKioL1MFZweS5Q36AAIwZuAt82E407.jpg

13.6.8 一個轉折點的連接

對於兩個方塊的連接線上只有一個轉折點的情況程序需要先找到這個轉折點。爲了找到這個轉折點程序定義遍歷兩個通道並獲取它們交點的一個方法。

程序清單codes/13/Link/Link/sources/board/FKGameService.m


wKioL1MFZ3mx5ObIAAJbCJ0V3js390.jpg


爲了找出兩個方塊連接線上的連接點程序同樣需要分析p1p2兩個點的位置分佈。根據前面的分析我們知道p2要麼位於p1的右上角要麼位於p1的右下角。


注意

對於p2位於p1的左上角和左下角的情況只要把p1p2交換即可。


對於p2位於p1的右上角的情形如圖13.11所示。

從圖13.11可以看出當p2位於p1的右上角時應該計算p1的左通道與p2的向下通道是否有交點p1的向上通道與p2的向左通道是否有交點。

對於p2位於p1的右下角的情形如圖13.12所示。

從圖13.12可以看出當p2位於p1的右上角時應該計算p1的向右通道與p2的向上通道是否有交點p1的向下通道與p2的向左通道是否有交點。

100323_xe1e_262659.jpg

13.11p2位於p1的右上角

100341_phy8_262659.jpg


13.12p2位於p1的右下角

考慮到p1p2具有上面兩種分佈情形程序提供瞭如下方法進行處理。

程序清單codes/13/Link/Link/sources/board/FKGameService.m

 wKiom1MFZ9yCjxNsAAV9RSOfQCo795.jpg

wKiom1MFZ-aRDbuQAAOTMLf9m7U537.jpg

上面的兩行粗體字代碼分別處理了p2位於p1的右上和右下的兩種情形。

程序中用到了isLeftUpisLeftDownisRightUpisRightDown方法來判斷p2位於p1的左上、左下、右上、右下4種情形這4個方法的實現比較簡單隻要對它們的XY座標進行簡單判斷即可代碼如下。

程序清單codes/13/Link/Link/sources/board/FKGameService.m

wKiom1MFZ_ii0NdRAAOcJoWbIpE502.jpg

——————本文節選自《瘋狂ios講義上》

100459_CAHg_262659.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章