Exemple #1
0
        /// <summary>
        /// Recursive Method to solve Towers of Hanoi
        /// </summary>
        /// <param name="n">Disk to move</param>
        /// <param name="startPeg">Peg to take disk from</param>
        /// <param name="endPeg">Peg to move disk to</param>
        /// <param name="tempPeg">auxiliary peg</param>
        private void solveTowers(int n, char startPeg, char endPeg, char tempPeg)
        {
            if (n > 0)
            {
                solveTowers(n - 1, startPeg, tempPeg, endPeg);

                Disks currentDisk = _TowerDisks.Find(x => x.DiskNo == n);
                currentDisk.peg = endPeg;

                //Animate
                animate.moveUp(currentDisk.box, 50);
                if (startPeg < endPeg)//Move Right
                {
                    animate.moveRight(currentDisk.box, getDiskX(currentDisk));
                }
                else //move Left
                {
                    animate.moveLeft(currentDisk.box, getDiskX(currentDisk));
                }
                animate.moveDown(currentDisk.box, getDiskY(currentDisk));

                //Format line
                string line = string.Format("Move disk {0} from {1} to {2}", n, startPeg, endPeg);
                Console.WriteLine(line);
                moves.Add(line);
                solveTowers(n - 1, tempPeg, endPeg, startPeg);
            }
        }
Exemple #2
0
        /// <summary>
        /// Get Disk Y position
        /// </summary>
        /// <param name="disk">Disk to check</param>
        /// <returns>Y Position for Disk</returns>
        private int getDiskY(Disks disk)
        {
            int Y       = 0;
            int stackNo = _TowerDisks.Count(x => x.peg == disk.peg);

            Y = panel1.Height - baseHeight - (diskHeight * stackNo);
            return(Y);
        }
Exemple #3
0
        /// <summary>
        /// Get X position for Disk
        /// </summary>
        /// <param name="disk">Disk to check</param>
        /// <returns>X position for Disk</returns>
        private int getDiskX(Disks disk)
        {
            int X   = 0;
            int Peg = 0;

            switch (disk.peg)
            {
            case 'A': Peg = 1; break;

            case 'B': Peg = 2; break;

            case 'C': Peg = 3; break;
            }
            X = ((panel1.Width / 4) * Peg) - (int)(disk.width / 2);

            return(X);
        }
Exemple #4
0
        private Color colorSelector(Disks disk)
        {
            switch (disk.DiskNo)
            {
            case 1: return(Color.Red);

            case 2: return(Color.OrangeRed);

            case 3: return(Color.Yellow);

            case 4: return(Color.Green);

            case 5: return(Color.Blue);

            case 6: return(Color.Purple);

            case 7: return(Color.LightBlue);

            default: return(Color.Black);
            }
        }