zoukankan      html  css  js  c++  java
  • 初始化游戏状态数据

    初始化游戏状态数据

    为了初始化游戏状态,程序需要创建一个Piece[][]数组,为此程序定义一个AbstractBoard抽象类,该抽象类的代码如下。

    程序清单:codes\18\Link\src\org\crazyit\link\board\AbstractBoard.java

    public abstract class AbstractBoard

    {

        // 定义一个抽象方法, 让子类去实现

        protected abstract List<Piece> createPieces(GameConf config,

            Piece[][] pieces);

        public Piece[][] create(GameConf config)

        {

              // 创建Piece[][]数组

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

              // 返回非空的Piece集合, 该集合由子类去创建

            List<Piece> notNullPieces = createPieces(config, pieces);      //

              // 根据非空Piece对象的集合的大小来取图片

              List<PieceImage> 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<Piece>集合,该抽象方法将会交给其子类去实现,这里是典型的“模板模式”的应用。AbstractBoard抽象基类完全可以根据Piece对象在二维数组中的位置动态地计算它的beginXbeginY,但AbstractBoard不确定Piece[][]数组的哪些元素是非空的。

    由于连连看游戏的初始状态可能有很多种—比如横向分布的方块、竖向分布的方块、矩阵排列的方块、随机分布的方块等,该程序为了考虑以后的扩展性,此处只是采用了模板模式:定义AbstractBoard抽象基类来完成通用的代码,而暂时无法确定、需要子类实现的方法定义成createPieces(GameConf config, Piece[][] pieces)抽象方法。

    上面的程序中还用到了一个ImageUtil工具类,它的作用是自动搜寻/res/drawable-mdpi目录下的图片,并根据需要随机地读取该目录下的图片。后面会详细介绍该工具类的用法。

     

     

    本文节选自《疯狂Android讲义(CD光盘1)》一书。

    图书详细信息:

    http://www.cnblogs.com/broadview/archive/2011/07/15/2107603.html

     

  • 相关阅读:
    20165227 结对编程项目-四则运算 第二周
    第八周学习总结
    20165227 结对编程项目-四则运算 第一周
    20165304第4次实验《Android程序设计》实验报告
    20165304《Java程序设计》第九周学习总结
    20165304实验三
    结对编程练习_四则运算(第二周)
    20165304 实验二 Java面向对象程序设计
    20165304 四则运算
    20165304《Java程序设计》第七周学习总结
  • 原文地址:https://www.cnblogs.com/broadview/p/2119755.html
Copyright © 2011-2022 走看看