/// <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); }
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; } }
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; }
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; } } } }
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); }
private bool IsPromotion(BoardTileViewModel eventCaller, BoardFigure selectedFigure) { return(selectedFigure.Type == FigureType.Pawn && (eventCaller.Position.Row == 0 || eventCaller.Position.Row == 7)); }