⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 brick3d.java

📁 这是一个TetrisApplet程序,,是用JAVA开发的,提大家学习
💻 JAVA
字号:
/* * Brick3D.java * * 创建于 2004年12月11日, 下午6:09 */package TetrisApplet;/** * * @author  刘斌 china_liubin@hotmail.com */class Brick3D {    //常量定义        /*     * 形状定义,对应BRICK_INFO数组中的第1维     * 范围:0 - 6     **/    public static final int SQUARE_SHAPE = 0;    public static final int T_SHAPE = 1;    public static final int BAR_SHAPE = 2;    public static final int L_SHAPE = 3;    public static final int INVERTED_L_SHAPE = 4;    public static final int S_SHAPE = 5;    public static final int Z_SHAPE = 6;        public static final int MAX_SHAPE_NUM = Z_SHAPE + 1;        /**     * 砖块单元格的宽度     **/    public static final int CELL_WIDTH = 12;    public static final int CELL_HEIGHT = CELL_WIDTH;        /**     * 旋转角度定义: 0,90,180,270度     * 对应BRICK_INFO数组中的第2维     * 范围:0-3     **/    public static final int ROTATION_0 = 0;    public static final int ROTATION_90 = 1;    public static final int ROTATION_180 = 2;    public static final int ROTATION_270 = 3;        /**     * BickInfo数组用于定义在Graphics对象上画砖块时     * 要使用的信息。这些信息包括:形状,旋转角度,砖块位置等。     *     * 砖块基本信息矩阵是一个4*4大小的矩阵,如果值为1,那么就在这个格子中     * 根据设定的颜色值画砖块,否则就不画。     *     * 例如,T形的砖块的数组定义为:     *     *	[ 1, 1, 1, 0,     *	  0, 1, 0, 0,     *	  0, 0, 0, 0,     *	  0, 0, 0, 0 ]     *     * 逆时针旋转90度以后的矩阵为:     *     *	[ 1, 0, 0, 0,     *	  1, 1, 0, 0,     *	  1, 0, 0, 0,     *	  0, 0, 0, 0 ]     *     *  BlockInfo[形状][角度(逆时针旋转)][X][Y];     **/    private static final int BRICK_INFO[][][][] = {        {//方块            {//zoro                { 1, 1, 0, 0 },                { 1, 1, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//90                { 1, 1, 0, 0 },                { 1, 1, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//180                { 1, 1, 0, 0 },                { 1, 1, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//270                { 1, 1, 0, 0 },                { 1, 1, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }        },         {//T形            {//zoro                { 1, 1, 1, 0 },                { 0, 1, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//90                { 1, 0, 0, 0 },                { 1, 1, 0, 0 },                { 1, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//180                { 0, 1, 0, 0 },                { 1, 1, 1, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//270                { 0, 1, 0, 0 },                { 1, 1, 0, 0 },                { 0, 1, 0, 0 },                { 0, 0, 0, 0 }            }        },         {//棍子形状            {//zoro                { 1, 1, 1, 1 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//90                { 1, 0, 0, 0 },                { 1, 0, 0, 0 },                { 1, 0, 0, 0 },                { 1, 0, 0, 0 }            }, {//180                { 1, 1, 1, 1 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//270                { 1, 0, 0, 0 },                { 1, 0, 0, 0 },                { 1, 0, 0, 0 },                { 1, 0, 0, 0 }            }        },         {//L形状            {//zoro                { 1, 0, 0, 0 },                { 1, 0, 0, 0 },                { 1, 1, 0, 0 },                { 0, 0, 0, 0 }            }, {//90                { 0, 0, 1, 0 },                { 1, 1, 1, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//180                { 1, 1, 0, 0 },                { 0, 1, 0, 0 },                { 0, 1, 0, 0 },                { 0, 0, 0, 0 }            }, {//270                { 1, 1, 1, 0 },                { 1, 0, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }        },         {//反L形状            {//zoro                { 0, 1, 0, 0 },                { 0, 1, 0, 0 },                { 1, 1, 0, 0 },                { 0, 0, 0, 0 }            }, {//90                { 1, 1, 1, 0 },                { 0, 0, 1, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//180                { 1, 1, 0, 0 },                { 1, 0, 0, 0 },                { 1, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//270                { 1, 0, 0, 0 },                { 1, 1, 1, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }        },         {//S形状            {//zoro                { 0, 1, 1, 0 },                { 1, 1, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//90                { 1, 0, 0, 0 },                { 1, 1, 0, 0 },                { 0, 1, 0, 0 },                { 0, 0, 0, 0 }            }, {//180                { 0, 1, 1, 0 },                { 1, 1, 0, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//270                { 1, 0, 0, 0 },                { 1, 1, 0, 0 },                { 0, 1, 0, 0 },                { 0, 0, 0, 0 }            }        },         {//Z形状            {//zoro                { 1, 1, 0, 0 },                { 0, 1, 1, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//90                { 0, 1, 0, 0 },                { 1, 1, 0, 0 },                { 1, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//180                { 1, 1, 0, 0 },                { 0, 1, 1, 0 },                { 0, 0, 0, 0 },                { 0, 0, 0, 0 }            }, {//270                { 0, 1, 0, 0 },                { 1, 1, 0, 0 },                { 1, 0, 0, 0 },                { 0, 0, 0, 0 }            }        }    };            //成员定义        /**     * 当前的形状     **/    private int shape;        /**     * 当前砖块的颜色     **/    public java.awt.Color color;        /**     * 当前砖块的起始坐标,该坐标是相对于     * BoarddInfo数组坐标     * 用于绘制砖块时,需要计算实际的XY位置     **/    public int X,Y;        /**     * 当前颜色的颜色索引,在Board的colors数组中定义的索引     * 该索引值对应的颜色应当和Color一致。     **/    public int color_index;        /**     * 当前的角度     **/    private int angle;        // 成员函数        /**     *     * 构造函数,创建一个砖块形状对象     * <p>     * @param shape 砖块的形状,其值应当为0-MAX_SHAPE_NUM-1,     * 如果其超过MAX_SHAPE_NUM,则取其与MAX_SHAPE_NUM的余数     * <p>     * @param angle 砖块当前旋转角度,范围为0-3,如果其超过3,则取其3的余数     * <p>     * @param color     */    public Brick3D(int shape, int angle, java.awt.Color color) {        this.shape = shape % MAX_SHAPE_NUM;        this.color = color;        this.angle = angle % 4;        X = -1;        Y = -1;    }        /**     * 重新设置各个参数     */    public void reset(int shape, int angle, java.awt.Color color) {        this.shape = shape % MAX_SHAPE_NUM;        this.color = color;        this.angle = angle % 4;    }        /**     * 返回向前砖块的信息矩阵     * @return 砖块的信息矩阵     */    public int[][] getShapeInfo() {        return BRICK_INFO[shape][angle];    }        /**     * 返回当前的角度     * @return 当前的角度值,范围为0-3     */    public int getAngle() {        return angle % 4;    }        /**     * 返回当前的形状     * @return 当前的形状     */    public int getShape() {        return shape;    }        /**     * 按照指定的角度旋转砖块     * @param angle 旋转的角度,其定义只能为下列值,否则将不执行     *     */    public void rotate(int angle) {        if ((angle>=ROTATION_0)&&(angle<=ROTATION_270)) {            this.angle+=angle;            this.angle %= 4;        }    }        /**     * 在指定的Grahpics对象上绘制砖块     * <p>     * @param g Graphics对象,砖块要画在其上     * @param startX 砖块相对于Graphics的起始位置X坐标     * @param startY 砖块相对于Graphics的起始位置X坐标     */    public void paint(java.awt.Graphics g, int startX, int startY) {        g.setColor(color);        for (int i=0;i<4;i++) {            for(int j=0;j<4;j++) {                if (BRICK_INFO[shape][angle][i][j] == 1) {                    g.fill3DRect(startX + j*CELL_WIDTH,                                    startY + i*CELL_HEIGHT,                                    CELL_WIDTH,                                   CELL_HEIGHT,                                    true);                                    }            }        }    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -