├── 2048
├── .classpath
├── .idea
│ ├── artifacts
│ │ └── 2048_jar.xml
│ ├── misc.xml
│ ├── modules.xml
│ └── workspace.xml
├── .project
├── 2048.iml
├── README.md
├── out
│ └── production
│ │ └── 2048
│ │ ├── META-INF
│ │ └── MANIFEST.MF
│ │ └── com
│ │ └── game
│ │ ├── Block.class
│ │ ├── My2048.class
│ │ ├── Operation$1.class
│ │ ├── Operation$2.class
│ │ └── Operation.class
└── src
│ ├── META-INF
│ └── MANIFEST.MF
│ └── com
│ └── game
│ ├── Block.java
│ ├── My2048.java
│ └── Operation.java
├── .gitignore
├── MagicCube
├── .classpath
├── .idea
│ ├── encodings.xml
│ ├── misc.xml
│ ├── modules.xml
│ └── workspace.xml
├── .project
├── MagicCube.iml
├── out
│ └── production
│ │ └── MagicCube
│ │ ├── Canvas_Cube$1.class
│ │ ├── Canvas_Cube$2.class
│ │ ├── Canvas_Cube$3.class
│ │ ├── Canvas_Cube$4.class
│ │ ├── Canvas_Cube$5.class
│ │ ├── Canvas_Cube$6.class
│ │ ├── Canvas_Cube$MyMouseListner.class
│ │ ├── Canvas_Cube$MyMouseMotionListner.class
│ │ ├── Canvas_Cube.class
│ │ ├── CenterBlock.class
│ │ ├── CornerBlock.class
│ │ ├── EdgeBlock.class
│ │ ├── MainFrame$MyKeyListenner.class
│ │ ├── MainFrame.class
│ │ ├── Square.class
│ │ └── math3D
│ │ ├── Point3D.class
│ │ └── VTs.class
└── src
│ ├── Canvas_Cube.java
│ ├── CenterBlock.java
│ ├── CornerBlock.java
│ ├── EdgeBlock.java
│ ├── MainFrame.java
│ ├── Square.java
│ └── math3D
│ ├── Point3D.java
│ ├── VTs.java
│ ├── normal_hidden.class
│ ├── project3D_To_2D.class
│ ├── rotate_calculator.class
│ └── view_To_screen_coordinates.class
├── README.md
└── 表白二维码
├── .idea
├── encodings.xml
├── misc.xml
├── modules.xml
└── workspace.xml
├── TT.jpg
├── out
└── production
│ └── 表白二维码
│ ├── day20200305
│ └── Code01.class
│ └── lib
│ └── core-3.3.3.jar
├── src
├── day20200305
│ └── Code01.java
└── lib
│ └── core-3.3.3.jar
└── 表白二维码.iml
/.gitignore:
--------------------------------------------------------------------------------
1 | # Build and Release Folders
2 | bin-debug/
3 | bin-release/
4 | [Oo]bj/
5 | [Bb]in/
6 |
7 | # Other files and folders
8 | .settings/
9 |
10 | # Executables
11 | *.swf
12 | *.air
13 | *.ipa
14 | *.apk
15 |
16 | # Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
17 | # should NOT be excluded as they contain compiler settings and other important
18 | # information for Eclipse / Flash Builder.
19 |
--------------------------------------------------------------------------------
/2048/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/2048/.idea/artifacts/2048_jar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | $PROJECT_DIR$/out/artifacts/2048_jar
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/2048/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/2048/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/2048/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | 1583826705654
49 |
50 |
51 | 1583826705654
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/2048/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | 2048
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.jdt.core.javanature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/2048/2048.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/2048/README.md:
--------------------------------------------------------------------------------
1 | # 游戏规则
2 | 2048游戏共有16个格子,初始时会有两个格子上安放了两个数字2,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方随即出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出“2048”这个数字方块
3 |
4 | 1、上下左右滑动,相同数字合并为更高级数字;
5 |
6 | 2、滑动格子会在随机位置,出现随机的数字2和数字4;
7 |
8 | 3、游戏胜利:合并数字出现2048即为成功;
9 |
10 | 4、游戏结束:游戏界面被数字填满不能再滑动;
11 |
12 | 5、游戏总分数:游戏过程中的数字相加总和,分数越高排名越高。
13 |
14 | # 详细攻略:
15 | 1、尽量把拼合出来的较大数字保持在一个角落里,一般放在右下角;
16 |
17 | 2、尽量先将最大数字排列在最边侧,一般都放在最下方;
18 |
19 | 3、被加数字移动要少,避免出现被随机小数插入的情况;
20 |
21 | 4、最底部一行尽量保持满格状态;
22 |
23 | 5、倒数第二行尽量保持非满格状态,方便移动;
24 |
25 | 6、最底部一行保持由小到大递增的排列顺序;
26 |
27 | 7、倒数第二行保持由大到小递增的排列顺序,尽量不要出现32以上的大数字。
28 |
--------------------------------------------------------------------------------
/2048/out/production/2048/META-INF/MANIFEST.MF:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 | Main-Class: com.game.My2048
3 |
4 |
--------------------------------------------------------------------------------
/2048/out/production/2048/com/game/Block.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/2048/out/production/2048/com/game/Block.class
--------------------------------------------------------------------------------
/2048/out/production/2048/com/game/My2048.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/2048/out/production/2048/com/game/My2048.class
--------------------------------------------------------------------------------
/2048/out/production/2048/com/game/Operation$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/2048/out/production/2048/com/game/Operation$1.class
--------------------------------------------------------------------------------
/2048/out/production/2048/com/game/Operation$2.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/2048/out/production/2048/com/game/Operation$2.class
--------------------------------------------------------------------------------
/2048/out/production/2048/com/game/Operation.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/2048/out/production/2048/com/game/Operation.class
--------------------------------------------------------------------------------
/2048/src/META-INF/MANIFEST.MF:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 | Main-Class: com.game.My2048
3 |
4 |
--------------------------------------------------------------------------------
/2048/src/com/game/Block.java:
--------------------------------------------------------------------------------
1 | package com.game;
2 |
3 | import javax.swing.*;
4 | import java.awt.*;
5 | public class Block extends JLabel
6 | {
7 | private int value;
8 | public Block()
9 | {
10 | value = 0;//初始化值为0
11 | setFont(new Font("font", Font.PLAIN, 40));//设定字体
12 | setBackground(Color.gray);//设定初始颜色为灰色
13 | }
14 |
15 | public int getValue()//获取值
16 | {
17 | return value;
18 | }
19 |
20 | public void setValue(int value)
21 | {
22 | this.value = value;
23 | String text = String.valueOf(value);
24 | if (value != 0)
25 | setText(text);
26 | else
27 | setText("");//如果值为0则不显示
28 | setColor();
29 | }
30 |
31 | public void setColor() //根据值的不同设定不同的背景颜色、label字体
32 | {
33 | switch (value)
34 | {
35 | case 0:
36 | setBackground(Color.gray);
37 | break;
38 | case 2:
39 | setBackground(new Color(238, 228, 218));
40 | break;
41 | case 4:
42 | setBackground(new Color(238, 224, 198));
43 | break;
44 | case 8:
45 | setBackground(new Color(243, 177, 116));
46 | break;
47 | case 16:
48 | setBackground(new Color(243, 177, 116));
49 | break;
50 | case 32:
51 | setBackground(new Color(248, 149, 90));
52 | break;
53 | case 64:
54 | setBackground(new Color(249, 94, 50));
55 | break;
56 | case 128:
57 | setBackground(new Color(239, 207, 108));
58 | break;
59 | case 256:
60 | setBackground(new Color(239, 207, 99));
61 | break;
62 | case 512:
63 | setBackground(new Color(239, 203, 82));
64 | break;
65 | case 1024:
66 | setBackground(new Color(239, 199, 57));
67 | break;
68 | case 2048:
69 | setBackground(new Color(239, 195, 41));
70 | break;
71 | case 4096:
72 | setBackground(new Color(255, 60, 57));
73 | break;
74 | }
75 | }
76 | }
--------------------------------------------------------------------------------
/2048/src/com/game/My2048.java:
--------------------------------------------------------------------------------
1 | package com.game;
2 |
3 | import java.awt.*;
4 | import javax.swing.*;
5 | public class My2048 extends JFrame
6 | {
7 | public My2048()//构造函数
8 | {
9 | setTitle("2048");//设置标题
10 | setSize(400, 400);//设定窗口大小
11 | setLocation(500, 200);//设定窗口起始位置
12 | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
13 | getContentPane().setLayout(new GridLayout(4, 4, 5, 5));//设定布局方式为GridLayout型
14 | new Operation(this);
15 | this.setVisible(true);//设为可视
16 |
17 | public static void main(String args[]) //程序入口点
18 | {
19 | try
20 | {
21 | UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel");//设定UI
22 | } //接受抛出的异常
23 | catch (ClassNotFoundException | InstantiationException| IllegalAccessException | UnsupportedLookAndFeelException e)
24 | {
25 | e.printStackTrace();
26 | }
27 | JFrame.setDefaultLookAndFeelDecorated(true);//设定Frame的缺省外观
28 | new My2048();
29 | }
30 |
31 | }
--------------------------------------------------------------------------------
/2048/src/com/game/Operation.java:
--------------------------------------------------------------------------------
1 | package com.game;
2 |
3 | import java.awt.event.*;
4 | import javax.swing.*;
5 | public class Operation implements KeyListener
6 | {
7 | Block[] block;//用于储存16个数据
8 | JPanel panel;
9 | public boolean up,down,left,right;
10 | int moveFlag;//用于累计移动的次数
11 | boolean numFlag;//用于判断是否还能加入新的数字
12 | public Operation(JFrame frame)
13 | {
14 | this.panel = (JPanel)frame.getContentPane();//构造出panel
15 | block = new Block[16];//构造出长度为16的数组
16 | numFlag = true;//初始化
17 | moveFlag = 0;
18 | up=true;down=true;left=true;right=true;
19 | addBlock();
20 | for (int i = 0; i < 2; i++)
21 | appearBlock();
22 | frame.addKeyListener(this);
23 | }
24 |
25 | private void addBlock()
26 | {
27 | for (int i = 0; i < 16; i++) //往panel里加入block
28 | {
29 | block[i] = new Block();
30 | block[i].setHorizontalAlignment(JLabel.CENTER);// 不透明的标签
31 | block[i].setOpaque(true);
32 | panel.add(block[i]);
33 | }
34 | }
35 | public void appearBlock()
36 | {
37 | while (numFlag) //当还能加入随机的一个新的值得时候
38 | int index = (int) (Math.random() * 16);//取一个0到15的随机整数,这个数作为随机加入盘中的2或4的位置
39 | if (block[index].getValue() == 0)//如果这个数所在的block数组中值为0,即在为空的时候,加入一个2或4的数字
40 | {
41 | if (Math.random() < 0.5)
42 | {
43 | block[index].setValue(2);
44 | }
45 | else
46 | {
47 | block[index].setValue(4);
48 | }
49 | break;//跳出while
50 | }
51 | }
52 | }
53 |
54 | public void judgeAppear() //统计block数组中是否含有值为0的元素,若没有,则numFlag变为false
55 | {
56 | int sum = 0;
57 | for (int i = 0; i < 16; i++)
58 | {
59 | if (block[i].getValue() != 0)
60 | {
61 | sum++;
62 | }
63 | }
64 | if (sum == 16)
65 | numFlag = false;
66 |
67 | }
68 |
69 | public int Find(int i,int j,int a,int b)
70 | {
71 | while(i=a)
72 | {
73 | if(block[i].getValue()!=0)
74 | {
75 | return i;
76 | }
77 | i=i+j;
78 | }
79 | return -1;
80 | }
81 | public void upBlock()
82 | {
83 | int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0;
84 | for(i=0;i<4;i++)
85 | {
86 | index=i;
87 | for(j=i+4;j<16;j+=4)
88 | {
89 | valueJ=0; valueI=0;
90 | if(block[index].getValue()==0)
91 | {
92 | t=Find(index,4,0,16);
93 | if(t!=-1)
94 | {
95 | block[index].setValue(block[t].getValue());
96 | block[t].setValue(0);
97 | }
98 | else
99 | {
100 | break;
101 | }
102 | }
103 | valueI=block[index].getValue();
104 | if(block[j].getValue()==0)
105 | {
106 | t=Find(j,4,0,16);
107 | if(t!=-1)
108 | {
109 | block[j].setValue(block[t].getValue());
110 | block[t].setValue(0);
111 | }
112 | else
113 | {
114 | break;
115 | }
116 | }
117 | valueJ=block[j].getValue();
118 | if(valueI==valueJ&&valueI!=0&&valueJ!=0)
119 | {
120 | block[index].setValue(valueI+valueJ);
121 | block[j].setValue(0);
122 | numFlag = true;
123 | }
124 | index=j;
125 | }
126 |
127 | }
128 | }
129 | public void downBlock() {
130 |
131 | int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0;
132 | for(i=12;i<16;i++)
133 | {
134 | index=i;
135 | for(j=i-4;j>=0;j-=4)
136 | {
137 | valueJ=0; valueI=0;
138 | if(block[index].getValue()==0)
139 | {
140 | t=Find(index,-4,0,16);
141 | if(t!=-1)
142 | {
143 | block[index].setValue(block[t].getValue());
144 | block[t].setValue(0);
145 | }
146 | else
147 | {
148 | break;
149 | }
150 | }
151 | valueI=block[index].getValue();
152 | if(block[j].getValue()==0)
153 | {
154 | t=Find(j,-4,0,16);
155 | if(t!=-1)
156 | {
157 | block[j].setValue(block[t].getValue());
158 | block[t].setValue(0);
159 | }
160 | else
161 | {
162 | break;
163 | }
164 | }
165 | valueJ=block[j].getValue();
166 | if(valueI==valueJ&&valueI!=0&&valueJ!=0)
167 | {
168 | block[index].setValue(valueI+valueJ);
169 | block[j].setValue(0);
170 | numFlag = true;
171 | }
172 | index=j;
173 | }
174 |
175 | }
176 | }
177 | public void rightBlock()
178 | {
179 | int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0;
180 | for(i=3;i<16;i+=4)
181 | {
182 | index=i;
183 | for(j=i-1;j>i-4;j--)
184 | {
185 | valueJ=0; valueI=0;
186 | if(block[index].getValue()==0)
187 | {
188 | t=Find(index,-1,i-3,index+1);
189 | if(t!=-1)
190 | {
191 | block[index].setValue(block[t].getValue());
192 | block[t].setValue(0);
193 | }
194 | else
195 | {
196 | break;
197 | }
198 | }
199 | valueI=block[index].getValue();
200 | if(block[j].getValue()==0)
201 | {
202 | t=Find(j,-1,i-3,j+1);
203 | if(t!=-1)
204 | {
205 | block[j].setValue(block[t].getValue());
206 | block[t].setValue(0);
207 | }
208 | else
209 | {
210 | break;
211 | }
212 | }
213 | valueJ=block[j].getValue();
214 | if(valueI==valueJ&&valueI!=0&&valueJ!=0)
215 | {
216 | block[index].setValue(valueI+valueJ);
217 | block[j].setValue(0);
218 | numFlag = true;
219 | }
220 | index=j;
221 | }
222 |
223 | }
224 | }
225 | public void leftBlock()
226 | {
227 | int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0;
228 | for(i=0;i<16;i+=4)
229 | {
230 | index=i;
231 | for(j=i+1;j
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/MagicCube/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/MagicCube/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/MagicCube/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/MagicCube/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | 1582379507203
54 |
55 |
56 | 1582379507203
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/MagicCube/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | MagicCube
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.jdt.core.javanature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/MagicCube/MagicCube.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Canvas_Cube$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Canvas_Cube$1.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Canvas_Cube$2.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Canvas_Cube$2.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Canvas_Cube$3.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Canvas_Cube$3.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Canvas_Cube$4.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Canvas_Cube$4.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Canvas_Cube$5.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Canvas_Cube$5.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Canvas_Cube$6.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Canvas_Cube$6.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Canvas_Cube$MyMouseListner.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Canvas_Cube$MyMouseListner.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Canvas_Cube$MyMouseMotionListner.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Canvas_Cube$MyMouseMotionListner.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Canvas_Cube.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Canvas_Cube.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/CenterBlock.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/CenterBlock.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/CornerBlock.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/CornerBlock.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/EdgeBlock.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/EdgeBlock.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/MainFrame$MyKeyListenner.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/MainFrame$MyKeyListenner.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/MainFrame.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/MainFrame.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/Square.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/Square.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/math3D/Point3D.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/math3D/Point3D.class
--------------------------------------------------------------------------------
/MagicCube/out/production/MagicCube/math3D/VTs.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/out/production/MagicCube/math3D/VTs.class
--------------------------------------------------------------------------------
/MagicCube/src/Canvas_Cube.java:
--------------------------------------------------------------------------------
1 | import java.awt.Color;
2 | import java.awt.Graphics;
3 | import java.awt.Graphics2D;
4 | import java.awt.Image;
5 | import java.awt.Point;
6 | import java.awt.Polygon;
7 | import java.awt.event.MouseAdapter;
8 | import java.awt.event.MouseEvent;
9 | import java.awt.event.MouseMotionAdapter;
10 |
11 | import javax.swing.JPanel;
12 |
13 | import math3D.Point3D;
14 | import math3D.VTs;
15 |
16 | public class Canvas_Cube extends JPanel{
17 |
18 |
19 | private static final long serialVersionUID = 1L;
20 |
21 | private final int VIEWERROR=1000;
22 | private boolean rotating=false;
23 |
24 | public boolean isRotating() {
25 | return rotating;
26 | }
27 |
28 | public void setRotating(boolean rotating) {
29 | this.rotating = rotating;
30 | }
31 |
32 | private Polygon backPolygon=new Polygon();
33 |
34 | public final String BLUE="blue";public final String RED="red";
35 | public final String GREEN="green";public final String ORANGE="orange";
36 | public final String YELLOW="yellow";public final String WHITE="white";
37 | public String selected=null;
38 |
39 | private final Color colorOrange=new Color(255,100,0);
40 | private final Color colorYellow=new Color(255,255,100);
41 | //魔方的8个顶点
42 | private Point3D a=new Point3D(-120, 120, 120);
43 | private Point3D b=new Point3D(-120, 120, -120);
44 | private Point3D c=new Point3D(120, 120, -120);
45 | private Point3D d=new Point3D(120, 120, 120);
46 | private Point3D e=new Point3D(-120, -120, 120);
47 | private Point3D f=new Point3D(-120, -120, -120);
48 | private Point3D g=new Point3D(120, -120, -120);
49 | private Point3D h=new Point3D(120, -120, 120);
50 |
51 | //各个楞上的点
52 | private Point3D ad=new Point3D(-40, 120, 120);
53 | private Point3D da=new Point3D(40, 120, 120);
54 | private Point3D dh=new Point3D(120, 40, 120);
55 | private Point3D hd=new Point3D(120, -40, 120);
56 | private Point3D he=new Point3D(40, -120, 120);
57 | private Point3D eh=new Point3D(-40, -120, 120);
58 | private Point3D ea=new Point3D(-120, -40, 120);
59 | private Point3D ae=new Point3D(-120, 40, 120);
60 |
61 | private Point3D bc=new Point3D(-40, 120, -120);
62 | private Point3D cb=new Point3D(40, 120, -120);
63 | private Point3D cg=new Point3D(120, 40, -120);
64 | private Point3D gc=new Point3D(120, -40, -120);
65 | private Point3D gf=new Point3D(40, -120, -120);
66 | private Point3D fg=new Point3D(-40, -120, -120);
67 | private Point3D fb=new Point3D(-120, -40, -120);
68 | private Point3D bf=new Point3D(-120, 40, -120);
69 |
70 | private Point3D ab=new Point3D(-120, 120, 40);
71 | private Point3D ba=new Point3D(-120, 120, -40);
72 | private Point3D ef=new Point3D(-120, -120, 40);
73 | private Point3D fe=new Point3D(-120, -120, -40);
74 |
75 | private Point3D dc=new Point3D(120, 120, 40);
76 | private Point3D cd=new Point3D(120, 120, -40);
77 | private Point3D hg=new Point3D(120, -120, 40);
78 | private Point3D gh=new Point3D(120, -120, -40);
79 |
80 | //以下是各中心块顶点
81 | private Point3D yellow_a=new Point3D(-40, 120, 40);
82 | private Point3D yellow_b=new Point3D(-40, 120, -40);
83 | private Point3D yellow_c=new Point3D(40, 120, -40);
84 | private Point3D yellow_d=new Point3D(40, 120, 40);
85 |
86 | private Point3D white_e=new Point3D(-40, -120, 40);
87 | private Point3D white_f=new Point3D(-40, -120, -40);
88 | private Point3D white_g=new Point3D(40, -120, -40);
89 | private Point3D white_h=new Point3D(40, -120, 40);
90 |
91 | private Point3D orange_a=new Point3D(-120, 40, 40);
92 | private Point3D orange_b=new Point3D(-120, 40, -40);
93 | private Point3D orange_f=new Point3D(-120, -40, -40);
94 | private Point3D orange_e=new Point3D(-120, -40, 40);
95 |
96 | private Point3D red_d=new Point3D(120, 40, 40);
97 | private Point3D red_c=new Point3D(120, 40, -40);
98 | private Point3D red_g=new Point3D(120, -40, -40);
99 | private Point3D red_h=new Point3D(120, -40, 40);
100 |
101 | private Point3D blue_a=new Point3D(-40, 40, 120);
102 | private Point3D blue_d=new Point3D(40, 40, 120);
103 | private Point3D blue_h=new Point3D(40, -40, 120);
104 | private Point3D blue_e=new Point3D(-40, -40, 120);
105 |
106 | private Point3D green_b=new Point3D(-40, 40, -120);
107 | private Point3D green_c=new Point3D(40, 40, -120);
108 | private Point3D green_g=new Point3D(40, -40, -120);
109 | private Point3D green_f=new Point3D(-40, -40, -120);
110 |
111 | private CornerBlock cornerBlock_a=new CornerBlock(new Square(a.clone(), ae.clone(),
112 | blue_a.clone(), ad.clone(), Color.blue),
113 | new Square(a.clone(), ad.clone(),
114 | yellow_a.clone(), ab.clone(), colorYellow),
115 | new Square(a.clone(), ab.clone(),
116 | orange_a.clone(), ae.clone(), colorOrange));
117 | private CornerBlock cornerBlock_b=new CornerBlock(new Square(b.clone(), ba.clone(),
118 | yellow_b.clone(), bc.clone(), colorYellow),
119 | new Square(b.clone(), bf.clone(),
120 | orange_b.clone(), ba.clone(), colorOrange),
121 | new Square(b.clone(), bc.clone(),
122 | green_b.clone(), bf.clone(), Color.green));
123 | private CornerBlock cornerBlock_c=new CornerBlock(new Square(c.clone(), cb.clone(),
124 | yellow_c.clone(), cd.clone(), colorYellow),
125 | new Square(c.clone(), cd.clone(),
126 | red_c.clone(), cg.clone(), Color.red),
127 | new Square(c.clone(), cg.clone(),
128 | green_c.clone(), cb.clone(), Color.green));
129 | private CornerBlock cornerBlock_d=new CornerBlock(new Square(d.clone(), dc.clone(),
130 | yellow_d.clone(), da.clone(), colorYellow),
131 | new Square(d.clone(), dh.clone(),
132 | red_d.clone(), dc.clone(), Color.red),
133 | new Square(d.clone(), da.clone(),
134 | blue_d.clone(), dh.clone(), Color.blue));
135 | private CornerBlock cornerBlock_e=new CornerBlock(new Square(e.clone(), ef.clone(),
136 | white_e.clone(), eh.clone(), Color.white),
137 | new Square(e.clone(), ea.clone(),
138 | orange_e.clone(), ef.clone(), colorOrange),
139 | new Square(e.clone(), eh.clone(),
140 | blue_e.clone(), ea.clone(), Color.blue));
141 | private CornerBlock cornerBlock_f=new CornerBlock(new Square(f.clone(), fg.clone(),
142 | white_f.clone(), fe.clone(), Color.white),
143 | new Square(f.clone(), fe.clone(),
144 | orange_f.clone(), fb.clone(), colorOrange),
145 | new Square(f.clone(), fb.clone(),
146 | green_f.clone(), fg.clone(), Color.green));
147 | private CornerBlock cornerBlock_g=new CornerBlock(new Square(g.clone(), gh.clone(),
148 | white_g.clone(), gf.clone(), Color.white),
149 | new Square(g.clone(), gf.clone(),
150 | green_g.clone(), gc.clone(), Color.green),
151 | new Square(g.clone(), gc.clone(),
152 | red_g.clone(), gh.clone(), Color.red));
153 | private CornerBlock cornerBlock_h=new CornerBlock(new Square(h.clone(), he.clone(),
154 | white_h.clone(), hg.clone(), Color.white),
155 | new Square(h.clone(), hg.clone(),
156 | red_h.clone(), hd.clone(), Color.red),
157 | new Square(h.clone(), hd.clone(),
158 | blue_h.clone(), he.clone(), Color.blue));
159 |
160 | private EdgeBlock Blue_Yellow=new EdgeBlock(new Square(da.clone(), ad.clone(),
161 | blue_a.clone(), blue_d.clone(), Color.blue),
162 | new Square(ad.clone(), da.clone(),
163 | yellow_d.clone(), yellow_a.clone(), colorYellow));
164 | private EdgeBlock Yellow_Green=new EdgeBlock(new Square(cb.clone(), bc.clone(),
165 | yellow_b.clone(), yellow_c.clone(), colorYellow),
166 | new Square(bc.clone(), cb.clone(),
167 | green_c.clone(), green_b.clone(), Color.green));
168 | private EdgeBlock Green_White=new EdgeBlock(new Square(gf.clone(), fg.clone(),
169 | green_f.clone(), green_g.clone(), Color.green),
170 | new Square(fg.clone(), gf.clone(),
171 | white_g.clone(), white_f.clone(), Color.white));
172 | private EdgeBlock White_Blue=new EdgeBlock(new Square(he.clone(), eh.clone(),
173 | white_e.clone(), white_h.clone(), Color.white),
174 | new Square(eh.clone(), he.clone(),
175 | blue_h.clone(), blue_e.clone(), Color.blue));
176 | private EdgeBlock Yellow_Orange=new EdgeBlock(new Square(ba.clone(), ab.clone(),
177 | yellow_a.clone(), yellow_b.clone(), colorYellow),
178 | new Square(ab.clone(), ba.clone(),
179 | orange_b.clone(), orange_a.clone(), colorOrange));
180 | private EdgeBlock Yellow_Red=new EdgeBlock(new Square(dc.clone(), cd.clone(),
181 | yellow_c.clone(), yellow_d.clone(), colorYellow),
182 | new Square(cd.clone(), dc.clone(),
183 | red_d.clone(), red_c.clone(), Color.red));
184 | private EdgeBlock Red_White=new EdgeBlock(new Square(hg.clone(), gh.clone(),
185 | red_g.clone(), red_h.clone(), Color.red),
186 | new Square(gh.clone(), hg.clone(),
187 | white_h.clone(), white_g.clone(), Color.white));
188 | private EdgeBlock White_Orange=new EdgeBlock(new Square(ef.clone(), fe.clone(),
189 | white_f.clone(), white_e.clone(), Color.white),
190 | new Square(fe.clone(), ef.clone(),
191 | orange_e.clone(), orange_f.clone(), colorOrange));
192 | private EdgeBlock Orange_Blue=new EdgeBlock(new Square(ea.clone(), ae.clone(),
193 | orange_a.clone(), orange_e.clone(), colorOrange),
194 | new Square(ae.clone(), ea.clone(),
195 | blue_e.clone(), blue_a.clone(), Color.blue));
196 | private EdgeBlock Orange_Green=new EdgeBlock(new Square(bf.clone(), fb.clone(),
197 | orange_f.clone(), orange_b.clone(), colorOrange),
198 | new Square(fb.clone(), bf.clone(),
199 | green_b.clone(), green_f.clone(), Color.green));
200 | private EdgeBlock Red_Green=new EdgeBlock(new Square(gc.clone(), cg.clone(),
201 | red_c.clone(), red_g.clone(), Color.red),
202 | new Square(cg.clone(), gc.clone(),
203 | green_g.clone(), green_c.clone(), Color.green));
204 | private EdgeBlock Red_Blue=new EdgeBlock(new Square(dh.clone(), hd.clone(),
205 | red_h.clone(), red_d.clone(), Color.red),
206 | new Square(hd.clone(), dh.clone(),
207 | blue_d.clone(), blue_h.clone(), Color.blue));
208 |
209 | private CenterBlock blue=new CenterBlock(new Square(blue_a.clone(), blue_e.clone(), blue_h.clone(), blue_d.clone(), Color.blue));
210 | private CenterBlock red=new CenterBlock(new Square(red_g.clone(), red_c.clone(), red_d.clone(), red_h.clone(), Color.red));
211 | private CenterBlock green=new CenterBlock(new Square(green_b.clone(), green_c.clone(), green_g.clone(), green_f.clone(), Color.green));
212 | private CenterBlock orange=new CenterBlock(new Square(orange_a.clone(), orange_b.clone(), orange_f.clone(), orange_e.clone(), colorOrange));
213 | private CenterBlock yellow=new CenterBlock(new Square(yellow_a.clone(), yellow_d.clone(), yellow_c.clone(), yellow_b.clone(), colorYellow));
214 | private CenterBlock white=new CenterBlock(new Square(white_e.clone(), white_f.clone(), white_g.clone(), white_h.clone(), Color.white));
215 |
216 | Point oldPoint;
217 | double angleX,angleY;
218 |
219 | private Image offScreenImage;
220 |
221 | private CenterBlock[] centerBlocks={blue,red,green,orange,yellow,white};;
222 | private CornerBlock[] cornerBlocks={cornerBlock_a,cornerBlock_b,cornerBlock_c,cornerBlock_d,
223 | cornerBlock_e,cornerBlock_f,cornerBlock_g,cornerBlock_h};
224 | private EdgeBlock[] edgeBlocks={Blue_Yellow,Yellow_Green,Green_White,White_Blue,Yellow_Orange,Yellow_Red,
225 | Red_White,White_Orange,Orange_Blue,Orange_Green,Red_Green,Red_Blue};
226 | //给角块和棱块编号,存入block数组,block[0]不用
227 | private Object[] block=new Object[21];
228 | //block1用于存储旋转部分
229 | private Object[] block1=new Object[9];
230 | //block2用于存储未旋转部分
231 | private Object[] block2=new Object[17];
232 |
233 | public Canvas_Cube() {
234 | addMouseListener(new MyMouseListner());
235 | addMouseMotionListener(new MyMouseMotionListner());
236 | setBackground(Color.cyan);
237 |
238 | block[1]=cornerBlock_a;block[2]=Blue_Yellow;block[3]=cornerBlock_d;block[4]=Orange_Blue;
239 | block[5]=Red_Blue;block[6]=cornerBlock_e;block[7]=White_Blue;block[8]=cornerBlock_h;
240 | block[9]=Yellow_Orange;block[10]=Yellow_Red;block[11]=White_Orange;block[12]=Red_White;
241 | block[13]=cornerBlock_b;block[14]=Yellow_Green;block[15]=cornerBlock_c;block[16]=Orange_Green;
242 | block[17]=Red_Green;block[18]=cornerBlock_f;block[19]=Green_White;block[20]=cornerBlock_g;
243 | }
244 |
245 | /**
246 | * 蓝面旋转90度
247 | * @param clockWise:ture为顺时针;false为逆时针
248 | */
249 | public void rotateBlue90(final Boolean clockWise){
250 | new Thread(new Runnable() {
251 | int count=0;
252 | @Override
253 | public void run() {
254 | setRotating(true);
255 | while (isRotating()) {
256 | CornerBlock tempCornerBlock=(CornerBlock) block[1];
257 | tempCornerBlock.rotate(blue.getCenterPoint(), Math.PI/90, clockWise);
258 | tempCornerBlock=(CornerBlock) block[3];
259 | tempCornerBlock.rotate(blue.getCenterPoint(), Math.PI/90, clockWise);
260 | tempCornerBlock=(CornerBlock) block[6];
261 | tempCornerBlock.rotate(blue.getCenterPoint(), Math.PI/90, clockWise);
262 | tempCornerBlock=(CornerBlock) block[8];
263 | tempCornerBlock.rotate(blue.getCenterPoint(), Math.PI/90, clockWise);
264 |
265 | EdgeBlock tempEdgeBlock=(EdgeBlock) block[2];
266 | tempEdgeBlock.rotate(blue.getCenterPoint(), Math.PI/90, clockWise);
267 | tempEdgeBlock=(EdgeBlock) block[4];
268 | tempEdgeBlock.rotate(blue.getCenterPoint(), Math.PI/90, clockWise);
269 | tempEdgeBlock=(EdgeBlock) block[5];
270 | tempEdgeBlock.rotate(blue.getCenterPoint(), Math.PI/90, clockWise);
271 | tempEdgeBlock=(EdgeBlock) block[7];
272 | tempEdgeBlock.rotate(blue.getCenterPoint(), Math.PI/90, clockWise);
273 |
274 | blue.rotate(blue.getCenterPoint(), Math.PI/90, clockWise);
275 | if (blue.getSquare().getHidden()=45) {
281 | setRotating(false);
282 | }
283 | }
284 | try{Thread.sleep(10);}
285 | catch(InterruptedException e) {;}
286 | }
287 | }).start();
288 | if (clockWise) {
289 | Object temp=block[1];
290 | block[1]=block[6];block[6]=block[8];block[8]=block[3];block[3]=temp;
291 | temp=block[2];
292 | block[2]=block[4];block[4]=block[7];block[7]=block[5];block[5]=temp;
293 | } else {
294 | Object temp=block[1];
295 | block[1]=block[3];block[3]=block[8];block[8]=block[6];block[6]=temp;
296 | temp=block[2];
297 | block[2]=block[5];block[5]=block[7];block[7]=block[4];block[4]=temp;
298 | }
299 | }
300 |
301 | /**
302 | * 橙面旋转90度
303 | * @param clockWise:ture为顺时针;false为逆时针
304 | */
305 | public void rotateOrange90(final Boolean clockWise){
306 | new Thread(new Runnable() {
307 | int count=0;
308 | @Override
309 | public void run() {
310 | setRotating(true);
311 | while (isRotating()) {
312 | CornerBlock tempCornerBlock=(CornerBlock) block[13];
313 | tempCornerBlock.rotate(orange.getCenterPoint(), Math.PI/90, clockWise);
314 | tempCornerBlock=(CornerBlock) block[1];
315 | tempCornerBlock.rotate(orange.getCenterPoint(), Math.PI/90, clockWise);
316 | tempCornerBlock=(CornerBlock) block[18];
317 | tempCornerBlock.rotate(orange.getCenterPoint(), Math.PI/90, clockWise);
318 | tempCornerBlock=(CornerBlock) block[6];
319 | tempCornerBlock.rotate(orange.getCenterPoint(), Math.PI/90, clockWise);
320 |
321 | EdgeBlock tempEdgeBlock=(EdgeBlock) block[9];
322 | tempEdgeBlock.rotate(orange.getCenterPoint(), Math.PI/90, clockWise);
323 | tempEdgeBlock=(EdgeBlock) block[16];
324 | tempEdgeBlock.rotate(orange.getCenterPoint(), Math.PI/90, clockWise);
325 | tempEdgeBlock=(EdgeBlock) block[4];
326 | tempEdgeBlock.rotate(orange.getCenterPoint(), Math.PI/90, clockWise);
327 | tempEdgeBlock=(EdgeBlock) block[11];
328 | tempEdgeBlock.rotate(orange.getCenterPoint(), Math.PI/90, clockWise);
329 |
330 | orange.rotate(orange.getCenterPoint(), Math.PI/90, clockWise);
331 | if (orange.getSquare().getHidden()=45) {
337 | setRotating(false);
338 | }
339 | }
340 | }
341 |
342 | }).start();
343 |
344 | if (clockWise) {
345 | Object temp=block[13];
346 | block[13]=block[18];block[18]=block[6];block[6]=block[1];block[1]=temp;
347 | temp=block[9];
348 | block[9]=block[16];block[16]=block[11];block[11]=block[4];block[4]=temp;
349 | } else {
350 | Object temp=block[13];
351 | block[13]=block[1];block[1]=block[6];block[6]=block[18];block[18]=temp;
352 | temp=block[9];
353 | block[9]=block[4];block[4]=block[11];block[11]=block[16];block[16]=temp;
354 | }
355 | }
356 |
357 | /**
358 | * 绿面旋转90度
359 | * @param clockWise:ture为顺时针;false为逆时针
360 | */
361 | public void rotateGreen90(final Boolean clockWise){
362 | new Thread(new Runnable() {
363 | int count=0;
364 | @Override
365 | public void run() {
366 | setRotating(true);
367 | while (isRotating()) {
368 | CornerBlock tempCornerBlock=(CornerBlock) block[15];
369 | tempCornerBlock.rotate(green.getCenterPoint(), Math.PI/90, clockWise);
370 | tempCornerBlock=(CornerBlock) block[13];
371 | tempCornerBlock.rotate(green.getCenterPoint(), Math.PI/90, clockWise);
372 | tempCornerBlock=(CornerBlock) block[20];
373 | tempCornerBlock.rotate(green.getCenterPoint(), Math.PI/90, clockWise);
374 | tempCornerBlock=(CornerBlock) block[18];
375 | tempCornerBlock.rotate(green.getCenterPoint(), Math.PI/90, clockWise);
376 |
377 | EdgeBlock tempEdgeBlock=(EdgeBlock) block[14];
378 | tempEdgeBlock.rotate(green.getCenterPoint(), Math.PI/90, clockWise);
379 | tempEdgeBlock=(EdgeBlock) block[17];
380 | tempEdgeBlock.rotate(green.getCenterPoint(), Math.PI/90, clockWise);
381 | tempEdgeBlock=(EdgeBlock) block[16];
382 | tempEdgeBlock.rotate(green.getCenterPoint(), Math.PI/90, clockWise);
383 | tempEdgeBlock=(EdgeBlock) block[19];
384 | tempEdgeBlock.rotate(green.getCenterPoint(), Math.PI/90, clockWise);
385 |
386 | green.rotate(green.getCenterPoint(), Math.PI/90, clockWise);
387 | if (green.getSquare().getHidden()=45) {
393 | setRotating(false);
394 | }
395 | }
396 | }
397 | }).start();
398 | if (clockWise) {
399 | Object temp=block[15];
400 | block[15]=block[20];block[20]=block[18];block[18]=block[13];block[13]=temp;
401 | temp=block[14];
402 | block[14]=block[17];block[17]=block[19];block[19]=block[16];block[16]=temp;
403 | } else {
404 | Object temp=block[15];
405 | block[15]=block[13];block[13]=block[18];block[18]=block[20];block[20]=temp;
406 | temp=block[14];
407 | block[14]=block[16];block[16]=block[19];block[19]=block[17];block[17]=temp;
408 | }
409 | }
410 |
411 | /**
412 | * 红面旋转90度
413 | * @param clockWise:ture为顺时针;false为逆时针
414 | */
415 | public void rotateRed90(final Boolean clockWise){
416 | new Thread(new Runnable() {
417 | int count=0;
418 | @Override
419 | public void run() {
420 | setRotating(true);
421 | while (isRotating()) {
422 | CornerBlock tempCornerBlock=(CornerBlock) block[3];
423 | tempCornerBlock.rotate(red.getCenterPoint(), Math.PI/90, clockWise);
424 | tempCornerBlock=(CornerBlock) block[15];
425 | tempCornerBlock.rotate(red.getCenterPoint(), Math.PI/90, clockWise);
426 | tempCornerBlock=(CornerBlock) block[8];
427 | tempCornerBlock.rotate(red.getCenterPoint(), Math.PI/90, clockWise);
428 | tempCornerBlock=(CornerBlock) block[20];
429 | tempCornerBlock.rotate(red.getCenterPoint(), Math.PI/90, clockWise);
430 |
431 | EdgeBlock tempEdgeBlock=(EdgeBlock) block[10];
432 | tempEdgeBlock.rotate(red.getCenterPoint(), Math.PI/90, clockWise);
433 | tempEdgeBlock=(EdgeBlock) block[5];
434 | tempEdgeBlock.rotate(red.getCenterPoint(), Math.PI/90, clockWise);
435 | tempEdgeBlock=(EdgeBlock) block[17];
436 | tempEdgeBlock.rotate(red.getCenterPoint(), Math.PI/90, clockWise);
437 | tempEdgeBlock=(EdgeBlock) block[12];
438 | tempEdgeBlock.rotate(red.getCenterPoint(), Math.PI/90, clockWise);
439 |
440 | red.rotate(red.getCenterPoint(), Math.PI/90, clockWise);
441 | if (red.getSquare().getHidden()=45) {
447 | setRotating(false);
448 | }
449 | }
450 | }
451 | }).start();
452 | if (clockWise) {
453 | Object temp=block[3];
454 | block[3]=block[8];block[8]=block[20];block[20]=block[15];block[15]=temp;
455 | temp=block[10];
456 | block[10]=block[5];block[5]=block[12];block[12]=block[17];block[17]=temp;
457 | } else {
458 | Object temp=block[3];
459 | block[3]=block[15];block[15]=block[20];block[20]=block[8];block[8]=temp;
460 | temp=block[10];
461 | block[10]=block[17];block[17]=block[12];block[12]=block[5];block[5]=temp;
462 | }
463 | }
464 |
465 | /**
466 | * 黄面旋转90度
467 | * @param clockWise:ture为顺时针;false为逆时针
468 | */
469 | public void rotateYellow90(final Boolean clockWise){
470 | new Thread(new Runnable() {
471 | int count=0;
472 | @Override
473 | public void run() {
474 | setRotating(true);
475 | while (isRotating()) {
476 | CornerBlock tempCornerBlock=(CornerBlock) block[13];
477 | tempCornerBlock.rotate(yellow.getCenterPoint(), Math.PI/90, clockWise);
478 | tempCornerBlock=(CornerBlock) block[15];
479 | tempCornerBlock.rotate(yellow.getCenterPoint(), Math.PI/90, clockWise);
480 | tempCornerBlock=(CornerBlock) block[1];
481 | tempCornerBlock.rotate(yellow.getCenterPoint(), Math.PI/90, clockWise);
482 | tempCornerBlock=(CornerBlock) block[3];
483 | tempCornerBlock.rotate(yellow.getCenterPoint(), Math.PI/90, clockWise);
484 |
485 | EdgeBlock tempEdgeBlock=(EdgeBlock) block[14];
486 | tempEdgeBlock.rotate(yellow.getCenterPoint(), Math.PI/90, clockWise);
487 | tempEdgeBlock=(EdgeBlock) block[9];
488 | tempEdgeBlock.rotate(yellow.getCenterPoint(), Math.PI/90, clockWise);
489 | tempEdgeBlock=(EdgeBlock) block[10];
490 | tempEdgeBlock.rotate(yellow.getCenterPoint(), Math.PI/90, clockWise);
491 | tempEdgeBlock=(EdgeBlock) block[2];
492 | tempEdgeBlock.rotate(yellow.getCenterPoint(), Math.PI/90, clockWise);
493 |
494 | yellow.rotate(yellow.getCenterPoint(), Math.PI/90, clockWise);
495 | if (yellow.getSquare().getHidden()=45) {
501 | setRotating(false);
502 | }
503 | }
504 | }
505 | }).start();
506 | if (clockWise) {
507 | Object temp=block[13];
508 | block[13]=block[1];block[1]=block[3];block[3]=block[15];block[15]=temp;
509 | temp=block[14];
510 | block[14]=block[9];block[9]=block[2];block[2]=block[10];block[10]=temp;
511 | } else {
512 | Object temp=block[13];
513 | block[13]=block[15];block[15]=block[3];block[3]=block[1];block[1]=temp;
514 | temp=block[14];
515 | block[14]=block[10];block[10]=block[2];block[2]=block[9];block[9]=temp;
516 | }
517 | }
518 |
519 | /**
520 | * 白面旋转90度
521 | * @param clockWise:ture为顺时针;false为逆时针
522 | */
523 | public void rotateWhite90(final Boolean clockWise){
524 | new Thread(new Runnable() {
525 | int count=0;
526 | @Override
527 | public void run() {
528 | setRotating(true);
529 | while (isRotating()) {
530 | CornerBlock tempCornerBlock=(CornerBlock) block[6];
531 | tempCornerBlock.rotate(white.getCenterPoint(), Math.PI/90, clockWise);
532 | tempCornerBlock=(CornerBlock) block[8];
533 | tempCornerBlock.rotate(white.getCenterPoint(), Math.PI/90, clockWise);
534 | tempCornerBlock=(CornerBlock) block[18];
535 | tempCornerBlock.rotate(white.getCenterPoint(), Math.PI/90, clockWise);
536 | tempCornerBlock=(CornerBlock) block[20];
537 | tempCornerBlock.rotate(white.getCenterPoint(), Math.PI/90, clockWise);
538 |
539 | EdgeBlock tempEdgeBlock=(EdgeBlock) block[7];
540 | tempEdgeBlock.rotate(white.getCenterPoint(), Math.PI/90, clockWise);
541 | tempEdgeBlock=(EdgeBlock) block[11];
542 | tempEdgeBlock.rotate(white.getCenterPoint(), Math.PI/90, clockWise);
543 | tempEdgeBlock=(EdgeBlock) block[12];
544 | tempEdgeBlock.rotate(white.getCenterPoint(), Math.PI/90, clockWise);
545 | tempEdgeBlock=(EdgeBlock) block[19];
546 | tempEdgeBlock.rotate(white.getCenterPoint(), Math.PI/90, clockWise);
547 |
548 | white.rotate(white.getCenterPoint(), Math.PI/90, clockWise);
549 | if (white.getSquare().getHidden()=45) {
555 | setRotating(false);
556 | }
557 | }
558 | }
559 | }).start();
560 | if (clockWise) {
561 | Object temp=block[6];
562 | block[6]=block[18];block[18]=block[20];block[20]=block[8];block[8]=temp;
563 | temp=block[7];
564 | block[7]=block[11];block[11]=block[19];block[19]=block[12];block[12]=temp;
565 | } else {
566 | Object temp=block[6];
567 | block[6]=block[8];block[8]=block[20];block[20]=block[18];block[18]=temp;
568 | temp=block[7];
569 | block[7]=block[12];block[12]=block[19];block[19]=block[11];block[11]=temp;
570 | }
571 | }
572 |
573 | public Polygon getPolygon(){
574 | if (selected==BLUE) {
575 | return getBluePolygon();
576 | }else if (selected==RED) {
577 | return getRedPolygon();
578 | }else if (selected==GREEN) {
579 | return getGreenPolygon();
580 | }else if (selected==ORANGE) {
581 | return getOrangePolygon();
582 | }else if (selected==YELLOW) {
583 | return getYellowPolygon();
584 | }else if (selected==WHITE) {
585 | return getWhitePolygon();
586 | }else {
587 | return null;
588 | }
589 | }
590 |
591 | /**
592 | * 获得蓝色面边框
593 | * @return
594 | */
595 | public Polygon getBluePolygon(){
596 | Polygon polygon=new Polygon();
597 | CornerBlock cornerBlock1=(CornerBlock)block[1];
598 | Point point1=cornerBlock1.getCornerPoint().getPoint2D();
599 | VTs.view_To_screen(point1);
600 | CornerBlock cornerBlock3=(CornerBlock)block[3];
601 | Point point3=cornerBlock3.getCornerPoint().getPoint2D();
602 | VTs.view_To_screen(point3);
603 | CornerBlock cornerBlock6=(CornerBlock)block[6];
604 | Point point6=cornerBlock6.getCornerPoint().getPoint2D();
605 | VTs.view_To_screen(point6);
606 | CornerBlock cornerBlock8=(CornerBlock)block[8];
607 | Point point8=cornerBlock8.getCornerPoint().getPoint2D();
608 | VTs.view_To_screen(point8);
609 | polygon.addPoint(point1.x, point1.y);polygon.addPoint(point3.x, point3.y);
610 | polygon.addPoint(point8.x, point8.y);polygon.addPoint(point6.x, point6.y);
611 | return polygon;
612 | }
613 |
614 | /**
615 | * 获得橙色面边框
616 | * @return
617 | */
618 | public Polygon getOrangePolygon(){
619 | Polygon polygon=new Polygon();
620 | CornerBlock cornerBlock13=(CornerBlock)block[13];
621 | Point point13=cornerBlock13.getCornerPoint().getPoint2D();
622 | VTs.view_To_screen(point13);
623 | CornerBlock cornerBlock1=(CornerBlock)block[1];
624 | Point point1=cornerBlock1.getCornerPoint().getPoint2D();
625 | VTs.view_To_screen(point1);
626 | CornerBlock cornerBlock6=(CornerBlock)block[6];
627 | Point point6=cornerBlock6.getCornerPoint().getPoint2D();
628 | VTs.view_To_screen(point6);
629 | CornerBlock cornerBlock18=(CornerBlock)block[18];
630 | Point point18=cornerBlock18.getCornerPoint().getPoint2D();
631 | VTs.view_To_screen(point18);
632 | polygon.addPoint(point13.x, point13.y);polygon.addPoint(point1.x, point1.y);
633 | polygon.addPoint(point6.x, point6.y);polygon.addPoint(point18.x, point18.y);
634 | return polygon;
635 | }
636 |
637 | /**
638 | * 获得绿色面边框
639 | * @return
640 | */
641 | public Polygon getGreenPolygon(){
642 | Polygon polygon=new Polygon();
643 | CornerBlock cornerBlock15=(CornerBlock)block[15];
644 | Point point15=cornerBlock15.getCornerPoint().getPoint2D();
645 | VTs.view_To_screen(point15);
646 | CornerBlock cornerBlock13=(CornerBlock)block[13];
647 | Point point13=cornerBlock13.getCornerPoint().getPoint2D();
648 | VTs.view_To_screen(point13);
649 | CornerBlock cornerBlock18=(CornerBlock)block[18];
650 | Point point18=cornerBlock18.getCornerPoint().getPoint2D();
651 | VTs.view_To_screen(point18);
652 | CornerBlock cornerBlock20=(CornerBlock)block[20];
653 | Point point20=cornerBlock20.getCornerPoint().getPoint2D();
654 | VTs.view_To_screen(point20);
655 | polygon.addPoint(point15.x, point15.y);polygon.addPoint(point13.x, point13.y);
656 | polygon.addPoint(point18.x, point18.y);polygon.addPoint(point20.x, point20.y);
657 | return polygon;
658 | }
659 |
660 | /**
661 | * 获得红色面边框
662 | * @return
663 | */
664 | public Polygon getRedPolygon(){
665 | Polygon polygon=new Polygon();
666 | CornerBlock cornerBlock3=(CornerBlock)block[3];
667 | Point point3=cornerBlock3.getCornerPoint().getPoint2D();
668 | VTs.view_To_screen(point3);
669 | CornerBlock cornerBlock15=(CornerBlock)block[15];
670 | Point point15=cornerBlock15.getCornerPoint().getPoint2D();
671 | VTs.view_To_screen(point15);
672 | CornerBlock cornerBlock20=(CornerBlock)block[20];
673 | Point point20=cornerBlock20.getCornerPoint().getPoint2D();
674 | VTs.view_To_screen(point20);
675 | CornerBlock cornerBlock8=(CornerBlock)block[8];
676 | Point point8=cornerBlock8.getCornerPoint().getPoint2D();
677 | VTs.view_To_screen(point8);
678 | polygon.addPoint(point3.x, point3.y);polygon.addPoint(point15.x, point15.y);
679 | polygon.addPoint(point20.x, point20.y);polygon.addPoint(point8.x, point8.y);
680 | return polygon;
681 | }
682 |
683 | /**
684 | * 获得黄色面边框
685 | * @return
686 | */
687 | public Polygon getYellowPolygon(){
688 | Polygon polygon=new Polygon();
689 | CornerBlock cornerBlock13=(CornerBlock)block[13];
690 | Point point13=cornerBlock13.getCornerPoint().getPoint2D();
691 | VTs.view_To_screen(point13);
692 | CornerBlock cornerBlock15=(CornerBlock)block[15];
693 | Point point15=cornerBlock15.getCornerPoint().getPoint2D();
694 | VTs.view_To_screen(point15);
695 | CornerBlock cornerBlock3=(CornerBlock)block[3];
696 | Point point3=cornerBlock3.getCornerPoint().getPoint2D();
697 | VTs.view_To_screen(point3);
698 | CornerBlock cornerBlock1=(CornerBlock)block[1];
699 | Point point1=cornerBlock1.getCornerPoint().getPoint2D();
700 | VTs.view_To_screen(point1);
701 | polygon.addPoint(point13.x, point13.y);polygon.addPoint(point15.x, point15.y);
702 | polygon.addPoint(point3.x, point3.y);polygon.addPoint(point1.x, point1.y);
703 | return polygon;
704 | }
705 |
706 | /**
707 | * 获得白色面边框
708 | * @return
709 | */
710 | public Polygon getWhitePolygon(){
711 | Polygon polygon=new Polygon();
712 | CornerBlock cornerBlock6=(CornerBlock)block[6];
713 | Point point6=cornerBlock6.getCornerPoint().getPoint2D();
714 | VTs.view_To_screen(point6);
715 | CornerBlock cornerBlock8=(CornerBlock)block[8];
716 | Point point8=cornerBlock8.getCornerPoint().getPoint2D();
717 | VTs.view_To_screen(point8);
718 | CornerBlock cornerBlock20=(CornerBlock)block[20];
719 | Point point20=cornerBlock20.getCornerPoint().getPoint2D();
720 | VTs.view_To_screen(point20);
721 | CornerBlock cornerBlock18=(CornerBlock)block[18];
722 | Point point18=cornerBlock18.getCornerPoint().getPoint2D();
723 | VTs.view_To_screen(point18);
724 | polygon.addPoint(point6.x, point6.y);polygon.addPoint(point8.x, point8.y);
725 | polygon.addPoint(point20.x, point20.y);polygon.addPoint(point18.x, point18.y);
726 | return polygon;
727 | }
728 |
729 |
730 | /**
731 | * 获得蓝色背面边框
732 | * @return
733 | */
734 | public Polygon getBluePolygon1(){
735 | Polygon polygon=new Polygon();
736 | CornerBlock cornerBlock1=(CornerBlock)block[1];
737 | Point3D point1=cornerBlock1.getBackPoint(blue.getCenterPoint());
738 | VTs.view_To_screen(point1.getPoint2D());
739 | polygon.addPoint(VTs.view_To_screen(point1.getPoint2D()).x,
740 | VTs.view_To_screen(point1.getPoint2D()).y);
741 |
742 | CornerBlock cornerBlock3=(CornerBlock)block[3];
743 | Point3D point3=cornerBlock3.getBackPoint(blue.getCenterPoint());
744 | VTs.view_To_screen(point3.getPoint2D());
745 | polygon.addPoint(VTs.view_To_screen(point3.getPoint2D()).x,
746 | VTs.view_To_screen(point3.getPoint2D()).y);
747 |
748 | CornerBlock cornerBlock8=(CornerBlock)block[8];
749 | Point3D point8=cornerBlock8.getBackPoint(blue.getCenterPoint());
750 | VTs.view_To_screen(point8.getPoint2D());
751 | polygon.addPoint(VTs.view_To_screen(point8.getPoint2D()).x,
752 | VTs.view_To_screen(point8.getPoint2D()).y);
753 |
754 | CornerBlock cornerBlock6=(CornerBlock)block[6];
755 | Point3D point6=cornerBlock6.getBackPoint(blue.getCenterPoint());
756 | VTs.view_To_screen(point6.getPoint2D());
757 | polygon.addPoint(VTs.view_To_screen(point6.getPoint2D()).x,
758 | VTs.view_To_screen(point6.getPoint2D()).y);
759 |
760 | return polygon;
761 | }
762 |
763 | /**
764 | * 获得橙色背面边框
765 | * @return
766 | */
767 | public Polygon getOrangePolygon1(){
768 | Polygon polygon=new Polygon();
769 | CornerBlock cornerBlock13=(CornerBlock)block[13];
770 | Point3D point13=cornerBlock13.getBackPoint(orange.getCenterPoint());
771 | VTs.view_To_screen(point13.getPoint2D());
772 | polygon.addPoint(VTs.view_To_screen(point13.getPoint2D()).x,
773 | VTs.view_To_screen(point13.getPoint2D()).y);
774 |
775 | CornerBlock cornerBlock1=(CornerBlock)block[1];
776 | Point3D point1=cornerBlock1.getBackPoint(orange.getCenterPoint());
777 | VTs.view_To_screen(point1.getPoint2D());
778 | polygon.addPoint(VTs.view_To_screen(point1.getPoint2D()).x,
779 | VTs.view_To_screen(point1.getPoint2D()).y);
780 |
781 | CornerBlock cornerBlock6=(CornerBlock)block[6];
782 | Point3D point6=cornerBlock6.getBackPoint(orange.getCenterPoint());
783 | VTs.view_To_screen(point6.getPoint2D());
784 | polygon.addPoint(VTs.view_To_screen(point6.getPoint2D()).x,
785 | VTs.view_To_screen(point6.getPoint2D()).y);
786 |
787 | CornerBlock cornerBlock18=(CornerBlock)block[18];
788 | Point3D point18=cornerBlock18.getBackPoint(orange.getCenterPoint());
789 | VTs.view_To_screen(point18.getPoint2D());
790 | polygon.addPoint(VTs.view_To_screen(point18.getPoint2D()).x,
791 | VTs.view_To_screen(point18.getPoint2D()).y);
792 |
793 | return polygon;
794 | }
795 |
796 | /**
797 | * 获得绿色背面边框
798 | * @return
799 | */
800 | public Polygon getGreenPolygon1(){
801 | Polygon polygon=new Polygon();
802 | CornerBlock cornerBlock15=(CornerBlock)block[15];
803 | Point3D point15=cornerBlock15.getBackPoint(green.getCenterPoint());
804 | VTs.view_To_screen(point15.getPoint2D());
805 | polygon.addPoint(VTs.view_To_screen(point15.getPoint2D()).x,
806 | VTs.view_To_screen(point15.getPoint2D()).y);
807 |
808 | CornerBlock cornerBlock13=(CornerBlock)block[13];
809 | Point3D point13=cornerBlock13.getBackPoint(green.getCenterPoint());
810 | VTs.view_To_screen(point13.getPoint2D());
811 | polygon.addPoint(VTs.view_To_screen(point13.getPoint2D()).x,
812 | VTs.view_To_screen(point13.getPoint2D()).y);
813 |
814 | CornerBlock cornerBlock18=(CornerBlock)block[18];
815 | Point3D point18=cornerBlock18.getBackPoint(green.getCenterPoint());
816 | VTs.view_To_screen(point18.getPoint2D());
817 | polygon.addPoint(VTs.view_To_screen(point18.getPoint2D()).x,
818 | VTs.view_To_screen(point18.getPoint2D()).y);
819 |
820 | CornerBlock cornerBlock20=(CornerBlock)block[20];
821 | Point3D point20=cornerBlock20.getBackPoint(green.getCenterPoint());
822 | VTs.view_To_screen(point20.getPoint2D());
823 | polygon.addPoint(VTs.view_To_screen(point20.getPoint2D()).x,
824 | VTs.view_To_screen(point20.getPoint2D()).y);
825 |
826 | return polygon;
827 | }
828 |
829 | /**
830 | * 获得红色背面边框
831 | * @return
832 | */
833 | public Polygon getRedPolygon1(){
834 | Polygon polygon=new Polygon();
835 | CornerBlock cornerBlock3=(CornerBlock)block[3];
836 | Point3D point3=cornerBlock3.getBackPoint(red.getCenterPoint());
837 | VTs.view_To_screen(point3.getPoint2D());
838 | polygon.addPoint(VTs.view_To_screen(point3.getPoint2D()).x,
839 | VTs.view_To_screen(point3.getPoint2D()).y);
840 |
841 | CornerBlock cornerBlock15=(CornerBlock)block[15];
842 | Point3D point15=cornerBlock15.getBackPoint(red.getCenterPoint());
843 | VTs.view_To_screen(point15.getPoint2D());
844 | polygon.addPoint(VTs.view_To_screen(point15.getPoint2D()).x,
845 | VTs.view_To_screen(point15.getPoint2D()).y);
846 |
847 | CornerBlock cornerBlock20=(CornerBlock)block[20];
848 | Point3D point20=cornerBlock20.getBackPoint(red.getCenterPoint());
849 | VTs.view_To_screen(point20.getPoint2D());
850 | polygon.addPoint(VTs.view_To_screen(point20.getPoint2D()).x,
851 | VTs.view_To_screen(point20.getPoint2D()).y);
852 |
853 | CornerBlock cornerBlock8=(CornerBlock)block[8];
854 | Point3D point8=cornerBlock8.getBackPoint(red.getCenterPoint());
855 | VTs.view_To_screen(point8.getPoint2D());
856 | polygon.addPoint(VTs.view_To_screen(point8.getPoint2D()).x,
857 | VTs.view_To_screen(point8.getPoint2D()).y);
858 |
859 | return polygon;
860 | }
861 |
862 | /**
863 | * 获得黄色背面边框
864 | * @return
865 | */
866 | public Polygon getYellowPolygon1(){
867 | Polygon polygon=new Polygon();
868 | CornerBlock cornerBlock13=(CornerBlock)block[13];
869 | Point3D point13=cornerBlock13.getBackPoint(yellow.getCenterPoint());
870 | VTs.view_To_screen(point13.getPoint2D());
871 | polygon.addPoint(VTs.view_To_screen(point13.getPoint2D()).x,
872 | VTs.view_To_screen(point13.getPoint2D()).y);
873 |
874 | CornerBlock cornerBlock15=(CornerBlock)block[15];
875 | Point3D point15=cornerBlock15.getBackPoint(yellow.getCenterPoint());
876 | VTs.view_To_screen(point15.getPoint2D());
877 | polygon.addPoint(VTs.view_To_screen(point15.getPoint2D()).x,
878 | VTs.view_To_screen(point15.getPoint2D()).y);
879 |
880 | CornerBlock cornerBlock3=(CornerBlock)block[3];
881 | Point3D point3=cornerBlock3.getBackPoint(yellow.getCenterPoint());
882 | VTs.view_To_screen(point3.getPoint2D());
883 | polygon.addPoint(VTs.view_To_screen(point3.getPoint2D()).x,
884 | VTs.view_To_screen(point3.getPoint2D()).y);
885 |
886 | CornerBlock cornerBlock1=(CornerBlock)block[1];
887 | Point3D point1=cornerBlock1.getBackPoint(yellow.getCenterPoint());
888 | VTs.view_To_screen(point1.getPoint2D());
889 | polygon.addPoint(VTs.view_To_screen(point1.getPoint2D()).x,
890 | VTs.view_To_screen(point1.getPoint2D()).y);
891 |
892 | return polygon;
893 | }
894 |
895 | /**
896 | * 获得白色背面边框
897 | * @return
898 | */
899 | public Polygon getWhitePolygon1(){
900 | Polygon polygon=new Polygon();
901 | CornerBlock cornerBlock6=(CornerBlock)block[6];
902 | Point3D point6=cornerBlock6.getBackPoint(white.getCenterPoint());
903 | VTs.view_To_screen(point6.getPoint2D());
904 | polygon.addPoint(VTs.view_To_screen(point6.getPoint2D()).x,
905 | VTs.view_To_screen(point6.getPoint2D()).y);
906 |
907 | CornerBlock cornerBlock8=(CornerBlock)block[8];
908 | Point3D point8=cornerBlock8.getBackPoint(white.getCenterPoint());
909 | VTs.view_To_screen(point8.getPoint2D());
910 | polygon.addPoint(VTs.view_To_screen(point8.getPoint2D()).x,
911 | VTs.view_To_screen(point8.getPoint2D()).y);
912 |
913 | CornerBlock cornerBlock20=(CornerBlock)block[20];
914 | Point3D point20=cornerBlock20.getBackPoint(white.getCenterPoint());
915 | VTs.view_To_screen(point20.getPoint2D());
916 | polygon.addPoint(VTs.view_To_screen(point20.getPoint2D()).x,
917 | VTs.view_To_screen(point20.getPoint2D()).y);
918 |
919 | CornerBlock cornerBlock18=(CornerBlock)block[18];
920 | Point3D point18=cornerBlock18.getBackPoint(white.getCenterPoint());
921 | VTs.view_To_screen(point18.getPoint2D());
922 | polygon.addPoint(VTs.view_To_screen(point18.getPoint2D()).x,
923 | VTs.view_To_screen(point18.getPoint2D()).y);
924 |
925 | return polygon;
926 | }
927 |
928 | /**
929 | * 获得魔方当前选择面的背面,用于旋转时绘制
930 | * @return
931 | */
932 | public Polygon getPolygon1(){
933 | Polygon polygon=new Polygon();
934 | if (selected==BLUE) {
935 | polygon=getBluePolygon1();
936 | } else if(selected==ORANGE){
937 | polygon=getOrangePolygon1();
938 | } else if(selected==GREEN){
939 | polygon=getGreenPolygon1();
940 | } else if(selected==RED){
941 | polygon=getRedPolygon1();
942 | } else if(selected==YELLOW){
943 | polygon=getYellowPolygon1();
944 | } else if(selected==WHITE){
945 | polygon=getWhitePolygon1();
946 | } else {
947 | polygon= backPolygon;
948 | }
949 | return polygon;
950 | }
951 |
952 | @Override
953 | protected void paintComponent(Graphics g) {
954 | super.paintComponent(g);
955 | Graphics2D graphics2D=(Graphics2D)g;
956 | graphics2D.setColor(Color.gray);
957 | if (backPolygon!=null) {
958 | graphics2D.fillPolygon(backPolygon);
959 | }
960 | /*for (int i = 0; i < centerBlocks.length; i++) {
961 | centerBlocks[i].draw(graphics2D);
962 | }
963 | for (int i = 0; i < edgeBlocks.length; i++) {
964 | edgeBlocks[i].draw(graphics2D);
965 | }
966 | for (int i = 0; i < cornerBlocks.length; i++) {
967 | cornerBlocks[i].draw(graphics2D);
968 | }*/
969 | drawCube(graphics2D);
970 | graphics2D.setColor(Color.magenta);
971 | if (getPolygon()!=null) {
972 | graphics2D.drawPolygon(getPolygon());
973 | }
974 | }
975 |
976 | private void drawCube(Graphics2D graphics2D){
977 | getBlocks();
978 | if (selected==BLUE) {
979 | if (blue.getSquare().getHidden()>VIEWERROR) {
980 | drawBlocks(graphics2D,block2);
981 | drawBlocks(graphics2D,block1);
982 | }else {
983 | drawBlocks(graphics2D,block1);
984 | drawBlocks(graphics2D,block2);
985 | }
986 | }
987 |
988 | if (selected==ORANGE) {
989 | if (orange.getSquare().getHidden()>VIEWERROR) {
990 | drawBlocks(graphics2D,block2);
991 | drawBlocks(graphics2D,block1);
992 | }else {
993 | drawBlocks(graphics2D,block1);
994 | drawBlocks(graphics2D,block2);
995 | }
996 | }
997 |
998 | if (selected==GREEN) {
999 | if (green.getSquare().getHidden()>VIEWERROR) {
1000 | drawBlocks(graphics2D,block2);
1001 | drawBlocks(graphics2D,block1);
1002 | }else {
1003 | drawBlocks(graphics2D,block1);
1004 | drawBlocks(graphics2D,block2);
1005 | }
1006 | }
1007 |
1008 | if (selected==RED) {
1009 | if (red.getSquare().getHidden()>VIEWERROR) {
1010 | drawBlocks(graphics2D,block2);
1011 | drawBlocks(graphics2D,block1);
1012 | }else {
1013 | drawBlocks(graphics2D,block1);
1014 | drawBlocks(graphics2D,block2);
1015 | }
1016 | }
1017 |
1018 | if (selected==YELLOW) {
1019 | if (yellow.getSquare().getHidden()>VIEWERROR) {
1020 | drawBlocks(graphics2D,block2);
1021 | drawBlocks(graphics2D,block1);
1022 | }else {
1023 | drawBlocks(graphics2D,block1);
1024 | drawBlocks(graphics2D,block2);
1025 | }
1026 | }
1027 |
1028 | if (selected==WHITE) {
1029 | if (white.getSquare().getHidden()>VIEWERROR) {
1030 | drawBlocks(graphics2D,block2);
1031 | drawBlocks(graphics2D,block1);
1032 | }else {
1033 | drawBlocks(graphics2D,block1);
1034 | drawBlocks(graphics2D,block2);
1035 | }
1036 | }
1037 |
1038 | if (selected==null) {
1039 | for (int i = 0; i < centerBlocks.length; i++) {
1040 | centerBlocks[i].draw(graphics2D);
1041 | }
1042 | for (int i = 0; i < edgeBlocks.length; i++) {
1043 | edgeBlocks[i].draw(graphics2D);
1044 | }
1045 | for (int i = 0; i < cornerBlocks.length; i++) {
1046 | cornerBlocks[i].draw(graphics2D);
1047 | }
1048 | }
1049 | }
1050 |
1051 | private void getBlocks(){
1052 | if (selected==BLUE) {
1053 | block1[0]=block[1];
1054 | block1[1]=block[2];
1055 | block1[2]=block[3];
1056 | block1[3]=block[4];
1057 | block1[4]=block[5];
1058 | block1[5]=block[6];
1059 | block1[6]=block[7];
1060 | block1[7]=block[8];
1061 | block1[8]=blue;
1062 | block2[0]=block[9];block2[1]=block[10];block2[2]=block[11];
1063 | block2[3]=block[12];block2[4]=block[13];block2[5]=block[14];
1064 | block2[6]=block[15];block2[7]=block[16];block2[8]=block[17];
1065 | block2[9]=block[18];block2[10]=block[19];block2[11]=block[20];
1066 | block2[12]=orange;block2[13]=green;block2[14]=red;
1067 | block2[15]=yellow;block2[16]=white;
1068 | } else if (selected==ORANGE) {
1069 | block1[0]=block[13];
1070 | block1[1]=block[9];
1071 | block1[2]=block[1];
1072 | block1[3]=block[4];
1073 | block1[4]=block[6];
1074 | block1[5]=block[11];
1075 | block1[6]=block[18];
1076 | block1[7]=block[16];
1077 | block1[8]=orange;
1078 | block2[0]=block[2];block2[1]=block[3];block2[2]=block[5];
1079 | block2[3]=block[7];block2[4]=block[8];block2[5]=block[10];
1080 | block2[6]=block[12];block2[7]=block[14];block2[8]=block[15];
1081 | block2[9]=block[17];block2[10]=block[19];block2[11]=block[20];
1082 | block2[12]=blue;block2[13]=green;block2[14]=red;
1083 | block2[15]=yellow;block2[16]=white;
1084 | } else if (selected==GREEN){
1085 | block1[0]=block[15];
1086 | block1[1]=block[14];
1087 | block1[2]=block[13];
1088 | block1[3]=block[17];
1089 | block1[4]=block[16];
1090 | block1[5]=block[20];
1091 | block1[6]=block[19];
1092 | block1[7]=block[18];
1093 | block1[8]=green;
1094 | block2[0]=block[1];block2[1]=block[2];block2[2]=block[3];
1095 | block2[3]=block[4];block2[4]=block[5];block2[5]=block[6];
1096 | block2[6]=block[7];block2[7]=block[8];block2[8]=block[9];
1097 | block2[9]=block[10];block2[10]=block[11];block2[11]=block[12];
1098 | block2[12]=blue;block2[13]=orange;block2[14]=red;
1099 | block2[15]=yellow;block2[16]=white;
1100 | } else if (selected==RED){
1101 | block1[0]=block[3];
1102 | block1[1]=block[10];
1103 | block1[2]=block[15];
1104 | block1[3]=block[5];
1105 | block1[4]=block[17];
1106 | block1[5]=block[8];
1107 | block1[6]=block[12];
1108 | block1[7]=block[20];
1109 | block1[8]=red;
1110 | block2[0]=block[1];block2[1]=block[2];block2[2]=block[4];
1111 | block2[3]=block[6];block2[4]=block[7];block2[5]=block[9];
1112 | block2[6]=block[11];block2[7]=block[13];block2[8]=block[14];
1113 | block2[9]=block[16];block2[10]=block[18];block2[11]=block[19];
1114 | block2[12]=blue;block2[13]=orange;block2[14]=green;
1115 | block2[15]=yellow;block2[16]=white;
1116 | } else if (selected==YELLOW){
1117 | block1[0]=block[13];
1118 | block1[1]=block[14];
1119 | block1[2]=block[15];
1120 | block1[3]=block[9];
1121 | block1[4]=block[10];
1122 | block1[5]=block[1];
1123 | block1[6]=block[2];
1124 | block1[7]=block[3];
1125 | block1[8]=yellow;
1126 | block2[0]=block[4];block2[1]=block[5];block2[2]=block[6];
1127 | block2[3]=block[7];block2[4]=block[8];block2[5]=block[11];
1128 | block2[6]=block[12];block2[7]=block[16];block2[8]=block[17];
1129 | block2[9]=block[18];block2[10]=block[19];block2[11]=block[20];
1130 | block2[12]=blue;block2[13]=orange;block2[14]=green;
1131 | block2[15]=red;block2[16]=white;
1132 | } else if (selected==WHITE){
1133 | block1[0]=block[6];
1134 | block1[1]=block[7];
1135 | block1[2]=block[8];
1136 | block1[3]=block[11];
1137 | block1[4]=block[12];
1138 | block1[5]=block[18];
1139 | block1[6]=block[19];
1140 | block1[7]=block[20];
1141 | block1[8]=white;
1142 | block2[0]=block[1];block2[1]=block[2];block2[2]=block[3];
1143 | block2[3]=block[4];block2[4]=block[5];block2[5]=block[16];
1144 | block2[6]=block[9];block2[7]=block[10];block2[8]=block[13];
1145 | block2[9]=block[14];block2[10]=block[15];block2[11]=block[17];
1146 | block2[12]=blue;block2[13]=orange;block2[14]=green;
1147 | block2[15]=red;block2[16]=yellow;
1148 | }
1149 | }
1150 |
1151 | private void drawBlocks(Graphics2D graphics2D,Object[] objects) {
1152 | for (int i = 0; i < objects.length; i++) {
1153 | if (objects[i].getClass().equals(CornerBlock.class)) {
1154 | CornerBlock temp=(CornerBlock)objects[i];
1155 | temp.draw(graphics2D);
1156 | } else if ((objects[i].getClass().equals(EdgeBlock.class))){
1157 | EdgeBlock temp=(EdgeBlock)objects[i];
1158 | temp.draw(graphics2D);
1159 | } else {
1160 | CenterBlock temp=(CenterBlock)objects[i];
1161 | temp.draw(graphics2D);
1162 | }
1163 | }
1164 | }
1165 |
1166 | public void drawCenterBlock(Graphics2D graphics2D){
1167 | blue.draw(graphics2D);
1168 | orange.draw(graphics2D);
1169 | green.draw(graphics2D);
1170 | yellow.draw(graphics2D);
1171 | red.draw(graphics2D);
1172 | white.draw(graphics2D);
1173 | }
1174 |
1175 | @Override
1176 | public void update(Graphics g) {
1177 | super.update(g);
1178 |
1179 | offScreenImage=this.createImage(800, 800);
1180 | Graphics gImage=offScreenImage.getGraphics();
1181 | paint(gImage);
1182 | g.drawImage(offScreenImage, 0, 0, null);
1183 | gImage.dispose();
1184 | }
1185 |
1186 | @Override
1187 | public void paint(Graphics g) {
1188 | super.paint(g);
1189 | }
1190 |
1191 | private class MyMouseListner extends MouseAdapter{
1192 | @Override
1193 | public void mousePressed(MouseEvent e) {
1194 | super.mousePressed(e);
1195 | oldPoint=e.getPoint();
1196 | if (getBluePolygon().contains(e.getPoint())
1197 | &&blue.getSquare().getHidden()>VIEWERROR&&!isRotating()) {
1198 | selected=BLUE;
1199 | }else if (getRedPolygon().contains(e.getPoint())
1200 | &&red.getSquare().getHidden()>VIEWERROR&&!isRotating()) {
1201 | selected=RED;
1202 | }else if (getGreenPolygon().contains(e.getPoint())
1203 | &&green.getSquare().getHidden()>VIEWERROR&&!isRotating()) {
1204 | selected=GREEN;
1205 | }else if (getOrangePolygon().contains(e.getPoint())
1206 | &&orange.getSquare().getHidden()>VIEWERROR&&!isRotating()) {
1207 | selected=ORANGE;
1208 | }else if (getYellowPolygon().contains(e.getPoint())
1209 | &&yellow.getSquare().getHidden()>VIEWERROR&&!isRotating()) {
1210 | selected=YELLOW;
1211 | }else if (getWhitePolygon().contains(e.getPoint())
1212 | &&white.getSquare().getHidden()>VIEWERROR&&!isRotating()) {
1213 | selected=WHITE;
1214 | }else {
1215 | selected=null;
1216 | }
1217 | backPolygon=getPolygon1();
1218 | update(getGraphics());
1219 | }
1220 | }
1221 |
1222 | private class MyMouseMotionListner extends MouseMotionAdapter{
1223 | @Override
1224 | public void mouseDragged(MouseEvent e) {
1225 | super.mouseDragged(e);
1226 | angleX=(e.getY()-oldPoint.y)*Math.PI/200;
1227 | angleY=(e.getX()-oldPoint.x)*Math.PI/200;
1228 | if (!isRotating()) {
1229 | for (int i = 0; i < centerBlocks.length; i++) {
1230 | centerBlocks[i].rotateXY(angleX, angleY);
1231 | }
1232 | for (int i = 0; i < cornerBlocks.length; i++) {
1233 | cornerBlocks[i].rotateXY(angleX, angleY);
1234 | }
1235 | for (int i = 0; i < edgeBlocks.length; i++) {
1236 | edgeBlocks[i].rotateXY(angleX, angleY);
1237 | }
1238 | }
1239 | backPolygon=getPolygon1();
1240 | oldPoint=e.getPoint();
1241 | update(getGraphics());
1242 | }
1243 | }
1244 |
1245 |
1246 |
1247 | }
1248 |
--------------------------------------------------------------------------------
/MagicCube/src/CenterBlock.java:
--------------------------------------------------------------------------------
1 | import java.awt.Graphics2D;
2 | import java.awt.Point;
3 | import java.awt.Polygon;
4 |
5 | import math3D.Point3D;
6 | import math3D.VTs;
7 |
8 |
9 | public class CenterBlock {
10 |
11 | private Square square;
12 |
13 |
14 |
15 | public Square getSquare() {
16 | return square;
17 | }
18 |
19 | public void setSquare(Square square) {
20 | this.square = square;
21 | }
22 |
23 | /**
24 | * 中心块构造函数
25 | * @param square
26 | */
27 | public CenterBlock(Square square) {
28 | super();
29 | this.square = square;
30 | }
31 |
32 | /**
33 | * 中心块绕经过(0,0,0),point两点的直线旋转angle角度
34 | * @param point:空间一点
35 | * @param angle:旋转角度
36 | * @param clockwise: true为顺时针,false为逆时针
37 | */
38 | public void rotate(Point3D point, double angle, boolean clockwise){
39 | square.rotate(point, angle, clockwise);
40 | }
41 |
42 | /**
43 | * 绕XY中旋转角度angle
44 | * @param angle
45 | */
46 | public void rotateXY(double angleX, double angleY) {
47 | square.rotateXY(angleX, angleY);
48 | }
49 |
50 | public Point3D getCenterPoint(){
51 | Point3D centerPoint=new Point3D();
52 | centerPoint.x=(square.getPoint1().x+square.getPoint3().x)/2;
53 | centerPoint.y=(square.getPoint1().y+square.getPoint3().y)/2;
54 | centerPoint.z=(square.getPoint1().z+square.getPoint3().z)/2;
55 | return centerPoint;
56 | }
57 |
58 | /**
59 | * 获得中心块对应的整个面的2D投影
60 | * @return
61 | */
62 | public Polygon getPolygon(){
63 | Point3D point1=new Point3D(square.getPoint1().x, square.getPoint1().y, square.getPoint1().z);
64 | Point3D point2=new Point3D(square.getPoint2().x, square.getPoint2().y, square.getPoint2().z);
65 | Point3D point3=new Point3D(square.getPoint3().x, square.getPoint3().y, square.getPoint3().z);
66 | Point3D point4=new Point3D(square.getPoint4().x, square.getPoint4().y, square.getPoint4().z);
67 | Point point11=new Point();Point point22=new Point();
68 | Point point33=new Point();Point point44=new Point();
69 | point1.getPoint2D(point11);point2.getPoint2D(point22);
70 | point3.getPoint2D(point33);point4.getPoint2D(point44);
71 | VTs.view_To_screen(point11);VTs.view_To_screen(point22);
72 | VTs.view_To_screen(point33);VTs.view_To_screen(point44);
73 | int x[]={(int)point11.x,(int)point22.x,(int)point33.x,(int)point44.x};
74 | int y[]={(int)point11.y,(int)point22.y,(int)point33.y,(int)point44.y};
75 | Polygon polygon=new Polygon(x, y, 4);
76 |
77 |
78 | return polygon;
79 | }
80 |
81 | public void draw(Graphics2D graphics2D){
82 | square.draw(graphics2D);
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/MagicCube/src/CornerBlock.java:
--------------------------------------------------------------------------------
1 | import java.awt.Graphics2D;
2 | import java.util.ArrayList;
3 | import java.util.Iterator;
4 | import java.util.List;
5 |
6 | import math3D.Point3D;
7 |
8 | /**
9 | * 魔方角块,共16个
10 | *
11 | */
12 | public class CornerBlock {
13 |
14 | private Square square1;
15 | private Square square2;
16 | private Square square3;
17 |
18 | /**
19 | * 角块构造函数
20 | * @param square1
21 | * @param square2
22 | * @param square3
23 | */
24 | public CornerBlock(Square square1, Square square2, Square square3) {
25 | super();
26 | this.square1 = square1;
27 | this.square2 = square2;
28 | this.square3 = square3;
29 | }
30 |
31 | /**
32 | * 角块绕经过(0,0,0),point两点的直线旋转angle角度
33 | * @param point:空间一点
34 | * @param angle:旋转角度
35 | * @param clockwise: true为顺时针,false为逆时针
36 | */
37 | public void rotate(Point3D point, double angle, boolean clockwise){
38 | square1.rotate(point, angle, clockwise);
39 | square2.rotate(point, angle, clockwise);
40 | square3.rotate(point, angle, clockwise);
41 | }
42 |
43 | /**
44 | * 绕XY中旋转角度angle
45 | * @param angle
46 | */
47 | public void rotateXY(double angleX, double angleY) {
48 | square1.rotateXY(angleX, angleY);
49 | square2.rotateXY(angleX, angleY);
50 | square3.rotateXY(angleX, angleY);
51 | }
52 |
53 | public void draw(Graphics2D graphics2D){
54 | square1.draw(graphics2D);
55 | square2.draw(graphics2D);
56 | square3.draw(graphics2D);
57 | }
58 |
59 | public Point3D getCornerPoint(){
60 | Point3D point3D=new Point3D();
61 | List pointSet1=new ArrayList();
62 | pointSet1.add(square1.getPoint1());pointSet1.add(square1.getPoint2());
63 | pointSet1.add(square1.getPoint3());pointSet1.add(square1.getPoint4());
64 | List pointSet2=new ArrayList();
65 | pointSet2.add(square1.getPoint1());pointSet2.add(square1.getPoint2());
66 | pointSet2.add(square1.getPoint3());pointSet2.add(square1.getPoint4());
67 | pointSet1.retainAll(pointSet2);
68 | List pointSet3=new ArrayList();
69 | pointSet3.add(square1.getPoint1());pointSet3.add(square1.getPoint2());
70 | pointSet3.add(square1.getPoint3());pointSet3.add(square1.getPoint4());
71 | pointSet1.retainAll(pointSet3);
72 | point3D=pointSet1.get(0);
73 | return point3D;
74 | }
75 |
76 | public Point3D getBackPoint(Point3D centerPoint){
77 | double max=0,distance=0;
78 | Point3D point3D=new Point3D();
79 | List list=new ArrayList();
80 | list.add(square1.getPoint1());list.add(square1.getPoint2());
81 | list.add(square1.getPoint3());list.add(square1.getPoint4());
82 | list.add(square2.getPoint1());list.add(square2.getPoint2());
83 | list.add(square2.getPoint3());list.add(square2.getPoint4());
84 | list.add(square3.getPoint1());list.add(square3.getPoint2());
85 | list.add(square3.getPoint3());list.add(square3.getPoint4());
86 | for (Iterator iterator = list.iterator(); iterator.hasNext();) {
87 | Point3D point3d = (Point3D) iterator.next();
88 | distance=Math.sqrt(Math.pow(point3d.x-centerPoint.x, 2)
89 | +Math.pow(point3d.y-centerPoint.y, 2)
90 | +Math.pow(point3d.z-centerPoint.z, 2));
91 | if (distance>max) {
92 | max=distance;
93 | point3D=point3d;
94 | }
95 | }
96 | return point3D;
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/MagicCube/src/EdgeBlock.java:
--------------------------------------------------------------------------------
1 | import java.awt.Graphics2D;
2 |
3 | import math3D.Point3D;
4 |
5 | /**
6 | * 棱块,共12个
7 | *
8 | */
9 | public class EdgeBlock {
10 |
11 | private Square square1;
12 | private Square square2;
13 |
14 | /**
15 | * 棱块构造函数
16 | * @param square1
17 | * @param square2
18 | */
19 | public EdgeBlock(Square square1, Square square2) {
20 | super();
21 | this.square1 = square1;
22 | this.square2 = square2;
23 | }
24 |
25 | * 楞块绕经过(0,0,0),point两点的直线旋转angle角度
26 | * @param point:空间一点
27 | * @param angle:旋转角度
28 | * @param clockwise: true为顺时针,false为逆时针
29 | */
30 | public void rotate(Point3D point, double angle, boolean clockwise){
31 | square1.rotate(point, angle, clockwise);
32 | square2.rotate(point, angle, clockwise);
33 | }
34 |
35 | /**
36 | * 绕XY中旋转角度angle
37 | * @param angle
38 | */
39 | public void rotateXY(double angleX, double angleY) {
40 | square1.rotateXY(angleX, angleY);
41 | square2.rotateXY(angleX, angleY);
42 | }
43 |
44 | public void draw(Graphics2D graphics2D){
45 | square1.draw(graphics2D);
46 | square2.draw(graphics2D);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/MagicCube/src/MainFrame.java:
--------------------------------------------------------------------------------
1 | import java.awt.Graphics;
2 | import java.awt.Graphics2D;
3 | import java.awt.Point;
4 | import java.awt.event.KeyAdapter;
5 | import java.awt.event.KeyEvent;
6 | import java.awt.event.WindowEvent;
7 |
8 | import javax.swing.JFrame;
9 | import javax.swing.JLabel;
10 |
11 | import math3D.VTs;
12 |
13 |
14 | public class MainFrame extends JFrame implements Runnable {
15 |
16 | private static final long serialVersionUID = 1L;
17 |
18 | //Canvas canvas=new Canvas();
19 |
20 |
21 | VTs vTs = new VTs();
22 |
23 |
24 | Point oldPoint;
25 | double angleX,angleY;
26 |
27 |
28 | private Canvas_Cube canvas_Cube=new Canvas_Cube();
29 |
30 | public static void main(String args[]) {
31 | MainFrame workStart=new MainFrame();
32 | }
33 |
34 | public MainFrame() {
35 | super("MagicCube");
36 | setSize(700, 700);
37 |
38 | //enableEvents(AWTEvent.WINDOW_EVENT_MASK);
39 |
40 | setVisible(true);
41 | setResizable(false);
42 | addKeyListener(new MyKeyListenner());
43 | JLabel label=new JLabel("鼠标选择要旋转的面。按D键或→键顺时针旋转;按S键或←键逆时针旋转");
44 | canvas_Cube.add(label);
45 | add(canvas_Cube);
46 | }
47 |
48 | public void processWindowEvent(WindowEvent e) {
49 | if(e.getID() == WindowEvent.WINDOW_CLOSING) {
50 | System.exit(0);
51 | }
52 | }
53 |
54 | public void run() {
55 | while(true) {
56 | }
57 | }
58 |
59 | public void paint(Graphics g) {
60 | Graphics2D graphics2D=(Graphics2D)g;
61 | paintComponents(graphics2D);
62 | }
63 |
64 | private class MyKeyListenner extends KeyAdapter{
65 | @Override
66 | public void keyPressed(KeyEvent e) {
67 | super.keyPressed(e);
68 | if (e.getKeyCode()==KeyEvent.VK_CONTROL) {
69 | System.out.println("制表符");
70 |
71 | } else if((e.getKeyCode()==KeyEvent.VK_LEFT||e.getKeyCode()==KeyEvent.VK_A)&&!canvas_Cube.isRotating()) {
72 | System.out.println("左");
73 | if (canvas_Cube.selected==canvas_Cube.BLUE) {
74 | canvas_Cube.rotateBlue90(false);
75 | }else if (canvas_Cube.selected==canvas_Cube.ORANGE) {
76 | canvas_Cube.rotateOrange90(false);
77 | }else if (canvas_Cube.selected==canvas_Cube.GREEN) {
78 | canvas_Cube.rotateGreen90(false);
79 | }else if (canvas_Cube.selected==canvas_Cube.RED) {
80 | canvas_Cube.rotateRed90(false);
81 | }else if (canvas_Cube.selected==canvas_Cube.YELLOW) {
82 | canvas_Cube.rotateYellow90(false);
83 | }else if (canvas_Cube.selected==canvas_Cube.WHITE) {
84 | canvas_Cube.rotateWhite90(false);
85 | }
86 | canvas_Cube.update(canvas_Cube.getGraphics());
87 | }else if((e.getKeyCode()==KeyEvent.VK_RIGHT||e.getKeyCode()==KeyEvent.VK_D)&&!canvas_Cube.isRotating()) {
88 | System.out.println("右");
89 | if (canvas_Cube.selected==canvas_Cube.BLUE) {
90 | canvas_Cube.rotateBlue90(true);
91 | }else if (canvas_Cube.selected==canvas_Cube.ORANGE) {
92 | canvas_Cube.rotateOrange90(true);
93 | }else if (canvas_Cube.selected==canvas_Cube.GREEN) {
94 | canvas_Cube.rotateGreen90(true);
95 | }else if (canvas_Cube.selected==canvas_Cube.RED) {
96 | canvas_Cube.rotateRed90(true);
97 | }else if (canvas_Cube.selected==canvas_Cube.YELLOW) {
98 | canvas_Cube.rotateYellow90(true);
99 | }else if (canvas_Cube.selected==canvas_Cube.WHITE) {
100 | canvas_Cube.rotateWhite90(true);
101 | }
102 | canvas_Cube.update(canvas_Cube.getGraphics());
103 | }
104 | }
105 | }
106 | }
107 |
108 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/MagicCube/src/Square.java:
--------------------------------------------------------------------------------
1 | import java.awt.BasicStroke;
2 | import java.awt.Color;
3 | import java.awt.Graphics2D;
4 | import java.awt.Point;
5 |
6 | import math3D.Point3D;
7 | import math3D.VTs;
8 | /**
9 | * 魔方面上的小正方形
10 | *
11 | */
12 | public class Square {
13 |
14 | private Point3D point1;
15 | private Point3D point2;
16 | private Point3D point3;
17 | private Point3D point4;
18 | private Color color;
19 | private double Nx, Ny, Nz;
20 |
21 | public Point3D getPoint1() {
22 | return point1;
23 | }
24 |
25 |
26 |
27 | public void setPoint1(Point3D point1) {
28 | this.point1 = point1;
29 | }
30 |
31 |
32 |
33 | public Point3D getPoint2() {
34 | return point2;
35 | }
36 |
37 |
38 |
39 | public void setPoint2(Point3D point2) {
40 | this.point2 = point2;
41 | }
42 |
43 |
44 |
45 | public Point3D getPoint3() {
46 | return point3;
47 | }
48 |
49 |
50 |
51 | public void setPoint3(Point3D point3) {
52 | this.point3 = point3;
53 | }
54 |
55 |
56 |
57 | public Point3D getPoint4() {
58 | return point4;
59 | }
60 |
61 |
62 |
63 | public void setPoint4(Point3D point4) {
64 | this.point4 = point4;
65 | }
66 |
67 | private final int VIEWERROR=1000;
68 |
69 | /**
70 | * 小方块构造函数
71 | * @param point1
72 | * @param point2
73 | * @param point3
74 | * @param point4
75 | * @param color
76 | */
77 | public Square(Point3D point1, Point3D point2, Point3D point3,
78 | Point3D point4, Color color) {
79 | super();
80 | this.point1 = point1;
81 | this.point2 = point2;
82 | this.point3 = point3;
83 | this.point4 = point4;
84 | this.color = color;
85 | }
86 |
87 |
88 |
89 |
90 | /**
91 | * 小方格绕经过(0,0,0),point两点的直线旋转angle角度
92 | * @param point:空间一点
93 | * @param angle:旋转角度
94 | * @param clockwise: true为顺时针,false为逆时针
95 | */
96 | public void rotate(Point3D point, double angle, boolean clockwise){
97 | if (clockwise) {
98 | point1.rotateXYZ(point.x, point.y, point.z, -angle);
99 | point2.rotateXYZ(point.x, point.y, point.z, -angle);
100 | point3.rotateXYZ(point.x, point.y, point.z, -angle);
101 | point4.rotateXYZ(point.x, point.y, point.z, -angle);
102 | } else {
103 | point1.rotateXYZ(point.x, point.y, point.z, angle);
104 | point2.rotateXYZ(point.x, point.y, point.z, angle);
105 | point3.rotateXYZ(point.x, point.y, point.z, angle);
106 | point4.rotateXYZ(point.x, point.y, point.z, angle);
107 | }
108 | }
109 |
110 | /**
111 | * 绕X中旋转角度angle
112 | * @param angle
113 | */
114 | public void rotateX(double angle) {
115 | point1.rotateX(angle);
116 | point2.rotateX(angle);
117 | point3.rotateX(angle);
118 | point4.rotateX(angle);
119 | }
120 |
121 | /**
122 | * 绕Y中旋转角度angle
123 | * @param angle
124 | */
125 |
126 | public void rotateY(double angle) {
127 | point1.rotateY(angle);
128 | point2.rotateY(angle);
129 | point3.rotateY(angle);
130 | point4.rotateY(angle);
131 | }
132 |
133 | /**
134 | * 绕XY中旋转角度angle
135 | * @param angle
136 | */
137 | public void rotateXY(double angleX, double angleY) {
138 | point1.rotateXY(angleX,angleY);
139 | point2.rotateXY(angleX,angleY);
140 | point3.rotateXY(angleX,angleY);
141 | point4.rotateXY(angleX,angleY);
142 | }
143 |
144 | private void vectNormal(){
145 | double Ux=point1.x-point2.x; double Uy=point1.y-point2.y; double Uz=point1.z-point2.z;
146 | double Vx=point2.x-point3.x; double Vy=point2.y-point3.y; double Vz=point2.z-point3.z;
147 |
148 | this.Nx=Uy*Vz - Uz*Vy;
149 | this.Ny=Uz*Vx - Ux*Vz;
150 | this.Nz=Ux*Vy - Uy*Vx;
151 | }
152 |
153 | public double getHidden() {
154 | vectNormal();
155 | return Nz;
156 | }
157 |
158 | public void draw(Graphics2D graphics2D){
159 | if (getHidden()>VIEWERROR) {
160 | Point p1=new Point();Point p2=new Point();
161 | Point p3=new Point();Point p4=new Point();
162 | point1.getPoint2D(p1);point2.getPoint2D(p2);
163 | point3.getPoint2D(p3);point4.getPoint2D(p4);
164 | VTs.view_To_screen(p1);VTs.view_To_screen(p2);
165 | VTs.view_To_screen(p3);VTs.view_To_screen(p4);
166 |
167 | graphics2D.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND,
168 | BasicStroke.JOIN_ROUND));
169 | graphics2D.setColor(Color.black);
170 | graphics2D.drawLine(p1.x, p1.y, p2.x, p2.y);
171 | graphics2D.drawLine(p2.x, p2.y, p3.x, p3.y);
172 | graphics2D.drawLine(p3.x, p3.y, p4.x, p4.y);
173 | graphics2D.drawLine(p4.x, p4.y, p1.x, p1.y);
174 |
175 | graphics2D.setColor(color);
176 |
177 | int X1234[] = { p1.x, p2.x, p3.x, p4.x };
178 | int Y1234[] = { p1.y, p2.y, p3.y, p4.y };
179 | graphics2D.fillPolygon(X1234, Y1234, 4);
180 | }
181 | }
182 | }
183 |
--------------------------------------------------------------------------------
/MagicCube/src/math3D/Point3D.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/src/math3D/Point3D.java
--------------------------------------------------------------------------------
/MagicCube/src/math3D/VTs.java:
--------------------------------------------------------------------------------
1 | package math3D;
2 | import java.awt.*;
3 |
4 | public class VTs {
5 |
6 | public int viewX_To_screenX(int x) {
7 | return x + 700/2;
8 | }
9 |
10 | public int viewY_To_screenY(int y) {
11 | return -y + 700/2;
12 | }
13 |
14 | public static Point view_To_screen(Point point){
15 | point.x=point.x+700/2;
16 | point.y=700/2-point.y;
17 | return point;
18 | }
19 |
20 | /*public Point view_To_screen1(Point point){
21 | point.x=point.x+700/2;
22 | point.y=700/2-point.y;
23 | return point;
24 | }*/
25 | }
--------------------------------------------------------------------------------
/MagicCube/src/math3D/normal_hidden.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/src/math3D/normal_hidden.class
--------------------------------------------------------------------------------
/MagicCube/src/math3D/project3D_To_2D.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/src/math3D/project3D_To_2D.class
--------------------------------------------------------------------------------
/MagicCube/src/math3D/rotate_calculator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/src/math3D/rotate_calculator.class
--------------------------------------------------------------------------------
/MagicCube/src/math3D/view_To_screen_coordinates.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/MagicCube/src/math3D/view_To_screen_coordinates.class
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # JAVA_小游戏合集
2 | 这里整理了一些以前上学时学习过的练手用的JAVA小游戏合集,涵盖了JAVA多方面的知识点
3 |
4 | 一、Java基础(语言、集合框架、OOP、设计模式等)
5 |
6 | 二、Java高级(JavaEE、框架、服务器、工具等)
7 |
8 | 三、多线程和并发
9 |
10 | 四、Java虚拟机
11 |
12 | 五、数据库(Sql、MySQL、Redis等)
13 |
14 | 六、算法与数据结构
15 |
16 |
17 | # JAVA_ Small Game Collection
18 |
19 | Here is a collection of JAVA small games that I learned to practice in school, covering various knowledge points of JAVA
20 |
21 | 1、 Java Fundamentals (Language, Collection Framework, OOP, Design Patterns, etc.)
22 |
23 | 2、 Advanced Java (JavaEE, frameworks, servers, tools, etc.)
24 |
25 | 3、 Multithreading and concurrency
26 |
27 | 4、 Java Virtual Machine
28 |
29 | 5、 Database (SQL, MySQL, Redis, etc.)
30 |
31 | 6、 Algorithms and Data Structures
32 |
--------------------------------------------------------------------------------
/表白二维码/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/表白二维码/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/表白二维码/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/表白二维码/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | 1583377671558
70 |
71 |
72 | 1583377671558
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/表白二维码/TT.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/表白二维码/TT.jpg
--------------------------------------------------------------------------------
/表白二维码/out/production/表白二维码/day20200305/Code01.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/表白二维码/out/production/表白二维码/day20200305/Code01.class
--------------------------------------------------------------------------------
/表白二维码/out/production/表白二维码/lib/core-3.3.3.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jacksx20/JAVA_GameAll/bb3fa50a04f1f9dd85f7b8817ed6ca146db7e8a8/表白二维码/out/production/表白二维码/lib/core-3.3.3.jar
--------------------------------------------------------------------------------
/表白二维码/src/day20200305/Code01.java:
--------------------------------------------------------------------------------
1 | package day20200305;
2 |
3 | import java.awt.Color;
4 | import java.awt.image.BufferedImage;
5 | import java.io.File;
6 | import java.util.HashMap;
7 | import java.util.Map;
8 |
9 | import javax.imageio.ImageIO;
10 |
11 | import com.google.zxing.BarcodeFormat;
12 | import com.google.zxing.EncodeHintType;
13 | import com.google.zxing.MultiFormatWriter;
14 | import com.google.zxing.WriterException;
15 | import com.google.zxing.common.BitMatrix;
16 | import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
17 |
18 | /**
19 | * 二维码表白女神or感恩妈妈?
20 | *
21 | * Jack20
22 | * core-3.3.3.jar
23 | *
24 | *
25 | */
26 | public class Code01 {
27 |
28 | public static void main(String[] args) {
29 | getCode(400,400,"jpg","我爱你","C:\\Users\\Jack\\Desktop\\表白二维码\\TT.jpg");
30 | }
31 |
32 | //设置两个常量用来标注颜色
33 | private static final int BLACK = Color.BLACK.getRGB();
34 | private static final int WHITE = Color.WHITE.getRGB();
35 |
36 | /**
37 | * 获取二维码图片
38 | * @param width 图片宽度
39 | * @param height 图片高度
40 | * @param type 图片类型(jpg,png)
41 | * @param content 二维码携带的内容
42 | * @param path 存放的路径
43 | *
44 | * 集合,IO文件的操作,图片,常量,jar
45 | */
46 | public static void getCode(int width,int height,String type,String content,String path) {
47 | //1.设置二维码的基本信息(纠错等级,留白)
48 |
49 | Map map = new HashMap();
50 | //添加put()
51 | //字符集
52 | map.put(EncodeHintType.CHARACTER_SET, "UTF-8");
53 | //留白
54 | map.put(EncodeHintType.MARGIN, 2);
55 | //纠错等级 L(7%) M(15%) Q(25%) H(30%)
56 | map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
57 |
58 | //二维码图片输出流
59 | MultiFormatWriter mu = new MultiFormatWriter();
60 | //encode():内容,码的类型,宽度,高度,基本信息
61 | //BitMatrix:二维矩阵类
62 | try {
63 | BitMatrix bit = mu.encode(content, BarcodeFormat.QR_CODE, width, height, map);
64 |
65 | //画图
66 | BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
67 |
68 | for(int i=0; i
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------