溫馨提示×

溫馨提示×

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

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

瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型

發(fā)布時間:2020-06-24 13:18:45 來源:網(wǎng)絡 閱讀:793 作者:fkJava李剛 欄目:移動開發(fā)

對游戲玩家而言在游戲界面上看到的“元素”千差萬別、變化多端但對游戲開發(fā)者而言游戲界面上的元素在底層都是一些數(shù)據(jù)不同的數(shù)據(jù)所繪制的圖片有所不同。因此建立游戲的狀態(tài)數(shù)據(jù)模型是實現(xiàn)游戲邏輯的重要步驟。


13.3.1 定義數(shù)據(jù)模型


《瘋狂連連看》的游戲界面是一個n×m的“網(wǎng)格”每個網(wǎng)格上顯示一張圖片對游戲開發(fā)者來說這個網(wǎng)格只需要用一個二維數(shù)據(jù)來定義而每個網(wǎng)格上所顯示的圖片對底層的數(shù)據(jù)模型來說不同的圖片對應于不同的數(shù)值即可。圖13.6顯示了數(shù)據(jù)模型的示意。


瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型


13.6《瘋狂連連看》的數(shù)據(jù)模型

對于圖13.6所示的數(shù)據(jù)模型只要讓數(shù)值為0的網(wǎng)格上不繪制圖片其他數(shù)值的網(wǎng)格則繪制相應的圖片就可顯示出《瘋狂連連看》的游戲界面。


本程序?qū)嶋H上并不是直接使用int[][]數(shù)組來保存游戲的狀態(tài)數(shù)據(jù)而是采用NSArray來保存游戲的狀態(tài)模型而NSArray的元素又是NSArray相當于創(chuàng)建二維數(shù)組數(shù)組元素是FKPiece。因為FKPiece對象封裝的信息更多不僅包含了該方塊左上角的X、Y坐標還包含了該FKPiece所顯示的圖片、圖片ID這個圖片ID可作為該FKPiece的數(shù)據(jù)。


13.3.2 初始化游戲狀態(tài)數(shù)據(jù)


為了初始化游戲狀態(tài)程序需要創(chuàng)建一個NSArray數(shù)組為此程序定義一個FKBaseBoard基類該基類的代碼如下。


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

瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型

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


瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型

上面的粗體字代碼塊用于初始化NSArray代表的二維數(shù)組為有方塊的FKPiece元素的beginX、beginYp_w_picpath屬性賦值beginX、beginY根據(jù)該方塊在二維數(shù)組中的位置動態(tài)計算得到。


提示

上面程序中用到了xSizeySize等常量這兩個常量用于代表該游戲在橫向和縱向上各包含多少個方塊。程序?qū)iT定義了一個Constants.h文件來記錄這些常量的值后面有些類也用到了該頭文件中的常量請讀者參考本書配套光盤中的Constants.h文件。

程序中的①號代碼調(diào)用了createPieces:方法來創(chuàng)建一個NSArray集合該方法將會交給其子類去實現(xiàn)這里是典型的“模板模式”的應用。FKBaseBoard基類完全可以根據(jù)FKPiece對象在二維數(shù)組中的位置動態(tài)地計算它的beginX、beginYFKBaseBoard不確定NSArray代表二維數(shù)組的哪些元素是有方塊的。

由于《瘋狂連連看》游戲的初始狀態(tài)可能有很多種比如橫向分布的方塊、豎向分布的方塊、矩陣排列的方塊、隨機分布的方塊等該程序為了考慮以后的擴展性此處只采用了模板模式FKBaseBoard基類負責完成通用的代碼對于暫時無法確定的需要子類實現(xiàn)的部分可定義成createPieces:方法。

提示  

由于Objective-C沒有提供抽象類和抽象方法的概念因此此處將createPieces:方法定義成返回nil的空方法。


上面的程序中還用到了一個ImageUtil工具類它的作用是自動搜尋項目包的圖片并根據(jù)需要隨機讀取該目錄下的圖片。后面會詳細介紹該工具類的用法。


下面為該FKBaseBoard實現(xiàn)三個子類。

1矩陣排列的方塊


矩陣排列的方塊會填滿二維數(shù)組的每個數(shù)組元素只是把四周留空即可該子類的代碼實現(xiàn)如下接口部分幾乎沒有代碼因此此處不再給出。

程序清單/Users/yeeku/publish/codes/13/Link/Link/sources/board/FKFullBoard.m

 

瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型

該子類初始化的游戲界面如圖13.7所示。

瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型

13.7矩陣排列的方塊

2豎向排列的方塊

豎向排列的方塊以垂直的空列分隔開該子類的代碼實現(xiàn)如下接口部分幾乎沒有代碼因此此處不再給出。

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

瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型

程序中的粗體字代碼控制了只設置i % 2 == 0的列也就是只設置索引為偶數(shù)的列該子類初始化的游戲界面如圖13.8所示。

瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型

13.8豎向排列的方塊

3橫向排列的方塊

橫向排列的方塊以水平的空行分隔開該子類的代碼如下。

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

 

瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型

程序中的粗體字代碼控制了只設置j % 2 == 0的行也就是只設置索引為偶數(shù)的行該子類初始化的游戲界面如圖13.9所示。

瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型


13.9 橫向排列的方塊


——————本文節(jié)選自《瘋狂ios講義上》

瘋狂ios講義瘋狂連載之游戲的狀態(tài)數(shù)據(jù)模型


向AI問一下細節(jié)

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

AI