├── 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 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 1582379507203 54 | 59 | 60 | 61 | 62 | 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 | 10 | 11 | 12 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |