예제 #1
0
    private IEnumerator ScrambleCube()
    {
        gc.SetGuideNum(Guides.BLANK);

        playPauseButton.GetComponent <Button>().interactable      = nextButton.GetComponent <Button>().interactable =
            lastButton.GetComponent <Button>().interactable       = slowerButton.GetComponent <Button>().interactable =
                fasterButton.GetComponent <Button>().interactable = false;

        Pair <string, bool>[] moves = CubeSolver.Scramble();

        period = SCRAMBLE_PERIOD;

        for (int i = 0; i < moves.Length; i++)
        {
            Pair <string, bool> move = moves[i];

            UpdateScrambleFPR((double)i / moves.Length);

            ct.finishedRotation = false;

            ct.Rotate(move);

            yield return(new WaitUntil(() => ct.finishedRotation));
        }

        StartCoroutine(SolveCube());
    }
예제 #2
0
    //Gets other components
    void Start()
    {
        Reference reference = GetComponent <Reference>();

        cube       = reference.solver;
        visualizer = reference.visualizer;
    }
 void OnDestroy()
 {
     if (instance == this)
     {
         instance = null;
     }
 }
예제 #4
0
    private IEnumerator ColorCube()
    {
        gc.SetGuideNum(Guides.COLORING);

        gameObject.AddComponent <CubeColorer>();

        //All buttons except play/pause button are disabled
        nextButton.GetComponent <Button>().interactable       = lastButton.GetComponent <Button>().interactable =
            fasterButton.GetComponent <Button>().interactable = slowerButton.GetComponent <Button>().interactable = false;

        playPauseButton.GetComponent <Button>().interactable = true;
        playPauseButton.GetComponent <Image>().sprite        = play;
        isPaused = true;

        while (true)
        {
            yield return(new WaitUntil(() => !isPaused));

            if (CubeSolver.IsValidConfiguration(ct.GetBlocks()))
            {
                CubeColorer cc = gameObject.GetComponent <CubeColorer>();
                if (cc != null)
                {
                    Destroy(cc);
                }
                StartCoroutine(SolveCube(false));
                yield break;
            }
        }
    }
예제 #5
0
        static void Main(string[] args)
        {
            CubeSolver solver = new CubeSolver();

            solver.Run();
            Console.WriteLine("Running.");
            Console.ReadKey(true);
        }
예제 #6
0
    void Start()
    {
        Reference reference = GetComponent <Reference>();

        cube = reference.solver;

        previous = new List <GameObject>();
        UpdateVisualization();
    }
예제 #7
0
    public void OnScrambleClick()
    {
        if (!isPaused)
        {
            isPaused = true;
        }

        StopAllCoroutines();

        ct.MakeUnscrambled(true);
        CubeSolver.Reset();

        StartCoroutine(ScrambleCube());
    }
예제 #8
0
    public void OnRecolorClick()
    {
        if (!isPaused)
        {
            isPaused = true;
        }

        StopAllCoroutines();
        CubeSolver.Reset();

        ct.Blacken();

        StartCoroutine(ColorCube());
    }
예제 #9
0
        static void Main(string[] args)
        {
            Cube cube = new Cube();

            DrawFlatCube(cube);

            if (RESOLVE)
            {
                do
                {
                    DrawFlatCube(cube);
                    cube.Scramble(30);
                    CubeSolver solver = new CubeSolver(cube);

                    AlgorithmCollection solution = solver.Solve();
                    solution.Optimize();

                    foreach (AlgorithmViewPair pair in solution)
                    {
                        cube.SetView(pair.View);
                        DrawFlatCube(cube);
                        Wait();

                        foreach (Move move in pair.Algorithm)
                        {
                            cube.ExecuteMove(move);

                            Console.Clear();

                            DrawFlatCube(cube);

                            Wait();
                        }
                    }
                }while (Console.ReadKey().Key == ConsoleKey.Enter);
            }
            else
            {
                while (true)
                {
                    Console.Write("Inserisci mossa: ");
                    Move m = (Move)Enum.Parse(typeof(Move), Console.ReadLine());
                    cube.ExecuteMove(m);

                    DrawFlatCube(cube);
                }
            }

            Console.ReadLine();
        }
예제 #10
0
 void Awake()
 {
     for (int i = 0; i < 3 /*aww*/; i++)
     {
         cubeMatrix[i] = new CubeEntry[3][];
         for (int j = 0; j < 3 /*aww*/; j++)
         {
             cubeMatrix[i][j] = new CubeEntry[3];
         }
     }
     // generate initial cube matrix
     GenerateMatrix();
     GenerateResetPositions();
     solver = gameObject.GetComponent <CubeSolver>();
 }
예제 #11
0
    public void OnResetClick()
    {
        if (!isPaused)
        {
            isPaused = true;
        }

        StopAllCoroutines();
        CubeSolver.Reset();
        ct.MakeUnscrambled(true);

        playPauseButton.GetComponent <Button>().interactable      = nextButton.GetComponent <Button>().interactable =
            lastButton.GetComponent <Button>().interactable       = slowerButton.GetComponent <Button>().interactable =
                fasterButton.GetComponent <Button>().interactable = false;

        gc.SetGuideNum(Guides.BLANK);
    }
        private void AddStepLabels(CubeSolver solver)
        {
            this.lblSolvingMethod.Text = solver.Name;
            // Start pos 15,62
            int y = 62, x = 15;

            foreach (KeyValuePair <string, Tuple <Action, SolutionStepType> > step in solver.SolutionSteps)
            {
                Label l = new Label();
                l.AutoSize = true;
                l.Font     = new Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                l.Location = new Point(x, y);
                l.Name     = string.Format("label{0}", step.Key);
                l.Text     = step.Key;
                panel1.Controls.Add(l);

                PictureBox p = new PictureBox();
                p.Location = new Point(200, y);
                p.Name     = string.Format("pb{0}", step.Key);
                p.Size     = new Size(17, 15);
                p.SizeMode = PictureBoxSizeMode.StretchImage;
                p.TabStop  = false;
                panel1.Controls.Add(p);
                stepImgs.Add(p);

                l          = new Label();
                l.AutoSize = true;
                l.Font     = new Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                l.Location = new Point(217, y);
                l.Name     = string.Format("labelMoves{0}", step.Key);
                panel1.Controls.Add(l);
                stepLabels.Add(l);

                y += 18;
            }

            y += 10;
            this.lblTimeHeader.Location = new Point(10, y);
            y += 18;
            this.lblMovesHeader.Location = new Point(10, y);
            this.Size = new Size(338, y + 103);
        }
        public DialogSolutionFinder(CubeSolver solver, Rubik rubik, Form parent = null)
        {
            this.solver = solver;
            InitializeComponent();
            if (parent != null)
            {
                this.Owner         = parent;
                this.StartPosition = FormStartPosition.CenterParent;
            }
            this.ShowInTaskbar = false;

            AddStepLabels(solver);

            solver.TrySolveAsync(rubik);
            solver.OnSolutionStepCompleted += solver_OnSolutionStepCompleted;
            solver.OnSolutionError         += solver_OnSolutionError;

            stepLabels[currentIndex].Text = "In progress ...";
            stepImgs[currentIndex].Image  = Properties.Resources.refresh;
        }
 private void Awake()
 {
     instance  = this;
     rubikCube = GameObject.Find("RubikCube");
 }
예제 #15
0
 void OnApplicationQuit()
 {
     CubeSolver.RequestStop();
 }
예제 #16
0
파일: Reference.cs 프로젝트: WoodleDev/cube
 void Awake()
 {
     solver     = gameObject.GetComponent <CubeSolver>();
     visualizer = gameObject.GetComponent <CubeVisualizer>();
     user       = gameObject.GetComponent <UserControls>();
 }
예제 #17
0
    private IEnumerator SolveCube(bool ip = true)
    {
        int moves = 0;

        CubeSolver.Solve();

        finishedRotation = true;

        isPaused = ip;

        ct.SetRotationSpeedIndex(4);

        playPauseButton.GetComponent <Button>().interactable = true;
        nextButton.GetComponent <Button>().interactable      = lastButton.GetComponent <Button>().interactable = true;
        fasterButton.GetComponent <Button>().interactable    = slowerButton.GetComponent <Button>().interactable = true;
        playPauseButton.GetComponent <Image>().sprite        = play;

        yield return(new WaitUntil(() => CubeSolver.solution.Count > 0 && CubeSolver.guides.Count > 0));

        int solutionIndex = -1;
        int guideIndex    = 0;

        gc.SetGuideNum(CubeSolver.guides[guideIndex].Item2);

        while (true)
        {
            ct.finishedRotation = false;
            yield return(new WaitUntil(() => !isPaused || stepForward || stepBackward));

            if (!isPaused || stepForward)
            {
                if (solutionIndex < CubeSolver.solution.Count - 1)
                {
                    solutionIndex++;
                    ct.Rotate(CubeSolver.solution[solutionIndex]);
                    if (guideIndex < CubeSolver.guides.Count - 1 && CubeSolver.guides[guideIndex + 1].Item1 == solutionIndex)
                    {
                        gc.SetGuideNum(CubeSolver.guides[++guideIndex].Item2);
                    }
                }
                else
                {
                    ct.finishedRotation = true;
                }
            }
            else
            {
                if (solutionIndex >= 0)
                {
                    ct.Rotate(CubeSolver.solution[solutionIndex].Item1, !CubeSolver.solution[solutionIndex].Item2);
                    solutionIndex--;
                    if (guideIndex > 0 && CubeSolver.guides[guideIndex].Item1 > solutionIndex)
                    {
                        gc.SetGuideNum(CubeSolver.guides[--guideIndex].Item2);
                    }
                }
                else
                {
                    ct.finishedRotation = true;
                }
            }

            stepForward = stepBackward = false;
            yield return(new WaitUntil(() => ct.finishedRotation));

            yield return(new WaitForSeconds(0.1f));
        }
    }
예제 #18
0
 static void Main(string[] args)
 {
     CubeSolver.main(null);
 }