中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

瘋狂ios講義之實現游戲邏輯(1)

發布時間:2020-07-15 19:39:02 來源:網絡 閱讀:696 作者:fkJava李剛 欄目:移動開發

FKGameService類是整個游戲邏輯實現的核心它是一個可以復用的業務邏輯類它與游戲實現平臺無關其實現原理與《瘋狂Android講義》書中Android版《瘋狂連連看》游戲中GameService的實現原理相同。

13.6.1 定義FKGameService的接口代碼


根據前面程序對FKGameService對象的依賴程序需要FKGameService對象包含如下方法。

start初始化游戲狀態開始游戲的方法。

hasPieces判斷FKPiece二維數組中是否還剩下FKPiece對象如果所有的FKPiece都被消除了游戲就算勝利。

(FKPiece*) findPieceAtTouchX:(CGFloat) touchX touchY:(CGFloat)touchY根據觸碰點的XY坐標來獲取FKPiece

(FKLinkInfo*) linkWithBeginPiece:(FKPiece*)p1 endPiece: (FKPiece*)p2判斷p1p2兩個方塊是否可以相連。

FKGameService類定義的接口部分代碼如下。

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

瘋狂ios講義之實現游戲邏輯(1)


13.6.2 實現FKGameService


FKGameService組件的前兩個方法實現起來都比較簡單。

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

瘋狂ios講義之實現游戲邏輯(1)

面三個方法的實現都很簡單相信讀者很容易理解。下面詳細介紹剩下的兩個方法的實現。


13.6.3 獲取觸碰點的方塊


當用戶觸碰游戲界面時事件監聽器獲取的是該觸碰點在游戲界面上的XY坐標但程序需要獲取用戶觸碰的到底是哪個方塊。因此程序必須把界面上的XY坐標換算成在FKPiece二維數組中的兩個索引值。

考慮到游戲界面上每個方塊的寬度、高度都是相同的因此想將界面上的XY坐標換算成FKPiece二維數組中的索引也比較簡單只要用XY坐標值除以圖片的寬、高即可。下面的方法是根據觸碰點XY坐標獲取對應方塊的代碼。

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

瘋狂ios講義之實現游戲邏輯(1)

上面的方法中兩行粗體字代碼用于根據觸碰點XY坐標來計算它在FKPiece二維數組中的索引值。該方法調用了getIndexWithRelateive:size:進行計算。

getIndexWithRelateive:size:方法的實現就是用relative除以size只是程序需要判斷可以整除和不能整除兩種情況如果可以整除說明還在前一個方塊內如果不能整除則對應于下一個方塊。下面是getIndexWithRelateive:size:方法的代碼。

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

瘋狂ios講義之實現游戲邏輯(1)


13.6.4 判斷兩個方塊是否可以相連


判斷兩個方塊是否可以相連是本程序需要處理的最煩瑣的地方因為兩個方塊可以相連的情形比較多大致可分為如下情況。

兩個方塊位于同一條水平線可以直接相連。

兩個方塊位于同一條豎直線可以直接相連。

兩個方塊以兩條線段相連也就是有1個拐角。

兩個方塊以三條線段相連也就是有2個拐角。

- (FKLinkInfo*)linkWithBeginPiece:(FKPiece*)p1 endPiece:(FKPiece*)p2方法把這4種情況分開進行處理代碼如下。

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

瘋狂ios講義之實現游戲邏輯(1)

瘋狂ios講義之實現游戲邏輯(1)

程序中的4處粗體字代碼分別代表兩個方塊位于同一條水平線可直接相連、兩個方塊位于同一條豎直線可直接相連、兩個方塊需要兩條線相連、兩個方塊需要3條線相連。上面的方法分別考慮了這4種情況但程序還需要為這4個方法提供實現。

為了實現上面4個方法可以對兩個Piece的位置關系進行歸納。

p1p2在同一行indexY值相同。

p1p2在同一列indexX值相同。

p2p1的右上角p2indexX >p1indexXp2indexY < p1indexY

p2p1的右下角p2indexX >p1indexXp2indexY > p1indexY

至于p2p1的左上角以及p2p1的左下角這兩種情況程序可以重新執行linkWithBeginPiece: endPiece:方法將p1p2兩個參數的位置互換即可。


——————本文節選自《瘋狂ios講義上》
瘋狂ios講義之實現游戲邏輯(1)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

称多县| 枝江市| 资中县| 四会市| 河池市| 满洲里市| 阿荣旗| 如东县| 金门县| 伊金霍洛旗| 板桥市| 阳山县| 乌恰县| 隆昌县| 安西县| 庄浪县| 手机| 睢宁县| 阳江市| 读书| 巨野县| 永昌县| 泰兴市| 鱼台县| 南木林县| 玉山县| 澄城县| 阳山县| 莱州市| 永安市| 泰来县| 天峻县| 威海市| 镇坪县| 新野县| 互助| 新源县| 日照市| 永仁县| 建昌县| 岳阳县|