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


1 Answer 1


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\$ Jan 11, 2015 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, 2015 at 19:41
  • \$\begingroup\$ Will a nonactive player move down the ladder in your game? Have you been able to solve that problem? \$\endgroup\$ Jan 12, 2015 at 11:09

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .