private void PieceLeftButtonDown(object sender, MouseButtonEventArgs e) { var gameSquare = (GameSquare)sender; if (gameSquare.GameSquareState == GameSquareState.PossibleMove) { var startPiece = squareList.Single(s => s.GameSquareState == GameSquareState.PlayerSelected)?.Piece; var move = CurrentGameState.CalculateAvailableMoves().SingleOrDefault(m => m.StartGamePiece == startPiece && m.EndGamePiece.Xcoord == gameSquare.Xcoord && m.EndGamePiece.Ycoord == gameSquare.Ycoord); var whiteHuman = WhitePlayer as HumanPlayer; var blackHuman = BlackPlayer as HumanPlayer; if (whiteHuman?.CurrentTurn == true && move.StartGamePiece.PieceColour == PieceColour.White) { whiteHuman.SelectedMove = move; } if (blackHuman?.CurrentTurn == true && move.StartGamePiece.PieceColour == PieceColour.Black) { blackHuman.SelectedMove = move; } foreach (var square in squareList) { square.GameSquareState = GameSquareState.Standard; } } else if (gameSquare.GameSquareState == GameSquareState.PlayerSelected) { foreach (var square in squareList) { square.GameSquareState = GameSquareState.Standard; } } else { foreach (var square in squareList) { square.GameSquareState = GameSquareState.Standard; } if (gameSquare.Piece != null) { gameSquare.GameSquareState = GameSquareState.PlayerSelected; SelectedGamePiece = gameSquare.Piece; var possibleMoves = CurrentGameState.CalculateAvailableMoves().Where(m => m.StartGamePiece == gameSquare.Piece); foreach (var possibleMove in possibleMoves) { var possibleSquare = FindSquare(possibleMove.EndGamePiece.Xcoord, possibleMove.EndGamePiece.Ycoord); possibleSquare.GameSquareState = GameSquareState.PossibleMove; } } } }