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

📄 cubemap.java

📁 wince 5.0上基于personal java写的的虚拟魔方
💻 JAVA
字号:

/*
 * Java Virtual Cube
 * -----------------
 *
 * Copyright 1996, Song Li  
 * URL: http://www.cs.umbc.edu/~sli2
 *
 * 
 * You can use the code for any nonprofittable use. But remember to mention
 * the authors' names in your revised program. You are also encouraged to
 * improve the program or give your comments and bug reports. If there are
 * further questions, please contact me and I'll be glad to help. My E-Mail
 * address is: sli2@gl.umbc.edu.
 *
 */



import java.awt.Color ;



class CubeMap {

    Color ColorMap [] [] [] = new Color [6] [3] [3] ;
    
    
    final static int XPlane = 0 ;
    final static int YPlane = 1 ;
    final static int ZPlane = 2 ;
    
/*
    Note from S.L.: Some lawyers who claimed to represent the "Rubik's
    Cube" trademark owner came to me with a request of changing my
    standard color scheme, which, they said, may cause confusions on
    trademark issues. I don't quite understand what's behind this but
    (as you could imagine) I'd avoid any legal troubles if I could.
    So here I'm about to adopt a not-so-good color scheme. I apologize
    for any inconvenience it may have brought to you.

                                                   - Song Li, 8/24/98

    private final Color ColorList [] = {
        Color.green,
        Color.red,
        Color.pink,
        Color.blue,
        Color.white,
        Color.yellow } ;
*/
    
    private final Color ColorList [] = {
        new Color (  0, 255, 255),   // cyan
        new Color (255, 128,   0),   // orange
        new Color (255, 128, 255),   // rosy
        new Color (128,   0, 255),   // purple
        new Color (255, 255, 255),   // white
        new Color (128,   0,   0)    // magenta
    };



    CubeMap () {
        Reset () ;
    }
    
    

    public void Reset () {
        for (int face=0; face<6; face++)
            for (int h=0; h<3; h++)
                for (int w=0; w<3; w++)
                    ColorMap [face] [h] [w] = ColorList [face] ;
    }

    
    private final int SpinMap [] [] = {
        {4, 2, 5, 3} ,
        {0, 4, 1, 5} ,
        {2, 0, 3, 1} } ;
    
    
    
    void Spin (int axis, int plane, boolean counterclock) {
        if (counterclock)
            SpinCounterclock (axis, plane) ;
        else 
            SpinClock (axis, plane) ;
    }
    
    
/*    
    private void SpinCounterclock (int axis, int plane) {
        Color color0 = ColorMap [SpinMap[axis][0]] [0] [plane] ;
        Color color1 = ColorMap [SpinMap[axis][0]] [1] [plane] ;
        Color color2 = ColorMap [SpinMap[axis][0]] [2] [plane] ;
        
        ColorMap [SpinMap[axis][0]] [0] [plane] = ColorMap [SpinMap[axis][1]] [plane] [2];
        ColorMap [SpinMap[axis][0]] [1] [plane] = ColorMap [SpinMap[axis][1]] [plane] [1];
        ColorMap [SpinMap[axis][0]] [2] [plane] = ColorMap [SpinMap[axis][1]] [plane] [0];

        ColorMap [SpinMap[axis][1]] [plane] [0] = ColorMap [SpinMap[axis][2]] [0] [plane];
        ColorMap [SpinMap[axis][1]] [plane] [1] = ColorMap [SpinMap[axis][2]] [1] [plane];
        ColorMap [SpinMap[axis][1]] [plane] [2] = ColorMap [SpinMap[axis][2]] [2] [plane];

        ColorMap [SpinMap[axis][2]] [0] [plane] = ColorMap [SpinMap[axis][3]] [plane] [2];
        ColorMap [SpinMap[axis][2]] [1] [plane] = ColorMap [SpinMap[axis][3]] [plane] [1];
        ColorMap [SpinMap[axis][2]] [2] [plane] = ColorMap [SpinMap[axis][3]] [plane] [0];

        ColorMap [SpinMap[axis][3]] [plane] [0] = color0 ;
        ColorMap [SpinMap[axis][3]] [plane] [1] = color1 ;
        ColorMap [SpinMap[axis][3]] [plane] [2] = color2 ;

        
        if (plane == 1)
            return ;
        
        int face = (plane==0) ? axis*2 : axis*2+1 ;
        
        Color tempcolor  = ColorMap [face][0][0] ;
        ColorMap [face][0][0] = ColorMap [face][2][0] ;
        ColorMap [face][2][0] = ColorMap [face][2][2] ;
        ColorMap [face][2][2] = ColorMap [face][0][2] ;
        ColorMap [face][0][2] = tempcolor ;
        
        tempcolor = ColorMap [face][0][1] ;
        ColorMap [face][0][1] = ColorMap [face][1][0] ;
        ColorMap [face][1][0] = ColorMap [face][2][1] ;
        ColorMap [face][2][1] = ColorMap [face][1][2] ;
        ColorMap [face][1][2] = tempcolor ;
    }        







    private void SpinClock (int axis, int plane) {
        Color color0 = ColorMap [SpinMap[axis][0]] [0] [plane] ;
        Color color1 = ColorMap [SpinMap[axis][0]] [1] [plane] ;
        Color color2 = ColorMap [SpinMap[axis][0]] [2] [plane] ;
        
        ColorMap [SpinMap[axis][0]] [0] [plane] = ColorMap [SpinMap[axis][3]] [plane] [0];
        ColorMap [SpinMap[axis][0]] [1] [plane] = ColorMap [SpinMap[axis][3]] [plane] [1];
        ColorMap [SpinMap[axis][0]] [2] [plane] = ColorMap [SpinMap[axis][3]] [plane] [2];

        ColorMap [SpinMap[axis][3]] [plane] [0] = ColorMap [SpinMap[axis][2]] [2] [plane];
        ColorMap [SpinMap[axis][3]] [plane] [1] = ColorMap [SpinMap[axis][2]] [1] [plane];
        ColorMap [SpinMap[axis][3]] [plane] [2] = ColorMap [SpinMap[axis][2]] [0] [plane];

        ColorMap [SpinMap[axis][2]] [0] [plane] = ColorMap [SpinMap[axis][1]] [plane] [0];
        ColorMap [SpinMap[axis][2]] [1] [plane] = ColorMap [SpinMap[axis][1]] [plane] [1];
        ColorMap [SpinMap[axis][2]] [2] [plane] = ColorMap [SpinMap[axis][1]] [plane] [2];

        ColorMap [SpinMap[axis][1]] [plane] [0] = color2 ;
        ColorMap [SpinMap[axis][1]] [plane] [1] = color1 ;
        ColorMap [SpinMap[axis][1]] [plane] [2] = color0 ;

        
        if (plane == 1)
            return ;
        
        int face = (plane==0) ? axis*2 : axis*2+1 ;
        
        Color tempcolor  = ColorMap [face][0][0] ;
        ColorMap [face][0][0] = ColorMap [face][0][2] ;
        ColorMap [face][0][2] = ColorMap [face][2][2] ;
        ColorMap [face][2][2] = ColorMap [face][2][0] ;
        ColorMap [face][2][0] = tempcolor ;
        
        tempcolor = ColorMap [face][0][1] ;
        ColorMap [face][0][1] = ColorMap [face][1][2] ;
        ColorMap [face][1][2] = ColorMap [face][2][1] ;
        ColorMap [face][2][1] = ColorMap [face][1][0] ;
        ColorMap [face][1][0] = tempcolor ;
    }
*/



    private void SpinFace (int axis, int plane, boolean clockwise) {
        if (plane == 1)
            return ;
        int face = (plane==0) ? axis*2 : axis*2+1 ;
        boolean flag = (face == 1) || (face == 3) || (face == 5);
        if (clockwise)
            flag = ! flag;
        
        if (flag) {
            Color tempcolor  = ColorMap [face][0][0] ;
            ColorMap [face][0][0] = ColorMap [face][2][0] ;
            ColorMap [face][2][0] = ColorMap [face][2][2] ;
            ColorMap [face][2][2] = ColorMap [face][0][2] ;
            ColorMap [face][0][2] = tempcolor ;
        
            tempcolor = ColorMap [face][0][1] ;
            ColorMap [face][0][1] = ColorMap [face][1][0] ;
            ColorMap [face][1][0] = ColorMap [face][2][1] ;
            ColorMap [face][2][1] = ColorMap [face][1][2] ;
            ColorMap [face][1][2] = tempcolor ;
            }
        else {
            Color tempcolor  = ColorMap [face][0][0] ;
            ColorMap [face][0][0] = ColorMap [face][0][2] ;
            ColorMap [face][0][2] = ColorMap [face][2][2] ;
            ColorMap [face][2][2] = ColorMap [face][2][0] ;
            ColorMap [face][2][0] = tempcolor ;
        
            tempcolor = ColorMap [face][0][1] ;
            ColorMap [face][0][1] = ColorMap [face][1][2] ;
            ColorMap [face][1][2] = ColorMap [face][2][1] ;
            ColorMap [face][2][1] = ColorMap [face][1][0] ;
            ColorMap [face][1][0] = tempcolor ;
            }
    }




    private void SpinCounterclock (int axis, int plane) {
        Color color0 = ColorMap [SpinMap[axis][0]] [plane] [0];
        Color color1 = ColorMap [SpinMap[axis][0]] [plane] [1];
        Color color2 = ColorMap [SpinMap[axis][0]] [plane] [2];
        
        ColorMap [SpinMap[axis][0]] [plane] [0] = ColorMap [SpinMap[axis][1]] [2] [plane];
        ColorMap [SpinMap[axis][0]] [plane] [1] = ColorMap [SpinMap[axis][1]] [1] [plane];
        ColorMap [SpinMap[axis][0]] [plane] [2] = ColorMap [SpinMap[axis][1]] [0] [plane];

        ColorMap [SpinMap[axis][1]] [0] [plane] = ColorMap [SpinMap[axis][2]] [0] [plane];
        ColorMap [SpinMap[axis][1]] [1] [plane] = ColorMap [SpinMap[axis][2]] [1] [plane];
        ColorMap [SpinMap[axis][1]] [2] [plane] = ColorMap [SpinMap[axis][2]] [2] [plane];

        ColorMap [SpinMap[axis][2]] [0] [plane] = ColorMap [SpinMap[axis][3]] [plane] [2];
        ColorMap [SpinMap[axis][2]] [1] [plane] = ColorMap [SpinMap[axis][3]] [plane] [1];
        ColorMap [SpinMap[axis][2]] [2] [plane] = ColorMap [SpinMap[axis][3]] [plane] [0];

        ColorMap [SpinMap[axis][3]] [plane] [0] = color0 ;
        ColorMap [SpinMap[axis][3]] [plane] [1] = color1 ;
        ColorMap [SpinMap[axis][3]] [plane] [2] = color2 ;

        SpinFace (axis, plane, false);
    }        



    private void SpinClock (int axis, int plane) {
        Color color0 = ColorMap [SpinMap[axis][0]] [plane] [0];
        Color color1 = ColorMap [SpinMap[axis][0]] [plane] [1];
        Color color2 = ColorMap [SpinMap[axis][0]] [plane] [2];
        
        ColorMap [SpinMap[axis][0]] [plane] [0] = ColorMap [SpinMap[axis][3]] [plane] [0];
        ColorMap [SpinMap[axis][0]] [plane] [1] = ColorMap [SpinMap[axis][3]] [plane] [1];
        ColorMap [SpinMap[axis][0]] [plane] [2] = ColorMap [SpinMap[axis][3]] [plane] [2];

        ColorMap [SpinMap[axis][3]] [plane] [0] = ColorMap [SpinMap[axis][2]] [2] [plane];
        ColorMap [SpinMap[axis][3]] [plane] [1] = ColorMap [SpinMap[axis][2]] [1] [plane];
        ColorMap [SpinMap[axis][3]] [plane] [2] = ColorMap [SpinMap[axis][2]] [0] [plane];

        ColorMap [SpinMap[axis][2]] [0] [plane] = ColorMap [SpinMap[axis][1]] [0] [plane];
        ColorMap [SpinMap[axis][2]] [1] [plane] = ColorMap [SpinMap[axis][1]] [1] [plane];
        ColorMap [SpinMap[axis][2]] [2] [plane] = ColorMap [SpinMap[axis][1]] [2] [plane];

        ColorMap [SpinMap[axis][1]] [0] [plane] = color2 ;
        ColorMap [SpinMap[axis][1]] [1] [plane] = color1 ;
        ColorMap [SpinMap[axis][1]] [2] [plane] = color0 ;

        SpinFace (axis, plane, true);        
    }
}

⌨️ 快捷键说明

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