Esempio n. 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BoardTileViewModel"/> class.
        /// </summary>
        /// <param name="figure">The figure.</param>
        /// <param name="index">The index.</param>
        /// <param name="position">The position.</param>
        public BoardTileViewModel(BoardFigure figure, int index, Position position)
        {
            bool isWhite = false;
            int  idx     = index / 8;

            if (idx % 2 == 0)
            {
                isWhite = index % 2 == 0;
            }
            else
            {
                isWhite = index % 2 == 1;
            }

            Background      = isWhite ? StaticResources.WHITE_TILE_COLOR : StaticResources.BLACK_TILE_COLOR;
            Stroke          = StaticResources.BORDER_TILE_COLOR;
            StrokeThickness = 1;

            IsActive = false;
            Index    = index;
            Figure   = figure;
            Position = position;

            ClickCommand      = new RelayCommand(OnClick);
            MouseEnterCommand = new RelayCommand(OnMouseEnter);
            MouseLeaveCommand = new RelayCommand(OnMouseLeave);
        }
Esempio n. 2
0
        private void GeneratePossiblePositions(BoardFigure boardFigure)
        {
            switch (boardFigure.Type)
            {
            case FigureType.Pawn:
                boardFigure.PossiblePositions = GeneratePossiblePawnPositions(boardFigure);
                break;

            case FigureType.Rook:
                boardFigure.PossiblePositions = GeneratePossibleRookPositions();
                break;

            case FigureType.Bishop:
                boardFigure.PossiblePositions = GeneratePossibleBishopPositions();
                break;

            case FigureType.Queen:
                boardFigure.PossiblePositions = GeneratePossibleQueenPositions();
                break;

            case FigureType.King:
                boardFigure.PossiblePositions = GeneratePossibleKingPositions();
                break;

            case FigureType.Knight:
                boardFigure.PossiblePositions = GeneratePossibleKnightPositions();
                break;

            default:
                break;
            }
        }
Esempio n. 3
0
 private void ShowPromotion(BoardTileViewModel eventCaller, BoardFigure selectedFigure)
 {
     PromotionViewModel            = new PromotionViewModel(selectedFigure);
     PromotionViewModel.Promotion += () =>
     {
         var fig = new BoardFigure(PromotionViewModel.SelectedFigure.Type, selectedFigure.Color, eventCaller.Position);
         BoardFigures.Remove(eventCaller.Figure);
         eventCaller.Figure = fig;
         ShowPromotionView  = false;
         Mediator.NotifyColleagues("ChangePlayer", actualPlayerColor);
     };
     ShowPromotionView = true;
 }
Esempio n. 4
0
 private void Castling(BoardTileViewModel eventCaller, BoardFigure selectedFigure)
 {
     if (selectedFigure.Type == FigureType.King)
     {
         if (selectedFigure.Color == FigureColor.White && selectedFigure.Position.ToString() == "E1")
         {
             if (eventCaller.Position.ToString() == "G1")
             {
                 var rookOldTile = GetTileViewModelFromPosition("H1");
                 var rookNewTile = GetTileViewModelFromPosition("F1");
                 rookNewTile.Figure          = rookOldTile.Figure;
                 rookNewTile.Figure.Position = rookNewTile.Position;
                 rookOldTile.Figure          = null;
             }
             else if (eventCaller.Position.ToString() == "C1")
             {
                 var rookOldTile = GetTileViewModelFromPosition("A1");
                 var rookNewTile = GetTileViewModelFromPosition("D1");
                 rookNewTile.Figure          = rookOldTile.Figure;
                 rookNewTile.Figure.Position = rookNewTile.Position;
                 rookOldTile.Figure          = null;
             }
         }
         else if (selectedFigure.Color == FigureColor.Dark && selectedFigure.Position.ToString() == "E8")
         {
             if (eventCaller.Position.ToString() == "G8")
             {
                 var rookOldTile = GetTileViewModelFromPosition("H8");
                 var rookNewTile = GetTileViewModelFromPosition("F8");
                 rookNewTile.Figure          = rookOldTile.Figure;
                 rookNewTile.Figure.Position = rookNewTile.Position;
                 rookOldTile.Figure          = null;
             }
             else if (eventCaller.Position.ToString() == "C8")
             {
                 var rookOldTile = GetTileViewModelFromPosition("A8");
                 var rookNewTile = GetTileViewModelFromPosition("D8");
                 rookNewTile.Figure          = rookOldTile.Figure;
                 rookNewTile.Figure.Position = rookNewTile.Position;
                 rookOldTile.Figure          = null;
             }
         }
     }
 }
Esempio n. 5
0
        private List <Position> GeneratePossiblePawnPositions(BoardFigure boardFigure)
        {
            List <Position> possiblePositions = new List <Position>();

            var selectedTilePosition = selectedTile.Position;

            if (boardFigure.Color == FigureColor.White)
            {
                var pos = new Position(selectedTilePosition.Column, selectedTilePosition.Row - 1);
                if (IsWithinBoard(pos) && GetFigureFromPosition(pos) == null)
                {
                    possiblePositions.Add(pos);
                }
                if (selectedTilePosition.Row == 6)
                {
                    pos = new Position(selectedTilePosition.Column, selectedTilePosition.Row - 2);
                    if (IsWithinBoard(pos) && GetFigureFromPosition(pos) == null)
                    {
                        possiblePositions.Add(pos);
                    }
                }

                pos = new Position(selectedTilePosition.Column + 1, selectedTilePosition.Row - 1);
                if (IsWithinBoard(pos) && GetFigureFromPosition(pos) != null)
                {
                    possiblePositions.Add(pos);
                }

                pos = new Position(selectedTilePosition.Column - 1, selectedTilePosition.Row - 1);
                if (IsWithinBoard(pos) && GetFigureFromPosition(pos) != null)
                {
                    possiblePositions.Add(pos);
                }
            }
            else
            {
                var pos = new Position(selectedTilePosition.Column, Math.Max(0, selectedTilePosition.Row + 1));
                if (GetFigureFromPosition(pos) == null)
                {
                    possiblePositions.Add(pos);
                }
                if (selectedTilePosition.Row == 1)
                {
                    pos = new Position(selectedTilePosition.Column, Math.Max(0, selectedTilePosition.Row + 2));
                    if (GetFigureFromPosition(pos) == null)
                    {
                        possiblePositions.Add(pos);
                    }
                }

                pos = new Position(selectedTilePosition.Column + 1, selectedTilePosition.Row + 1);
                if (IsWithinBoard(pos) && GetFigureFromPosition(pos) != null)
                {
                    possiblePositions.Add(pos);
                }

                pos = new Position(selectedTilePosition.Column - 1, selectedTilePosition.Row + 1);
                if (IsWithinBoard(pos) && GetFigureFromPosition(pos) != null)
                {
                    possiblePositions.Add(pos);
                }
            }

            return(possiblePositions);
        }
Esempio n. 6
0
 private bool IsPromotion(BoardTileViewModel eventCaller, BoardFigure selectedFigure)
 {
     return(selectedFigure.Type == FigureType.Pawn && (eventCaller.Position.Row == 0 || eventCaller.Position.Row == 7));
 }