技术开发 频道

Android游戏开发:初始化游戏状态数据

  下面为该AbstractBoard实现3个子类。

  1.矩阵排列的方块

  矩阵排列的方块会填满二维数组的每个数组元素,只是把四周留空即可,该子类的代码如下。

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

public class FullBoard extends AbstractBoard
{
    @Override
    protected List
<Piece> createPieces(GameConf config,
        Piece[][] pieces)
    {
        
// 创建一个Piece集合, 该集合里面存放初始化游戏时所需的Piece对象
        List
<Piece> notNullPieces = new ArrayList<Piece>();
        
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 矩阵排列的方块

  2.竖向排列的方块

  竖向排列的方块以垂直的空列分隔开,该子类的代码如下。

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

public class VerticalBoard extends AbstractBoard
{
    protected List
<Piece> createPieces(GameConf config,
        Piece[][] pieces)
    {
        
// 创建一个Piece集合, 该集合里面存放初始化游戏时所需的Piece对象
        List
<Piece> notNullPieces = new ArrayList<Piece>();
        
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 竖向排列的方块

  3.横向排列的方块

  竖向排列的方块以水平的空行分隔开,该子类的代码如下。

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

public class HorizontalBoard extends AbstractBoard
{
    protected List
<Piece> createPieces(GameConf config,
        Piece[][] pieces)
    {
        
// 创建一个Piece集合, 该集合里面存放初始化游戏时所需的Piece对象
        List
<Piece> notNullPieces = new ArrayList<Piece>();
        
for (int i = 0; i < pieces.length; i++)
        {
            
for (int j = 0; j < pieces[i].length; j++)
            {
                
// 加入判断, 符合一定条件才去构造Piece对象, 并加到集合中
                
if (j % 2 == 0)
                {
                    
// 如果j能被2整除, 即单数行不会创建方块
                    
// 先构造一个Piece对象, 只设置它在Piece[][]数组中的索引值
                    
// 所需要的PieceImage由其父类负责设置
                    Piece piece
= new Piece(i, j);
                    
// 添加到Piece集合中
                    notNullPieces.add(piece);
                }
            }
        }
        return notNullPieces;
    }
}

  上面的程序中粗体字代码控制了只设置j % 2 == 0的行,也就是只设置索引为偶数的行,该子类初始化的游戏界面如图18.9所示。

0
相关文章