初始化遊戲狀態資料

broadviewbj發表於2011-07-28

初始化遊戲狀態資料

為了初始化遊戲狀態,程式需要建立一個Piece[][]陣列,為此程式定義一個AbstractBoard抽象類,該抽象類的程式碼如下。

程式清單:codes\18\Link\src\org\crazyit\link\board\AbstractBoard.java

public abstract class AbstractBoard

{

    // 定義一個抽象方法, 讓子類去實現

    protected abstract List createPieces(GameConf config,

        Piece[][] pieces);

    public Piece[][] create(GameConf config)

    {

          // 建立Piece[][]陣列

          Piece[][] pieces = new Piece[config.getXSize()][config.getYSize()];

          // 返回非空的Piece集合, 該集合由子類去建立

        List notNullPieces = createPieces(config, pieces);      //

          // 根據非空Piece物件的集合的大小來取圖片

          List playImages = ImageUtil.getPlayImages(config.get
             
Context(),

               notNullPieces.size());

          // 所有圖片的寬、高都是相同的

          int imageWidth = playImages.get(0).getImage().getWidth();

          int imageHeight = playImages.get(0).getImage().getHeight();

          // 遍歷非空的Piece集合

        for (int i = 0; i < notNullPieces.size(); i++)

        {

             // 依次獲取每個Piece物件

             Piece piece = notNullPieces.get(i);

             piece.setImage(playImages.get(i));

             // 計算每個方塊左上角的XY座標

             piece.setBeginX(piece.getIndexX() * imageWidth

                 + config.getBeginImageX());

             piece.setBeginY(piece.getIndexY() * imageHeight

                 + config.getBeginImageY());

             // 將該方塊物件放入方塊陣列的相應位置處

             pieces[piece.getIndexX()][piece.getIndexY()] = piece;

        }

          return pieces;

    }

}

上面的程式中粗體字程式碼塊用於初始化Piece[][]陣列,初始化程式碼負責為各非空的Piece元素的beginXbeginYimage屬性賦值,其中beginXbeginY根據該方塊在二維陣列中的位置動態計算得到。

上面的程式中①號程式碼呼叫了createPieces(config, pieces)抽象方法來建立一個List集合,該抽象方法將會交給其子類去實現,這裡是典型的“模板模式”的應用。AbstractBoard抽象基類完全可以根據Piece物件在二維陣列中的位置動態地計算它的beginXbeginY,但AbstractBoard不確定Piece[][]陣列的哪些元素是非空的。

由於連連看遊戲的初始狀態可能有很多種—比如橫向分佈的方塊、豎向分佈的方塊、矩陣排列的方塊、隨機分佈的方塊等,該程式為了考慮以後的擴充套件性,此處只是採用了模板模式:定義AbstractBoard抽象基類來完成通用的程式碼,而暫時無法確定、需要子類實現的方法定義成createPieces(GameConf config, Piece[][] pieces)抽象方法。

上面的程式中還用到了一個ImageUtil工具類,它的作用是自動搜尋/res/drawable-mdpi目錄下的圖片,並根據需要隨機地讀取該目錄下的圖片。後面會詳細介紹該工具類的用法。

 

 初始化遊戲狀態資料

本文節選自《瘋狂Android講義(CD光碟1)》一書。

圖書詳細資訊:http://space.itpub.net/?uid-13164110-action-viewspace-itemid-702318

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-703350/,如需轉載,請註明出處,否則將追究法律責任。

相關文章