A few weeks ago I released a very early preview of Conqueror version 5 for Windows Phone. With that I mentioned that a few fun new features would be coming in alongside the standard bug fixes and improvements. I'm here today to talk about one of the most significant of them and the one I think people will enjoy the most: Matchmaking. The feature is far from done and the source isn't even on my Repo yet. I've got everything but choosing the games done and it's with that that I need your help. I've got the technical side of things mostly figured out, but its the practical side I'd like more input on.
First off, some background. Matchmaking started because I've never liked browsing the games looking for ones I want. If you care about points you want to find players that attend games and also have a score similar to yours. I wanted something that could find open matches with players around my same skill level and preferably ones that didn't miss turns or anything like that. As such, Matchmaking was born. Because of a number of API limitations the feature is quite limited and often will not find you the best matches. Indeed it may skip over some that would be great for you. The issue is that we are limited in the number of API calls we can make per device in a set period of time. Because of this I can't get the information of every player. While I could do a batch search and find every player at once you hit other issues. Mainly the maximum length of a GIT request. With that technical babble out of the way the conclusion is this: corners have to be cut. Ideally, I will only make 2 calls to the API for this entire process. One to get the maps and one to get information about the players in those games.
With this in mind, I can, at most retrieve the information for a dozen or so players at any one time. Even with huge amounts of caching the amount of data required is immense and likely impossible to get with the current API. As such I'm curious how people would like this feature to work. Keep in mind that while this is currently a feature targeting Windows Phone only it will be open sourced in C#/.NET and also added to my other apps as they become available. The two options I see are this.
1. Select a few maps (5 or so) and get every current players details. Sort them by the closest point value to your own and let you choose based on that.
2. Choose a larger set of maps and pick out a few players from each. Average those players points and base the game off of that average. This would be less accurate but would provide more results.
Even after picking one of these strategies their is a second challenge of actually figuring out which game is a closer match than the other. Should it be based on number of turns missed, points, user ratings, number of games played or something else? I can theoretically make this as complex as I want, but I don't have a great grasp on what the greater community values most/least. As such, any suggestions towards either of these issues would be helpful.
I intend to have a beta of the matchmaking source finished by the end of the week so you should be able to test it out soon! Until then here are two screens from the Windows Phone version of the matchmaker (The UI is not final and may change).