Beispiel #1
0
        private static Border GetDestinationBorder(Tile tile, TilesMovePlan mp) // use tile placeholder as reference for tile
        {
            Coordinates dc     = mp.TileDistinationCoordinates[Grid.GetRow(tile), Grid.GetColumn(tile)];
            Border      border = GameBoard.gameBoardGrid.Children.OfType <Border>()
                                 .Where(x => Grid.GetRow(x) == dc.Row && Grid.GetColumn(x) == dc.Column)
                                 .SingleOrDefault();

            return(border);
        }
Beispiel #2
0
        public static Storyboard TranslateTile(Tile tile, TilesMovePlan mp)
        {
            Border destinationBorder = GetDestinationBorder(tile, mp);             // reference object used for movement performance
            Point  diff = destinationBorder.TranslatePoint(new Point(0, 0), tile); // difference in pixels between tile and that destination

            if (tile.CurrentState == Tile.State.Multiply)
            {
                Panel.SetZIndex(tile, 1000); // set multiply tiles on top
            }
            // add translation to tile
            TransformGroup     tg = new TransformGroup();
            TranslateTransform t  = new TranslateTransform();

            tg.Children.Add(t);
            tile.RenderTransform = tg;

            // ease function
            CubicEase easeFunction = new CubicEase();

            easeFunction.EasingMode = EasingMode.EaseIn;

            //animations
            DoubleAnimation TranslateTileXAnimation = new DoubleAnimation();

            TranslateTileXAnimation.BeginTime      = TimeSpan.FromSeconds(0);
            TranslateTileXAnimation.Duration       = new Duration(TimeSpan.FromSeconds(.05));
            TranslateTileXAnimation.EasingFunction = easeFunction;

            DoubleAnimation TranslateTileYAnimation = new DoubleAnimation();

            TranslateTileYAnimation.BeginTime      = TimeSpan.FromSeconds(0);
            TranslateTileYAnimation.Duration       = new Duration(TimeSpan.FromSeconds(.05));
            TranslateTileYAnimation.EasingFunction = easeFunction;

            // storyboard
            Storyboard TranslateTileStoryboard = new Storyboard();

            Storyboard.SetTarget(TranslateTileXAnimation, tile);
            Storyboard.SetTarget(TranslateTileYAnimation, tile);
            Storyboard.SetTargetProperty(TranslateTileXAnimation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)"));
            Storyboard.SetTargetProperty(TranslateTileYAnimation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)"));
            TranslateTileStoryboard.Children.Add(TranslateTileXAnimation);
            TranslateTileStoryboard.Children.Add(TranslateTileYAnimation);
            TranslateTileStoryboard.Completed += new EventHandler((s, e) => TranslateBoxStoryBoard_Completed(s, e, tile, destinationBorder));

            TranslateTileXAnimation.To = diff.X;
            TranslateTileYAnimation.To = diff.Y;

            TranslateTileStoryboard.Begin();

            return(TranslateTileStoryboard);
        }
Beispiel #3
0
        public static Tile AddNewTileOnBoard(TilesMovePlan mp) // add new tile in context of specified move plan
        {
            Tile t = null;

            if (!GameBoard.CheckAndSetGameStateGameOver(mp)) // don't move, if move is impossible
            {
                t = AddNewTileOnBoard(mp.DestinationMatrix);

                mp.SourceMatrix = mp.DestinationMatrix;
                mp.SourceMatrix[Grid.GetRow(t), Grid.GetColumn(t)] = t.GetNumber();
                GameBoard.CheckAndSetGameStateGameOver(mp); // check potencial moves after move performance
            }

            return(t);
        }
Beispiel #4
0
 public static void Move(MovesHandling.MoveDirection direction) // move tiles in one of specified directions
 {
     try
     {
         if (GameBoard.CurrentGameState != GameBoard.GameState.GameOver)            // don't move in case of gameover
         {
             TilesMovePlan mp = MovesHandling.GetTilesMovePlan(direction);          // get move plan in context of specified direction
             if (!GameBoard.CheckAndSetGameStateGameOver(mp) && !mp.IsBlindAlley()) // if move is possible in some direction and also possible in specified direction
             {
                 MovesHandling.GetTIlesDistinationCoordinates(mp);                  // perform all calculations for move plan
                 GameBoard.UpdateTileStates(mp);                                    // change state of tiles if needed
                 GameBoard.SetNewCoordinatesToTilesInGrid(mp);                      // perform move graphically
                 AddNewTileOnBoard(mp);                                             // add one tile after each move
             }
         }
     }
     catch (InvalidOperationException e)
     {
         Debug.Print("Wow, wow, wow... slow down, cowboy!"); // ignoring extremely fast keyboard actions
     }
 }