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++; } } }
private bool IsPossibleToMove(BoardTileViewModel caller, Position newPosition) { bool isWithinBoard = IsWithinBoard(newPosition); bool isAlly = IsAlly(caller); return(isWithinBoard && !isAlly); }
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); } }
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 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); }
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); } }
private bool IsAlly(BoardTileViewModel caller) { return(caller.Figure == null ? false : caller.Figure.Color == selectedTile.Figure.Color); }
private Position ResolveFigurePosition(BoardTileViewModel caller) { return(selectedTile.Figure.PossiblePositions.Contains(caller.Position) && IsPossibleToMove(caller, caller.Position) ? caller.Position : null); }
private void SetEnabledStyle(BoardTileViewModel tile) { tile.Stroke = StaticResources.BORDER_ENABLED_TILE_COLOR; tile.StrokeThickness = 3; tile.Cursor = Cursors.Hand; }
private void SetBaseStyle(BoardTileViewModel tile) { tile.Stroke = StaticResources.BORDER_TILE_COLOR; tile.StrokeThickness = 1; tile.Cursor = Cursors.Arrow; }
private void SetSelectedStyle(BoardTileViewModel tile) { tile.Stroke = StaticResources.BORDER_SELECTED_TILE_COLOR; tile.StrokeThickness = 3; tile.Cursor = Cursors.Hand; }
private void Tile_Leave(BoardTileViewModel eventCaller) { SetBaseStyle(eventCaller); CheckSelectedStyle(eventCaller); }
private bool IsPromotion(BoardTileViewModel eventCaller, BoardFigure selectedFigure) { return(selectedFigure.Type == FigureType.Pawn && (eventCaller.Position.Row == 0 || eventCaller.Position.Row == 7)); }