예제 #1
0
        //public String getText(int cnt)
        //{
        //    return "1";    // Dummy return to avoid syntax error - must be changed
        //}


        //public void backToSelected(int ind)
        //{

        //}


        //public int getPegInd(int ind)
        //{
        //     return disks[ind].getPegNum();
        //}


        //public int getLevel(int ind)
        //{
        //    return disks[ind].getLevel();
        //}


        /// <summary>
        /// Undo the last move
        /// </summary>
        public void unDo()
        {
            DiskMove diskMove = (DiskMove)movements[movements.Count - 1];
            Disk     disk     = disks[diskMove.getDiskInd()];

            board[disk.getPegNum(), disk.getLevel()] = null;
            disk.setLevel(lastLevel);
            disk.setPegNum(lastPegNum);
            board[lastPegNum, lastLevel] = disk;
            movements.Remove(diskMove);
        }
예제 #2
0
        /// <summary>
        /// Load saved moves data
        /// </summary>
        public void loadData()
        {
            try
            {
                using (StreamReader sr = new StreamReader(new FileStream(Application.UserAppDataPath + "\\appdata.txt", FileMode.OpenOrCreate)))
                {
                    while (sr.Peek() >= 0)
                    {
                        DiskMove diskMove = new DiskMove(sr.ReadLine());
                        movements.Add(diskMove);
                    }
                }
            }
            catch (IOException e)
            {
                MessageBox.Show("Error: " + e.ToString());
            }

            if (movements.Count > 0)
            {
                foreach (DiskMove diskMove in movements)
                {
                    int  diskInd = diskMove.getDiskInd();
                    int  pegNum  = diskMove.getPegInd();
                    int  level   = newLevInPeg(pegNum);
                    Disk disk    = disks[diskInd];
                    board[disk.getPegNum(), disk.getLevel()] = null;
                    disk.setPegNum(pegNum);
                    disk.setLevel(level);
                    board[pegNum, level] = disk;

                    if ((pegNum == 2) && (level == 3))
                    {
                        completed = true;
                    }
                }
                Display();
            }
        }
예제 #3
0
        /// <summary>
        /// Draw graphics
        /// </summary>
        public bool drawAnimation()
        {
            if (drawCount < movements.Count)
            {
                DiskMove diskMove = (DiskMove)movements[drawCount++];
                int      diskInd  = diskMove.getDiskInd();
                int      pegNum   = diskMove.getPegInd();
                int      level    = newLevInPeg(pegNum);
                Disk     disk     = disks[diskInd];

                board[disk.getPegNum(), disk.getLevel()] = null;
                disk.setPegNum(pegNum);
                disk.setLevel(level);
                board[pegNum, level] = disk;
                Display();

                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #4
0
        public int animate(int step) // This methode will animate one step at a time. Works in a similar way to move methode
        {
            DiskMove dm = movements[step] as DiskMove;

            int diskIndex = dm.getDiskInd();
            int pegIndex  = dm.getPegInd() + 1;

            string Disk = "";

            if (diskIndex == 0)
            {
                Disk = "lblDisk1";
            }                                               // Find the disk label name
            else if (diskIndex == 1)
            {
                Disk = "lblDisk2";
            }
            else if (diskIndex == 2)
            {
                Disk = "lblDisk3";
            }
            else if (diskIndex == 3)
            {
                Disk = "lblDisk4";
            }

            Disk animateDisk = new Disk();

            foreach (Disk d in disks)
            {
                if ((d.getLabel()).Name == Disk)
                {
                    animateDisk = d;
                }
            }

            if (animateDisk == null)
            {
                return(-1);
            }


            int oldLevel, oldPeg;

            oldLevel = animateDisk.getLevel();
            oldPeg   = animateDisk.getPegNum();

            animateDisk.setPegNum(pegIndex);
            this.board[oldPeg - 1, oldLevel - 1] = null;

            int newLevel = newLevInPeg(pegIndex);

            this.board[pegIndex - 1, newLevel] = animateDisk;
            this.animatemove(animateDisk, newLevel);

            if (step + 1 == movements.Count)
            {
                return(0);    // Return 0 if there are no more moves left to be animated
            }
            return(1);
        }