疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

android开发—连连看开发技巧(8)


 

在《android开发—连连看开发技巧4》中忘记给出AbstractBoard实现3个子类的代码,下面补上。

矩阵排列的方块

       矩阵排列的方块会填满二维数组的每个数组元素,只是把四周留空即可,该子类的代码如下:
程序清单:codes18LinksrcorgcrazyitlinkoardimplFullBoard.java
public class FullBoard extends AbstractBoard
{
         @Override
         protected List createPieces(GameConf config,
                   Piece[][] pieces)
         {
                   // 创建一个Piece集合, 该集合里面存放初始化游戏时所需的Piece对象
                   List notNullPieces = new ArrayList ();
                   for (int i = 1; i < pieces.length - 1; i++)
                   {
                            for (int j = 1; j < pieces[i].length - 1; j++)
                            {
                                     // 先构造一个Piece对象, 只设置它在Piece[][]数组中的索引值,
                                     // 所需要的PieceImage由其父类负责设置。
                                     Piece piece = new Piece(i, j);
                                     // 添加到Piece集合中
                                     notNullPieces.add(piece);
                            }
                   }
                  return notNullPieces;
         }
}
该子类初始化的游戏界面如图18.7所示:
矩阵排列的方块
图18.7 矩阵排列的方块

竖向排列的方块

       竖向排列的方块以垂直的空列分隔开,该子类的代码如下:
程序清单:codes18LinksrcorgcrazyitlinkoardimplVerticalBoard.java
public class VerticalBoard extends AbstractBoard
{
         protected List createPieces(GameConf config,
                   Piece[][] pieces)
         {
                   // 创建一个Piece集合, 该集合里面存放初始化游戏时所需的Piece对象
                   List notNullPieces = new ArrayList ();
                   for (int i = 0; i < pieces.length; i++)
                   {
                            for (int j = 0; j < pieces[i].length; j++)
                            {
                                     // 加入判断, 符合一定条件才去构造Piece对象, 并加到集合中
                                     if (i % 2 == 0)
                                     {
                                               // 如果x能被2整除, 即单数列不会创建方块
                                               // 先构造一个Piece对象, 只设置它在Piece[][]数组中的索引值,
                                               // 所需要的PieceImage由其父类负责设置。
                                               Piece piece = new Piece(i, j);
                                               // 添加到Piece集合中
                                               notNullPieces.add(piece);
                                     }
                            }
                   }
                   return notNullPieces;
         }
}
上面程序中粗体字代码控制了只设置i % 2 == 0的列,也就是只设置索引为偶数的列,该子类初始化的游戏界面如图18.8所示:
竖向排列的方块
图18.8 竖向排列的方块

横向排列的方块

       竖向排列的方块以水平的空行分隔开,该子类的代码如下:
程序清单:codes18LinksrcorgcrazyitlinkoardimplHorizontalBoard.java
public class HorizontalBoard extends AbstractBoard
{
         protected List createPieces(GameConf config,
                   Piece[][] pieces)
         {
                   // 创建一个Piece集合, 该集合里面存放初始化游戏时所需的Piece对象
                   List notNullPieces = new ArrayList ();
                   for (int i = 0; i < pieces.length; i++)
                   {
                            for (int j = 0; j < pieces[i].length; j++)
                            {
                                     // 加入判断, 符合一定条件才去构造Piece对象, 并加到集合中
                                     if (j % 2 == 0)
                                     {
                                               // 如果x能被2整除, 即单数行不会创建方块
                                               // 先构造一个Piece对象, 只设置它在Piece[][]数组中的索引值,
                                               // 所需要的PieceImage由其父类负责设置。
                                               Piece piece = new Piece(i, j);
                                               // 添加到Piece集合中
                                               notNullPieces.add(piece);
                                      }
                            }
                   }
                   return notNullPieces;
         }
}
上面程序中粗体字代码控制了只设置j % 2 == 0的行,也就是只设置索引为偶数的行,该子类初始化的游戏界面如图18.9所示:
横向排列的方块
图18.9 横向分布的方块(摘自[疯狂Android讲义.李刚])