public virtual MoveResult Move(IPlayer player, IRef referee) { string piecePos = player.getMove("Enter piece to move: "); if (!referee.isValidPickUp(piecePos, player, this)) { return(MoveResult.InvalidPickUp); } string placePos = player.getMove($@"Place {piecePos} at position: "); if (!referee.isValidPutDown(piecePos, placePos, player, this)) { return(MoveResult.InvalidPutDown); } board[piecePos].changeState(Player.None); board[placePos].changeState(player.playerID); if (isInMill(placePos)) { return(MoveResult.MillMade); } return(MoveResult.Done); }