private static void LoadDiscData(List<HanoiDisc> col1, List<SaveDiscData> listSaveDiscData) { for (int i = 0; i <= listSaveDiscData.Count - 1; i++) { SaveDiscData discData = listSaveDiscData[i]; HanoiDisc hanoiDisc = new HanoiDisc(); hanoiDisc.OriginalLeft = discData.OriginalLeft; hanoiDisc.OriginalTop = discData.OriginalTop; hanoiDisc.SetValue(Canvas.LeftProperty, discData.Left); hanoiDisc.SetValue(Canvas.TopProperty, discData.Top); hanoiDisc.Size = discData.Size; hanoiDisc.DiscStack = discData.DiscStack; col1.Add(hanoiDisc); } }
private bool IsValidMove(HanoiDisc disc, DiscStack toStack) { if ((stacks[toStack].Count > 0 && stacks[toStack].Peek().Size > disc.Size)) { disc.SetValue(Canvas.TopProperty, disc.OriginalTop); disc.SetValue(Canvas.LeftProperty, disc.OriginalLeft); if (App.GameData.GameSettings.VibrateOnInvalidMove) { VibrateController.Default.Start(TimeSpan.FromSeconds(.25)); } return false; } if (disc.DiscStack != toStack) { moves++; } if (App.GameData.GameSettings.PlaySounds) { float volume = Convert.ToSingle(App.GameData.GameSettings.SoundVolume / 100); effect.Play(volume, 0f, 0f); } return true; }
public void MoveDiscToStack(HanoiDisc disc, DiscStack toStack) { if (!IsValidMove(disc, toStack)) return; stacks[disc.DiscStack].Pop(); double top = topStart; if (stacks[toStack].Count > 0) { top = (double)stacks[toStack].Peek().GetValue(Canvas.TopProperty) - (topSpacing - (topSpacing * disc.ScaleY)); } else { top = (topStart + (topSpacing * disc.ScaleY)); } App.Current.RootVisual.Dispatcher.BeginInvoke(() => { double left = stackColumns[toStack] + ((double)disc.LayoutRoot.Width * disc.ScaleX) / 2; disc.SetValue(Canvas.TopProperty, top); disc.SetValue(Canvas.LeftProperty, left); }); stacks[toStack].Push(disc); disc.DiscStack = toStack; if (MoveCompleted != null) MoveCompleted(this, new MoveCompletedEventArgs(moves)); CheckForWin(); }