I'm implementing a turn based game where players can meet other players in matches via Apple Game Center. Each match has two players.

I want to make a global ranking of all players using Apple Game Center. This ranking serves two purposes:

  • each player will know his/hers ranking.
  • a player can be matched to another player with a similar skill.

My current thinking is something like this:

  • A win gives +1 points
  • A lose gives -1 points
  • An aborted match, or not accepting a match gives -1 points.
  • 0 is the minimum score.
  • The leaderboard will present the score of each player.
  • Players will be placed in groups according to their score. Each group can cover a range of scores, and players will be matched with players from the same group.

I have the following questions:

  • Do you like my suggested scoring solution?
  • Is it possible to accomplish an effective match making with this approach? I mean, some groups can have very few participants. Maybe only one. Of cause you can try to do a match making with a lower group, but that can also be empty, and it will take time. How shall I solve this?
  • I've not released the game, and I don't know how many players it will have. Is it possible to make the grouping dynamic in some way? More players requires more groups.
  • Is it possible to make players that does not accept matches to lose points? I only want to have active players in top of the ladder.

So far I've only found this input: https://stackoverflow.com/questions/9355799/can-i-make-a-ladder-systemlike-battle-net-with-using-just-game-center


I've made a scoring system almost exactly the same as you have with Game Center expect I use a more advanced rating algorithm (http://en.wikipedia.org/wiki/Elo_rating_system). I will answer your questions in order:

  • Yes I think your idea sounds good.
  • I've heard that apple automatically will pair people from different groups if there is no people in the same group. Nevertheless, you could define the groups by separating them with |. For example if you want players to match people with a score of +- 100 you could make something like GKMatchmakingObject.gruops = (int)player.score/100-1| (int)player.score/100 | (int)player.score/100+1
  • Edit: NO, you will probably need an external server for tracking players online.

Yes there should be away to get an NSArray of all players in a specific leaderboard. That way you could for example use array.count and from that way increase the gap to +- 200 or +-300 if array.count is < 100. - Finally, yes. There is a delegate callback for when people decline which you could use for this purpose.

  • \$\begingroup\$ Do you mean that the score of player A shall be reduced from the context/device of player B if player A does not accept an invitation? I guess it can't be done from the context of player A, because the game may not even be running on his device. Excellent answer BTW! \$\endgroup\$ – Fredrik Johansson Jan 11 '15 at 0:11
  • \$\begingroup\$ Ohh, I've understand what you mean. I don't think it's possible but I don't really know why you need do this from the context of another player. \$\endgroup\$ – Fredrik Jan 11 '15 at 19:41
  • \$\begingroup\$ Will a nonactive player move down the ladder in your game? Have you been able to solve that problem? \$\endgroup\$ – Fredrik Johansson Jan 12 '15 at 11:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.