Example #1
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;
        }
Example #2
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);
            }
        }
Example #3
0
        private void BuildStack(List<HanoiDisc> discs, DiscStack discStack, int count, bool reload)
        {
            for (int i = 0; i <= count; i++)
            {

                HanoiDisc hanoiDisc;
                if (!reload)
                {
                    hanoiDisc = new HanoiDisc();
                    discs.Add(hanoiDisc);
                }
                else
                {
                    hanoiDisc = discs[i];
                }

                double left = ((double)(hanoiDisc.GetValue(Canvas.LeftProperty)) == 0 ? leftSpacing : (double)hanoiDisc.GetValue(Canvas.LeftProperty));
                double top = ((double)(hanoiDisc.GetValue(Canvas.TopProperty)) == 0 ? topStart : (double)hanoiDisc.GetValue(Canvas.TopProperty));

                hanoiDisc.SetValue(Grid.ColumnProperty, 0);
                hanoiDisc.VerticalAlignment = System.Windows.VerticalAlignment.Bottom;
                hanoiDisc.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                hanoiDisc.CacheMode = new BitmapCache();

                if (hanoiDisc.Size == 0)
                    hanoiDisc.Size = i;

                double scalex = (hanoiDisc.Size * .058);
                double scaley = (hanoiDisc.Size * .0549);
                hanoiDisc.RenderTransform = new ScaleTransform() { ScaleX = 1 - scalex, ScaleY = 1 - scaley };
                hanoiDisc.ScaleX = scalex;
                hanoiDisc.ScaleY = scaley;

                if (i > 0 && !reload)
                {
                    HanoiDisc previousDisc = discs[i - 1];
                    top = (double)previousDisc.GetValue(Canvas.TopProperty) - (topSpacing - (topSpacing * scaley));
                    left = leftSpacing + ((double)previousDisc.LayoutRoot.Width * scalex) / 2;
                }

                hanoiDisc.Color = hanoiDisc.Size % 2 > 0 ? "Gold" : "Grey";
                hanoiDisc.SetValue(Canvas.LeftProperty, left);
                hanoiDisc.SetValue(Canvas.TopProperty, top);
                hanoiDisc.SetValue(Canvas.ZIndexProperty, 100 + hanoiDisc.Size);
                hanoiDisc.DiscStack = discStack;

                if (!stackRows.ContainsKey(hanoiDisc.Size))
                    stackRows.Add(hanoiDisc.Size, top);
            }
        }
Example #4
0
 public void SetCurrentDiscStack(HanoiDisc current)
 {
     DiscStack stack = current.DiscStack;
     double currentWidth = current.LayoutRoot.Width;
     double left = (double)current.GetValue(Canvas.LeftProperty) + ((currentWidth - (currentWidth * current.ScaleX)) / 2);
     stack = GetDiscStackDestination(stack, left);
     MoveDiscToStack(current, stack);
 }
Example #5
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();
        }
Example #6
0
        public bool IsCurrentDiscOnTop(HanoiDisc current)
        {
            if (stacks[current.DiscStack].Peek() == current)
                return true;

            return false;
        }
Example #7
0
 public int GetDiscIndex(HanoiDisc current)
 {
     HanoiDisc[] discs = stacks[current.DiscStack].ToArray();
     return Array.IndexOf(discs, current);
 }
Example #8
0
        public HanoiDisc GetDiscBelowCurrent(HanoiDisc current)
        {
            HanoiDisc[] discs = stacks[current.DiscStack].ToArray();
            int index = Array.IndexOf(discs, current);
            if (index - 1 > 0)
            {
                return discs[index - 1];
            }

            return null;
        }