Yes, you're right. I didn't read the OP carefully enough. But, if one exists and depending on how it's written, it might still be possible to use a Swiss module to solve this problem. At least some Swiss chess tournaments match scores but then match players by ranking, best v worst. It might be possible to use such an algorithm and insert dummy "scores" and use the ranking to do the rest. But that's putting even more constraints on my originally constrained idea. :-(
No, the OP wants a round robin. In the Swiss pairing a new drawing is made after each round. The OP should forget about the additional constraint of having the best player play against the worst in the first round.
There are many ways of doing round robin pairing, and I'd think a quick google job should find some ready implementation. Pick one, and after the schedule is made, just assign the players in such a way that the best player plays the worst, etc. So if whatever algorithm you implement says the first round is "1-2, 3-4, 5-6", then give the best player label 1, the second best label 3, the third label 5, the label 6, 4, and the worst player gets label 2.
Obviously I haven't been clear enough. I appreciate that the OP wants a round robin, but a Swiss with N players and N-1 rounds gives you that (unless you allow replays, which can be allowed in some Swiss events). By telling the Swiss algorithm that every match is a draw before they are played, you will get a schedule that will achieve what I understand the OP to want. While I accept that your proposal will work fine for the first round, I'm not clear how you would get a generic process for the later rounds that would prevent 1 playing 2 until the last round. I believe that the Swiss algorithm would achieve that.
It's possible that I'm still not clear. It's late enough for me to want my bed, so please let me know if I'm not & I'll try to do better tomorrow.