예제 #1
0
        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);
            }
        }
예제 #2
0
        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;
        }
예제 #3
0
        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();
        }