Ejemplo n.º 1
0
        private void DrawMoveMovement(Move move, CanvasElement canvasElem)
        {
            foreach (var piece in move.BeatedPieces ?? new List <BeatedPiece>())
            {
                foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is EllipseGeometry && e.X == piece.Row && e.Y == piece.Column).ToList())
                {
                    BoardCanvasElements.Remove(elem);
                }
            }

            canvasElem.Row    = skipSize * (Game.Board.Size - 1 - move.NewPiece.Row) + skipSize / 2;
            canvasElem.Column = skipSize * move.NewPiece.Column + skipSize / 2;
            canvasElem.X      = move.NewPiece.Row;
            canvasElem.Y      = move.NewPiece.Column;

            if (move.NewPiece.IsKing && !move.OldPiece.IsKing)
            {
                BoardCanvasElements.Add(new Model.CanvasElement
                {
                    Row      = skipSize * (Game.Board.Size - 1 - move.NewPiece.Row) + skipSize / 2,
                    Column   = skipSize * move.NewPiece.Column + skipSize / 2,
                    Geometry = new EllipseGeometry {
                        RadiusX = skipSize / 4, RadiusY = skipSize / 4
                    },
                    Thickness = 2,
                    Stroke    = move.NewPiece.Color == PieceColor.Black ? Brushes.White : Brushes.Black,
                    X         = move.NewPiece.Row,
                    Y         = move.NewPiece.Column
                });
            }
        }
Ejemplo n.º 2
0
        private List <Piece> ConvertPathListToPieceList(List <Path> paths)
        {
            List <Piece> ret = new List <Piece>();

            foreach (var path in paths)
            {
                var elem = BoardCanvasElements.SingleOrDefault(e => e.Geometry == path.Data);
                ret.Add(new Piece(elem.X, elem.Y, PieceColor.White, Game.Board.Size, false));
            }
            return(ret);
        }
Ejemplo n.º 3
0
 private void DrawMoveTargets(Move move)
 {
     foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is RectangleGeometry && e.X == move.OldPiece.Row && e.Y == move.OldPiece.Column).ToList())
     {
         elem.Fill = Brushes.DarkOrange;
     }
     foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is RectangleGeometry && e.X == move.NewPiece.Row && e.Y == move.NewPiece.Column).ToList())
     {
         elem.Fill = Brushes.DarkOrange;
     }
     foreach (var piece in Game.Board.LastMove?.BeatedPieces ?? new List <BeatedPiece>())
     {
         foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is RectangleGeometry && e.X == piece.Row && e.Y == piece.Column).ToList())
         {
             elem.Fill = Brushes.Crimson;
         }
     }
 }
Ejemplo n.º 4
0
 private void RemoveLastMoveTargets(Move move)
 {
     if (lastMove != null)
     {
         foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is RectangleGeometry && e.X == lastMove.OldPiece.Row && e.Y == lastMove.OldPiece.Column).ToList())
         {
             elem.Fill = Brushes.Peru;
         }
         foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is RectangleGeometry && e.X == lastMove.NewPiece.Row && e.Y == lastMove.NewPiece.Column).ToList())
         {
             elem.Fill = Brushes.Peru;
         }
         foreach (var piece in lastMove?.BeatedPieces ?? new List <BeatedPiece>())
         {
             foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is RectangleGeometry && e.X == piece.Row && e.Y == piece.Column).ToList())
             {
                 elem.Fill = Brushes.Peru;
             }
         }
     }
 }
Ejemplo n.º 5
0
        private void AnimateMovement(Move move)
        {
            foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is EllipseGeometry && e.X == move.OldPiece.Row && e.Y == move.OldPiece.Column).ToList())
            {
                var x = elem.Geometry;
                if (Window.FindName("MyAnimatedEllipseGeometry") != null)
                {
                    Window.UnregisterName("MyAnimatedEllipseGeometry");
                }
                Window.RegisterName("MyAnimatedEllipseGeometry", x);

                PathGeometry animationPath = new PathGeometry();
                Point        position      = new Point(move.OldPiece.Column, move.OldPiece.Row);
                PathFigure   pFigure       = new PathFigure();
                pFigure.StartPoint = new Point(0, 0);
                PolyLineSegment lineSegment = new PolyLineSegment();
                double          xDiff, yDiff;
                foreach (var beatPositionPiece in move.BeatedPieces?.Skip(1) ?? new List <BeatedPiece>())
                {
                    xDiff = ((skipSize * beatPositionPiece.BeatPieceColumn + skipSize / 2) - (skipSize * position.X + skipSize / 2));
                    yDiff = (skipSize * (Game.Board.Size - 1 - beatPositionPiece.BeatPieceRow) + skipSize / 2) - (skipSize * (Game.Board.Size - 1 - position.Y) + skipSize / 2);
                    if (lineSegment.Points.Count > 0)
                    {
                        lineSegment.Points.Add(new Point(lineSegment.Points.Last().X + xDiff, lineSegment.Points.Last().Y + yDiff));
                    }
                    else
                    {
                        lineSegment.Points.Add(new Point(xDiff, yDiff));
                    }
                    position = new Point(beatPositionPiece.BeatPieceColumn, beatPositionPiece.BeatPieceRow);
                }
                xDiff = (skipSize * move.NewPiece.Column + skipSize / 2) - (skipSize * position.X + skipSize / 2);
                yDiff = (skipSize * (Game.Board.Size - 1 - move.NewPiece.Row) + skipSize / 2) - (skipSize * (Game.Board.Size - 1 - position.Y) + skipSize / 2);
                if (lineSegment.Points.Count > 0)
                {
                    lineSegment.Points.Add(new Point(lineSegment.Points.Last().X + xDiff, lineSegment.Points.Last().Y + yDiff));
                }
                else
                {
                    lineSegment.Points.Add(new Point(xDiff, yDiff));
                }
                pFigure.Segments.Add(lineSegment);
                animationPath.Figures.Add(pFigure);
                animationPath.Freeze();


                PointAnimationUsingPath myPointAnimation = new PointAnimationUsingPath();
                myPointAnimation.Duration     = TimeSpan.FromSeconds((double)MoveAnimationTime / 100 * ((move.BeatedPieces?.Count()) ?? 1));
                myPointAnimation.FillBehavior = FillBehavior.Stop;
                myPointAnimation.PathGeometry = animationPath;

                AnimationCompleted          = false;
                myPointAnimation.Completed += delegate
                {
                    DrawMoveMovement(move, elem);
                    Thread.Sleep(100);
                    AnimationCompleted = true;
                };

                // Set the animation to target the Center property
                // of the object named "MyAnimatedEllipseGeometry."
                Storyboard.SetTargetName(myPointAnimation, "MyAnimatedEllipseGeometry");
                Storyboard.SetTargetProperty(
                    myPointAnimation, new PropertyPath(EllipseGeometry.CenterProperty));

                // Create a storyboard to apply the animation.
                Storyboard ellipseStoryboard             = new Storyboard();
                ellipseStoryboard.Children.Add(myPointAnimation);
                ellipseStoryboard.Begin(Window);
                elem.Geometry = x;
            }
        }
Ejemplo n.º 6
0
        public void DrawHistoryBoard(int moveNumber)
        {
            if (moveNumber == Game.History.Count)
            {
                DrawCurrentBoard();
                return;
            }
            BoardCanvasElements.Clear();
            int skipSize = 700 / Game.Board.Size;
            int index    = 0;

            for (int i = 0; i != Game.Board.Size; i++)
            {
                for (int j = 0; j != Game.Board.Size; j++)
                {
                    BoardCanvasElements.Add(new Model.CanvasElement
                    {
                        Row      = skipSize * j,
                        Column   = skipSize * i,
                        Geometry = new RectangleGeometry {
                            Rect = new System.Windows.Rect(0, 0, skipSize, skipSize)
                        },
                        Fill = index++ % 2 == 1 ? Brushes.Peru : Brushes.AntiqueWhite,
                        X    = Game.Board.Size - 1 - j,
                        Y    = i
                    });
                }
                index++;
            }
            foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is RectangleGeometry && e.X == Game.History[moveNumber].Board.LastMove.OldPiece.Row && e.Y == Game.History[moveNumber].Board.LastMove.OldPiece.Column).ToList())
            {
                elem.Fill = Brushes.DarkOrange;
            }
            foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is RectangleGeometry && e.X == Game.History[moveNumber].Board.LastMove.NewPiece.Row && e.Y == Game.History[moveNumber].Board.LastMove.NewPiece.Column).ToList())
            {
                elem.Fill = Brushes.DarkOrange;
            }
            foreach (var piece in Game.History[moveNumber].Board.LastMove?.BeatedPieces ?? new List <BeatedPiece>())
            {
                foreach (var elem in BoardCanvasElements.Where(e => e.Geometry is RectangleGeometry && e.X == piece.Row && e.Y == piece.Column).ToList())
                {
                    elem.Fill = Brushes.Crimson;
                }
            }
            for (int pos = 0; pos != Game.History[moveNumber].Board.Size * Game.History[moveNumber].Board.Size + 1; pos++)
            {
                if (Game.History[moveNumber].Board.BoardArray[pos] != 0)
                {
                    var elem = new Piece(pos, Game.History[moveNumber].Board.BoardArray[pos] > 0 ? PieceColor.White : PieceColor.Black, Game.History[moveNumber].Board.Size, Game.History[moveNumber].Board.BoardArray[pos] == 2 || Game.History[moveNumber].Board.BoardArray[pos] == -2);
                    BoardCanvasElements.Add(new Model.CanvasElement
                    {
                        Row      = skipSize * (Game.Board.Size - 1 - elem.Row) + skipSize / 2,
                        Column   = skipSize * elem.Column + skipSize / 2,
                        Geometry = new EllipseGeometry {
                            RadiusX = skipSize / 3, RadiusY = skipSize / 3
                        },
                        Fill = elem.Color == PieceColor.Black ? Brushes.Black : Brushes.White,
                        X    = elem.Row,
                        Y    = elem.Column
                    });
                    if (elem.IsKing)
                    {
                        BoardCanvasElements.Add(new Model.CanvasElement
                        {
                            Row      = skipSize * (Game.Board.Size - 1 - elem.Row) + skipSize / 2,
                            Column   = skipSize * elem.Column + skipSize / 2,
                            Geometry = new EllipseGeometry {
                                RadiusX = skipSize / 4, RadiusY = skipSize / 4
                            },
                            Stroke    = elem.Color == PieceColor.Black ? Brushes.White : Brushes.Black,
                            Thickness = 2,
                            X         = elem.Row,
                            Y         = elem.Column
                        });
                    }
                }
            }
        }