📄 brickgroup.java
字号:
package demo;
import java.util.Random;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.TiledLayer;
public class BrickGroup {
//方块组合类型
public static final int BRICK_BAR = 0; //竖条型的方块组合
public static final int BRICK_L_L = 1; //朝左的L型方块组合
public static final int BRICK_L_R = 2; //朝右的L型方块组合
public static final int BRICK_CORNER_L = 3; //朝左的拐弯型方块组合
public static final int BRICK_CORNER_R = 4; //朝右的拐弯型方块组合
public static final int BRICK_SQUARE = 5; //正方形方块组合
public static final int BRICK_TYPE_NUM = 6; //方块组合种类总数
private int m_nCurType = BRICK_BAR; //当前方块组合的类型
private int m_nNextType = BRICK_BAR; //下一个方块组合的类型
//方块组合旋转状态
public static final int ROT_NONE = 0; //原始方块组合
public static final int ROT_90 = 1; //方块组合旋转90度
public static final int ROT_180 = 2; //方块组合旋转180度
public static final int ROT_270 = 3; //方块组合旋转270度
public static final int ROT_STATE_NUM = 4; //旋转状态总数
private int m_nCurRot = ROT_NONE; //当前方块组合的旋转状态
private int m_nNextRot = ROT_NONE; //下一个方块组合的旋转状态
private Random m_Random;
private TiledLayer m_CurTL; //当前的方块组合形状
private TiledLayer m_NextTL; //下一个方块组合形状
//构造方法,参数image是砖块图像
public BrickGroup( Image image ){
m_Random = new Random();
m_CurTL = new TiledLayer( 4, 4, image, 9, 9);
m_NextTL = new TiledLayer( 4, 4, image, 9, 9);
}
//重新设置砖块组合
public void ResetBrick(){
RandNextBrick(); //随机设置下一个砖块组合
NextBricks(); //设置当前的砖块组合
}
//设置当前的砖块组合
public void NextBricks(){
//将下一个砖块组合幅
for( int row = 0; row < 4; row ++ ){
for( int col = 0; col < 4; col ++ ){
int index = m_NextTL.getCell(col, row);
m_CurTL.setCell(col, row, index);
}
}
m_nCurType = m_nNextType;
m_nCurRot = m_nNextRot;
RandNextBrick();
}
//获取当前的砖块组合
public TiledLayer getCurBrick(){
return m_CurTL;
}
//获取下一个砖块组合
public TiledLayer getNextBrick(){
return m_NextTL;
}
//旋转砖块组合
//参数bClockwise为true表示顺时针旋转,否则逆时针旋转
public void RotCurBrick( boolean bClockwise ){
if( bClockwise )
m_nCurRot ++;
else
m_nCurRot --;
if( m_nCurRot < 0 )
m_nCurRot = ROT_STATE_NUM - 1;
if( m_nCurRot >= ROT_STATE_NUM )
m_nCurRot = 0;
switch(m_nCurType){
case BRICK_BAR: //设置条型组合
setBarBrick( m_nCurRot, m_CurTL );
break;
case BRICK_L_L: //设置左L型组合
setLLBrick( m_nCurRot, m_CurTL );
break;
case BRICK_L_R: //设置右L型组合
setLRBrick( m_nCurRot, m_CurTL );
break;
case BRICK_CORNER_L: //设置左弯型组合
setCornerLBrick( m_nCurRot, m_CurTL );
break;
case BRICK_CORNER_R: //设置右弯型组合
setCornerRBrick( m_nCurRot, m_CurTL );
break;
case BRICK_SQUARE: //设置方型组合
setSquareBrick( m_nCurRot, m_CurTL );
break;
}
}
//随机设置下一个方块组合
private void RandNextBrick(){
m_nNextType = m_Random.nextInt() % BRICK_TYPE_NUM;
m_nNextType = Math.abs(m_nNextType);
m_nNextRot = m_Random.nextInt() % ROT_STATE_NUM;
m_nNextRot = Math.abs(m_nNextRot);
switch(m_nNextType){
case BRICK_BAR: //设置条型组合
setBarBrick( m_nNextRot, m_NextTL );
break;
case BRICK_L_L: //设置左L型组合
setLLBrick( m_nNextRot, m_NextTL );
break;
case BRICK_L_R: //设置右L型组合
setLRBrick( m_nNextRot, m_NextTL );
break;
case BRICK_CORNER_L: //设置左弯型组合
setCornerLBrick( m_nNextRot, m_NextTL );
break;
case BRICK_CORNER_R: //设置右弯型组合
setCornerRBrick( m_nNextRot, m_NextTL );
break;
case BRICK_SQUARE: //设置方型组合
setSquareBrick( m_nNextRot, m_NextTL );
break;
}
}
//设置条型组合
//参数rot为旋转状态,TL为组合容器
private void setBarBrick( int rot, TiledLayer TL ){
switch(rot){
case ROT_NONE:
case ROT_180:
TL.setCell(0,0, 0); TL.setCell(1,0, 1); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 1); TL.setCell(2,1, 0); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 1); TL.setCell(2,2, 0); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 1); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
case ROT_90:
case ROT_270:
TL.setCell(0,0, 0); TL.setCell(1,0, 0); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 1); TL.setCell(1,1, 1); TL.setCell(2,1, 1); TL.setCell(3,1, 1);
TL.setCell(0,2, 0); TL.setCell(1,2, 0); TL.setCell(2,2, 0); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
}
}
//设置左L型组合
//参数rot为旋转状态,TL为组合容器
private void setLLBrick( int rot, TiledLayer TL ){
switch(rot){
case ROT_NONE:
TL.setCell(0,0, 0); TL.setCell(1,0, 2); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 2); TL.setCell(2,1, 0); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 2); TL.setCell(2,2, 2); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
case ROT_90:
TL.setCell(0,0, 0); TL.setCell(1,0, 0); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 2); TL.setCell(2,1, 2); TL.setCell(3,1, 2);
TL.setCell(0,2, 0); TL.setCell(1,2, 2); TL.setCell(2,2, 0); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
case ROT_180:
TL.setCell(0,0, 0); TL.setCell(1,0, 2); TL.setCell(2,0, 2); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 0); TL.setCell(2,1, 2); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 0); TL.setCell(2,2, 2); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
case ROT_270:
TL.setCell(0,0, 0); TL.setCell(1,0, 0); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 0); TL.setCell(2,1, 2); TL.setCell(3,1, 0);
TL.setCell(0,2, 2); TL.setCell(1,2, 2); TL.setCell(2,2, 2); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
}
}
//设置右L型组合
//参数rot为旋转状态,TL为组合容器
private void setLRBrick( int rot, TiledLayer TL ){
switch(rot){
case ROT_NONE:
TL.setCell(0,0, 0); TL.setCell(1,0, 0); TL.setCell(2,0, 3); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 0); TL.setCell(2,1, 3); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 3); TL.setCell(2,2, 3); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
case ROT_90:
TL.setCell(0,0, 3); TL.setCell(1,0, 0); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 3); TL.setCell(1,1, 3); TL.setCell(2,1, 3); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 0); TL.setCell(2,2, 0); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
case ROT_180:
TL.setCell(0,0, 0); TL.setCell(1,0, 3); TL.setCell(2,0, 3); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 3); TL.setCell(2,1, 0); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 3); TL.setCell(2,2, 0); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
case ROT_270:
TL.setCell(0,0, 0); TL.setCell(1,0, 0); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 3); TL.setCell(1,1, 3); TL.setCell(2,1, 3); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 0); TL.setCell(2,2, 3); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
}
}
//设置左弯型组合
//参数rot为旋转状态,TL为组合容器
private void setCornerLBrick( int rot, TiledLayer TL ){
switch(rot){
case ROT_NONE:
case ROT_180:
TL.setCell(0,0, 0); TL.setCell(1,0, 4); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 4); TL.setCell(2,1, 4); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 0); TL.setCell(2,2, 4); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
case ROT_90:
case ROT_270:
TL.setCell(0,0, 0); TL.setCell(1,0, 0); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 0); TL.setCell(2,1, 4); TL.setCell(3,1, 4);
TL.setCell(0,2, 0); TL.setCell(1,2, 4); TL.setCell(2,2, 4); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
}
}
//设置右弯型组合
//参数rot为旋转状态,TL为组合容器
private void setCornerRBrick( int rot, TiledLayer TL ){
switch(rot){
case ROT_NONE:
case ROT_180:
TL.setCell(0,0, 0); TL.setCell(1,0, 0); TL.setCell(2,0, 5); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 5); TL.setCell(2,1, 5); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 5); TL.setCell(2,2, 0); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
case ROT_90:
case ROT_270:
TL.setCell(0,0, 0); TL.setCell(1,0, 0); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 5); TL.setCell(1,1, 5); TL.setCell(2,1, 0); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 5); TL.setCell(2,2, 5); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
break;
}
}
//设置方型组合
//参数rot为旋转状态,TL为组合容器
private void setSquareBrick( int rot, TiledLayer TL ){
TL.setCell(0,0, 0); TL.setCell(1,0, 0); TL.setCell(2,0, 0); TL.setCell(3,0, 0);
TL.setCell(0,1, 0); TL.setCell(1,1, 6); TL.setCell(2,1, 6); TL.setCell(3,1, 0);
TL.setCell(0,2, 0); TL.setCell(1,2, 6); TL.setCell(2,2, 6); TL.setCell(3,2, 0);
TL.setCell(0,3, 0); TL.setCell(1,3, 0); TL.setCell(2,3, 0); TL.setCell(3,3, 0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -