public PlaceGamePieceResponse PlaceGamePiece(int columnNumber, bool isPlayerOnesTurn)
        {
            var response = new PlaceGamePieceResponse();

            if (!IsValidColumn(columnNumber))
            {
                response.PositionStatus = PositionStatus.Invalid;
                return(response);
            }

            // check for full column
            var topPositionInColumn = new BoardPosition(6, columnNumber);

            if (CustomComparer.PositionHistoryCompare(BoardHistory, topPositionInColumn, PositionHistory.Player1Piece) ||
                CustomComparer.PositionHistoryCompare(BoardHistory, topPositionInColumn, PositionHistory.Player2Piece))
            {
                response.PositionStatus = PositionStatus.ColumnFull;
                return(response);
            }

            var rowNumber = DetermineRowNumber(columnNumber);

            if (rowNumber == 0) //error, somehow a bad column input got through or board was drawn incorrectly
            {
                return(null);
            }

            var position = new BoardPosition(rowNumber, columnNumber);

            response = CheckForVictory(position, isPlayerOnesTurn);

            return(response);
        }
        private PlaceGamePieceResponse CheckForVictory(BoardPosition position, bool isPlayerOnesTurn)
        {
            var response      = new PlaceGamePieceResponse();
            var playerVictory =
                PlayerVictoryCheck(isPlayerOnesTurn ? PositionHistory.Player1Piece : PositionHistory.Player2Piece,
                                   position);

            response.PositionStatus        = playerVictory ? PositionStatus.WinningMove : PositionStatus.Ok;
            response.BoardPosition         = position;
            response.WinningPositionValues = _winningPositionValues;
            return(response);
        }