//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); }
/// <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(); } }
/// <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); } }
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); }