예제 #1
0
 static void Main(string[] args)
 {
     using (RubiksCube game = new RubiksCube())
     {
         game.Run();
     }
 }
예제 #2
0
        private static void Display()
        {
            RubiksCube cur = rcOld.Count == 0 ? rc : rcOld.Peek();

            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glPushMatrix();
            for (int i = -1; i < 2; ++i)
            {
                for (int j = -1; j < 2; ++j)
                {
                    for (int k = -1; k < 2; ++k)
                    {
                        VisCube(cur.GetCube(new Coordinates(i, j, k)));
                    }
                }
            }
            Gl.glPopMatrix();
            Glut.glutSwapBuffers();
        }
예제 #3
0
        private static void DisplayEdgeRotation()
        {
            RubiksCube            cur       = rcOld.Count == 0 ? rc : rcOld.Peek();
            EdgeRotationEventArgs curERArgs = erArgs.Peek();

            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            double blink     = StdCubeSize + DistBetweenCubes;
            Cube   tmp       = null;
            double direction = 1.0;

            if (curERArgs.ER.Anticlockwise)
            {
                direction = -1.0;
            }
            for (int i = -1; i < 2; ++i)
            {
                for (int j = -1; j < 2; ++j)
                {
                    for (int k = -1; k < 2; ++k)
                    {
                        if (curERArgs.ER.EN == EdgeNum.U && k == 1)
                        {
                            Gl.glPushMatrix();
                            Gl.glTranslated(0, blink, 0);
                            Gl.glRotated(angle, 0, -direction, 0);
                            tmp = cur.GetCube(new Coordinates(i, j, k));
                            VisCube(new Cube(tmp.Colors, new Coordinates(tmp.Coord.X, tmp.Coord.Y, 0)));
                            Gl.glPopMatrix();
                        }
                        else if (curERArgs.ER.EN == EdgeNum.F && i == 1)
                        {
                            Gl.glPushMatrix();
                            Gl.glTranslated(0, 0, blink);
                            Gl.glRotated(angle, 0, 0, -direction);
                            tmp = cur.GetCube(new Coordinates(i, j, k));
                            VisCube(new Cube(tmp.Colors, new Coordinates(0, tmp.Coord.Y, tmp.Coord.Z)));
                            Gl.glPopMatrix();
                        }
                        else if (curERArgs.ER.EN == EdgeNum.R && j == 1)
                        {
                            Gl.glPushMatrix();
                            Gl.glTranslated(blink, 0, 0);
                            Gl.glRotated(angle, -direction, 0, 0);
                            tmp = cur.GetCube(new Coordinates(i, j, k));
                            VisCube(new Cube(tmp.Colors, new Coordinates(tmp.Coord.X, 0, tmp.Coord.Z)));
                            Gl.glPopMatrix();
                        }
                        else if (curERArgs.ER.EN == EdgeNum.L && j == -1)
                        {
                            Gl.glPushMatrix();
                            Gl.glTranslated(-blink, 0, 0);
                            Gl.glRotated(angle, direction, 0, 0);
                            tmp = cur.GetCube(new Coordinates(i, j, k));
                            VisCube(new Cube(tmp.Colors, new Coordinates(tmp.Coord.X, 0, tmp.Coord.Z)));
                            Gl.glPopMatrix();
                        }
                        else if (curERArgs.ER.EN == EdgeNum.B && i == -1)
                        {
                            Gl.glPushMatrix();
                            Gl.glTranslated(0, 0, -blink);
                            Gl.glRotated(angle, 0, 0, direction);
                            tmp = cur.GetCube(new Coordinates(i, j, k));
                            VisCube(new Cube(tmp.Colors, new Coordinates(0, tmp.Coord.Y, tmp.Coord.Z)));
                            Gl.glPopMatrix();
                        }
                        else if (curERArgs.ER.EN == EdgeNum.D && k == -1)
                        {
                            Gl.glPushMatrix();
                            Gl.glTranslated(0, -blink, 0);
                            Gl.glRotated(angle, 0, direction, 0);
                            tmp = cur.GetCube(new Coordinates(i, j, k));
                            VisCube(new Cube(tmp.Colors, new Coordinates(tmp.Coord.X, tmp.Coord.Y, 0)));
                            Gl.glPopMatrix();
                        }
                        else
                        {
                            VisCube(cur.GetCube(new Coordinates(i, j, k)));
                        }
                    }
                }
            }
            //switch (erArgs.ER.EN)
            //{
            //    case EdgeNum.U:
            //        Gl.glTranslated(blink, 0, 0);
            //        Gl.glRotated(angle, direction, 0, 0);
            //        Gl.glTranslated(-blink, 0, 0);
            //        break;
            //    case EdgeNum.F:
            //        Gl.glTranslated(0, 0, blink);
            //        Gl.glRotated(angle, 0, 0, direction);
            //        Gl.glTranslated(0, 0, -blink);
            //        break;
            //    case EdgeNum.R:
            //        Gl.glTranslated(0, blink, 0);
            //        Gl.glRotated(angle, 0, -direction, 0);
            //        Gl.glTranslated(0, -blink, 0);
            //        break;
            //    case EdgeNum.L:
            //        Gl.glTranslated(0, -blink, 0);
            //        Gl.glRotated(angle, 0, direction, 0);
            //        Gl.glTranslated(0, blink, 0);
            //        break;
            //    case EdgeNum.B:
            //        Gl.glTranslated(0, 0, -blink);
            //        Gl.glRotated(angle, 0, 0, -direction);
            //        Gl.glTranslated(0, 0, blink);
            //        break;
            //    case EdgeNum.D:
            //        Gl.glTranslated(-blink, 0, 0);
            //        Gl.glRotated(angle, -direction, 0, 0);
            //        Gl.glTranslated(blink, 0, 0);
            //        break;
            //}
            //Display();
            Glut.glutSwapBuffers();
            AngleIncrementation(curERArgs.ER.On180 ? 180.0 : 90.0);
        }