Esempio n. 1
0
        private void GenerateTilesList()
        {
            _TilesList = new List <BoardTileViewModel>();

            int tilesCount = 64;
            int row        = 0;
            int column     = 0;

            for (int tileIndex = 0; tileIndex < tilesCount; tileIndex++)
            {
                var position            = new Position(column, row);
                var figure              = _FiguresList.FirstOrDefault(f => f.TileIndex == tileIndex);
                BoardTileViewModel tile = new BoardTileViewModel(figure, tileIndex, position);
                tile.Click      += Tile_Click;
                tile.MouseEnter += Tile_Enter;
                tile.MouseLeave += Tile_Leave;

                _TilesList.Add(tile);
                if (column == 7)
                {
                    row++;
                    column = 0;
                }
                else
                {
                    column++;
                }
            }
        }
Esempio n. 2
0
        private bool IsPossibleToMove(BoardTileViewModel caller, Position newPosition)
        {
            bool isWithinBoard = IsWithinBoard(newPosition);
            bool isAlly        = IsAlly(caller);

            return(isWithinBoard && !isAlly);
        }
Esempio n. 3
0
 private void CheckSelectedStyle(BoardTileViewModel tile)
 {
     if (selectedTile != null && selectedTile.Figure != null && selectedTile.Equals(tile))
     {
         BoardTiles.Where(boardTile => boardTile.Figure != null).ToList().ForEach(boardTile => SetBaseStyle(boardTile));
         SetSelectedStyle(tile);
     }
 }
Esempio n. 4
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. 5
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. 6
0
        private void Tile_Enter(BoardTileViewModel eventCaller)
        {
            if (eventCaller.Figure != null && eventCaller.Figure.Color == actualPlayerColor)
            {
                SetSelectedStyle(eventCaller);
            }
            else if (selectedTile != null && eventCaller.Position.Equals(ResolveFigurePosition(eventCaller)))
            {
                SetEnabledStyle(eventCaller);
            }
            else if (selectedTile != null && !eventCaller.Position.Equals(ResolveFigurePosition(eventCaller)))
            {
                SetDisabledStyle(eventCaller);
            }
            else
            {
                SetBaseStyle(eventCaller);
            }

            CheckSelectedStyle(eventCaller);
        }
Esempio n. 7
0
        private void Tile_Click(BoardTileViewModel eventCaller)
        {
            if (selectedTile != null && eventCaller.Position.Equals(ResolveFigurePosition(eventCaller)))
            {
                var oldFigure      = eventCaller.Figure;
                var selectedFigure = selectedTile.Figure;
                SetBaseStyle(selectedTile);
                selectedTile.Figure = null;
                selectedTile        = null;

                Castling(eventCaller, selectedFigure);

                selectedFigure.Position = eventCaller.Position;
                eventCaller.Figure      = selectedFigure;
                SetBaseStyle(eventCaller);

                if (oldFigure != null)
                {
                    BoardFigures.Remove(oldFigure);
                }

                if (IsPromotion(eventCaller, selectedFigure))
                {
                    ShowPromotion(eventCaller, selectedFigure);
                }
                else
                {
                    Mediator.NotifyColleagues("ChangePlayer", actualPlayerColor);
                }
            }
            else if (eventCaller.Figure != null && eventCaller.Figure.Color.Equals(actualPlayerColor))
            {
                selectedTile = eventCaller;
                CheckSelectedStyle(eventCaller);
                GeneratePossiblePositions(selectedTile.Figure);
            }
        }
Esempio n. 8
0
 private bool IsAlly(BoardTileViewModel caller)
 {
     return(caller.Figure == null ? false : caller.Figure.Color == selectedTile.Figure.Color);
 }
Esempio n. 9
0
 private Position ResolveFigurePosition(BoardTileViewModel caller)
 {
     return(selectedTile.Figure.PossiblePositions.Contains(caller.Position) && IsPossibleToMove(caller, caller.Position) ? caller.Position : null);
 }
Esempio n. 10
0
 private void SetEnabledStyle(BoardTileViewModel tile)
 {
     tile.Stroke          = StaticResources.BORDER_ENABLED_TILE_COLOR;
     tile.StrokeThickness = 3;
     tile.Cursor          = Cursors.Hand;
 }
Esempio n. 11
0
 private void SetBaseStyle(BoardTileViewModel tile)
 {
     tile.Stroke          = StaticResources.BORDER_TILE_COLOR;
     tile.StrokeThickness = 1;
     tile.Cursor          = Cursors.Arrow;
 }
Esempio n. 12
0
 private void SetSelectedStyle(BoardTileViewModel tile)
 {
     tile.Stroke          = StaticResources.BORDER_SELECTED_TILE_COLOR;
     tile.StrokeThickness = 3;
     tile.Cursor          = Cursors.Hand;
 }
Esempio n. 13
0
 private void Tile_Leave(BoardTileViewModel eventCaller)
 {
     SetBaseStyle(eventCaller);
     CheckSelectedStyle(eventCaller);
 }
Esempio n. 14
0
 private bool IsPromotion(BoardTileViewModel eventCaller, BoardFigure selectedFigure)
 {
     return(selectedFigure.Type == FigureType.Pawn && (eventCaller.Position.Row == 0 || eventCaller.Position.Row == 7));
 }