📄 gameblock.java
字号:
package russiangame;
import java.util.Random;
import javax.microedition.lcdui.Graphics;
/**
* <p>Title: 俄罗斯方块</p>
*
* <p>Description: 俄罗斯方块游戏</p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: Star Group</p>
*
* @author: Part of this programe comes from a open-source project in the Web(www.hyweb.net).
* Our group makes some remakeble improvement to it.
* @version 1.0
*/
public class GameBlock {
public static final short MOVE_LEFT = 1; //左移
public static final short MOVE_RIGHT = 2; //右移
/**各种砖块,1-7为活动砖块颜色,8为墙砖颜色
* <code>BRICK_COLORS</code> 的注释
*/
public static final int[] BRICK_COLORS = {
0x00FF0000, 0x0000FF00, 0x00FFFF00,
0x000000FF, 0x00FF00FF, 0x0000FFFF,
0x00C0C0C0, 0x00808080};
//7个下坠物数组,第一维rot为旋转值, 第二维x为行(12),第三维y为列(16)
//即4个大模块为4种可能的出现姿态
/** "田"
*/
protected int block_tian[][][] = { { {
0, 0, 0, 0}
, {
0, 1, 1, 0}
, {
0, 1, 1, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 0, 0}
, {
0, 1, 1, 0}
, {
0, 1, 1, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 0, 0}
, {
0, 1, 1, 0}
, {
0, 1, 1, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 0, 0}
, {
0, 1, 1, 0}
, {
0, 1, 1, 0}
, {
0, 0, 0, 0}
}
};
/** 反"L"
*/
protected int block_reverse_L[][][] = { { {
0, 0, 1, 0}
, {
0, 0, 1, 0}
, {
0, 1, 1, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 0, 0}
, {
0, 1, 0, 0}
, {
0, 1, 1, 1}
, {
0, 0, 0, 0}
}
, { {
0, 0, 0, 0}
, {
0, 1, 1, 0}
, {
0, 1, 0, 0}
, {
0, 1, 0, 0}
}
, { {
0, 0, 0, 0}
, {
1, 1, 1, 0}
, {
0, 0, 1, 0}
, {
0, 0, 0, 0}
}
};
/** 正"L"
*/
protected int block_L[][][] = { { {
0, 1, 0, 0}
, {
0, 1, 0, 0}
, {
0, 1, 1, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 0, 0}
, {
0, 1, 1, 1}
, {
0, 1, 0, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 0, 0}
, {
0, 1, 1, 0}
, {
0, 0, 1, 0}
, {
0, 0, 1, 0}
}
, { {
0, 0, 0, 0}
, {
0, 0, 1, 0}
, {
1, 1, 1, 0}
, {
0, 0, 0, 0}
}
};
/** "l"
*/
protected int block_I[][][] = { { {
0, 0, 1, 0}
, {
0, 0, 1, 0}
, {
0, 0, 1, 0}
, {
0, 0, 1, 0}
}
, { {
0, 0, 0, 0}
, {
0, 0, 0, 0}
, {
1, 1, 1, 1}
, {
0, 0, 0, 0}
}
, { {
0, 0, 1, 0}
, {
0, 0, 1, 0}
, {
0, 0, 1, 0}
, {
0, 0, 1, 0}
}
, { {
0, 0, 0, 0}
, {
0, 0, 0, 0}
, {
1, 1, 1, 1}
, {
0, 0, 0, 0}
}
};
/** 正"乙"
*/
protected int block_Z[][][] = { { {
0, 0, 0, 0}
, {
1, 1, 0, 0}
, {
0, 1, 1, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 1, 0}
, {
0, 1, 1, 0}
, {
0, 1, 0, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 0, 0}
, {
1, 1, 0, 0}
, {
0, 1, 1, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 1, 0}
, {
0, 1, 1, 0}
, {
0, 1, 0, 0}
, {
0, 0, 0, 0}
}
};
/** 反"乙"
*/
protected int block_reverse_Z[][][] = { { {
0, 0, 0, 0}
, {
0, 1, 1, 0}
, {
1, 1, 0, 0}
, {
0, 0, 0, 0}
}
, { {
0, 1, 0, 0}
, {
0, 1, 1, 0}
, {
0, 0, 1, 0}
, {
0, 0, 0, 0}
}
, { {
0, 0, 0, 0}
, {
0, 1, 1, 0}
, {
1, 1, 0, 0}
, {
0, 0, 0, 0}
}
, { {
0, 1, 0, 0}
, {
0, 1, 1, 0}
, {
0, 0, 1, 0}
, {
0, 0, 0, 0}
}
};
/** "丁"
*/
protected int block_T[][][] = { { {
0, 0, 0, 0}
, {
1, 1, 1, 0}
, {
0, 1, 0, 0}
, {
0, 0, 0, 0}
}
, { {
0, 1, 0, 0}
, {
1, 1, 0, 0}
, {
0, 1, 0, 0}
, {
0, 0, 0, 0}
}
, { {
0, 1, 0, 0}
, {
1, 1, 1, 0}
, {
0, 0, 0, 0}
, {
0, 0, 0, 0}
}
, { {
0, 1, 0, 0}
, {
0, 1, 1, 0}
, {
0, 1, 0, 0}
, {
0, 0, 0, 0}
}
};
private int blockNow[][][]; //当前坠物
private int blockNext[][]; //下一个坠物,不需要旋转参数,即2维足够
/** blockpattern左上角x坐标,x=i表示左上角距离游戏容器左上角x轴上i个小砖块单位
*/
private int xBrick;
/** blockpattern左上角y坐标,y=i表示左上角距离游戏容器左上角y轴上i个小砖块单位
*/
private int yBrick;
private int oldXBrick; //xBrick的旧值
private int oldYBrick; //yBrick的旧值
private int rot; //旋转值 0~3
private int oldRot; //rot旧值
private int nBrickIDNow; //组成当前坠物所用小砖块id(1-7),同时也表示一种下坠物形状 (因为程序中一种坠物只对应一种砖块)
private int nBrickIDNext; //组成下一个坠物所用小砖块id(1-7),同时也表示一种下坠物形状 (因为程序中一种坠物只对应一种砖块)
protected Random rand;
private GameMap map;
public GameBlock(GameMap map) {
this.map = map;
rand = new Random(System.currentTimeMillis());
//随即生成值在1~7之间的小砖块(也生成了下坠物)
this.nBrickIDNext = Math.abs(rand.nextInt() % 7) + 1;
}
/** 设置blockNow的内容
* @param nowBlock
*/
public void setCurrentBrick(int[][][] nowPattern) {
this.blockNow = new int[4][4][4];
for (int i = 0; i < 4; i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -