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;
                    }
                }
            }
        }