Let me try to get this straight:
Each player may create a list of favorite colors as part of their profile. Join order determines the actual selection when people join a game, based on a simple preference algorithm.
Scenario: Player A and Player B both love Violet the most, and Red second-most. Player A creates a game and is automatically Violet. Player B joins next, but his color will default to Red, his 2nd choice. Player C joins, and if he happens to also love Violet and Red, he will be assigned his THIRD choice.
Well, what if Player A loves Violet (she's such a pretty girl!) but he doesn't usually start games, or he's worried that someone else might get Violet before he does? He can list Violet as his 2nd, 3rd, or 4th choice, etc. If he joins at the right time, he will get Violet if she isn't already taken. If she is, he gets his next-best choice.
Regarding Bot games: Currently the Bot is always Green (although I think that should be randomized; different topic). The player would automatically get his favorite color, as long as it's not Green.
Obviously there's no way to avoid some degree of randomness, especially since "Color Preference" would be an optional part of one's profile. Many players wouldn't use it. Others might choose the most popular "basic" colors (red, yellow, green, blue) as their favorites, just to screw with the algorithm. Or they could choose the newer colors (drab, silver, etc.).... personally, I have a hard time distinguishing Green from Drab.
Just watch out, you guys! Stay away from Violet -- she's mine! (She's a very pretty girl...)