📄 cubemap.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 + -