views:

46

answers:

2

It looks to me like Apple was in a bit of a hurry to implement GameCenter. Maybe I am overlooking something.

If you create a game where you want to offer in-app purchases (say you want to sell additional maps or add ons), is there any way at all to match players who share the same maps (plural) using GKMatchRequest? i.e. whose in-app purchases overlap, but are not the exact same.

Or maybe you want to sell cars in a race game. How can you match players who share some of their cars, not necessarily all of them? I think you can't, because the playerGroup property in a GKMatchRequest compares only if users belong to the same group.

So if one user buys map A and map B and another user buys map B and map C, there is no way to match them, although they could be playing map B together. Of course you could implement your interface so that users have to specify which map they want to play on. But there are other scenarios where an in-app purchase might not be an either/or question, but might be combined in a game (e.g. if you can buy different soldier types in a battle game and then match players who share some of their soldier types... in the game itself you could then implement logic to exclude those types the players do not share).

Can anyone think of a solution that works?

+1  A: 

In the map case, I think you would need to let the user choose the map first. Otherwise, say you match two players and they have maps B, C, and E in common. Now you need a way for them to agree on what map to play on. Maybe player 1 intended to play map B and player 2 wanted map E. Even if they share a subset, now you have to do the work that could have been done in the matching process.

In the cars case, I think you need to ask why you want to compare players this way. If it is simply out of fairness (so you don't match someone with powerful cars against a newbie) then you can create a "level" based on top car speed. Maybe you will match people with different sets of cars, but they can be evenly matched.

Finally, if the players absolutely need to have a matching thing, make a best effort using the previous suggestion, and if they don't, pop up a message saying, "Hey, you don't have any matching cars. Want to buy this one so you can play together?" Offer to buy it now or find another player. You might make some sales this way.


P.S. Sorry to be preachy, but it's not fair to say Apple did a half-a***d job. Game Center is a system that must scale up to millions of users, who want to find matches more or less instantly. Attempting to match by overlapping subsets would add a significant amount of complexity to the system, and I don't think you are appreciating the cost of such a design.

It sucks that can't do exactly what you need, but it's a poor attitude to assume the shortcomings are due to incompetence.

benzado
I did not say that. Your examples are all valid. Those were just examples. I have a very real problem with it, that I don't want to describe here, because the game is not done yet.Anyway... let's describe it this way. You want to invite friends for dinner, but you know you can only eat those things that all people brought. You have no way of what the other people might be able to bring, because you can never talk to them. So I say: Hey, I could bring A, B, C, D, E. And another person says: I could bring A, B, C, D, F. Now you will not even see that person. Scale that to 10 or more different
Joseph Tura
It looks to me like you said, "It looks to me like Apple did a pretty half-a****d job implementing GameCenter. Maybe I am overlooking something." Maybe I am overlooking something?
benzado
types of food, and you will have a situation where you either only eat A, or where you have a very hard time finding a match.I think some aspects of GameCenter are poorly implemented. The same goes for leaderboards. How about a percentage score there where you can see races won / races lost? In GameCenter you can't. You could count up races won and races lost and create your own leaderboard, but that is just a workaround.I love how easy it is to get a game up and running, on the other hand.
Joseph Tura
I understand that you want subset matching, but the API doesn't allow for it. So you probably need to compare sets after the match, and give the user the option to buy something to make it work, or find a new match.
benzado
Yeah, but I don't think it was incompetence. I think they wanted that product out the door as fast as possible. I am convinced that they will implement many more features in the future.
Joseph Tura
I appreciate your suggestion to offer users to buy missing options. That is a very good idea :) I am just a bit frustrated by my problem. As your answer does not really solve it, but offers a nice alternative, I have voted it up without accepting it.
Joseph Tura
Incompetence, laziness, arrogance, whatever. It doesn't matter. It doesn't do what you need, so you call it a "half-a***d job". Not cool.
benzado
Also, I have rephrased my assessment of Apple's performance. Don't want anyone to be offended. I think it was just a strategic decision.
Joseph Tura
Thanks, sorry, we are basically commenting over each other. I think you're options are: (1) roll your own GameCenter so you can get subset matching or (2) workaround it.
benzado
I considered implementing a hosted game. But this is sort of an after-work project for me. So I am not going to do it for now. And I will take up your suggestion. Thanks for the discussion. I appreciate the work that has gone into GameCenter. If I didn't I wouldn't spend all my time developing for it ;)
Joseph Tura
s/are poorly implemented/have been implemented under time constraints/g ;)
Joseph Tura
A: 

Here's another dilemma with supporting both In-app purchases and Game Center (please respond in the comments).

Say my game includes in-app purchases for ten individual puzzle packs and my game also includes a free multiplayer mode using Game Center. At any time, a single iOS device has an iTunes store account logged in and this is the account that is used for determining the status of all in-app purchases for my app. If a user logs out of their iTunes store account on a single device and a new user logs into their iTunes store account on the same device (using the "Store" tab in the settings application), then the status of in-app purchases for my app will be updated for the newly logged in iTunes store user. Perfect! Now what happens if my app uses Game Center to allow different users to use the same app? It seems suddenly you have two different types of user accounts for a single app. One account for Game Center and one account for the iTunes store, correct? For exmaple, if user1 logged into my app using Game Center and bought three puzzle packs, then those puzzle packs would be charged to whatever iTunes account is currently logged in on the device. If user1 logs out of Game Center and user2 logs into Game Center, won't the iTunes account that is currently logged in remain the same, meaning user2 will have access to the puzzle packs bought by user 1? Doesn't that also mean user2 can purchase additional puzzle packs under the same iTunes account that user1 used?

Even worse, what if I want to create Game Center achievements based on completing a purchased puzzle pack? Suddenly, different Game Center users would receive the achievements for puzzle packs they didn't solve since they share the same puzzle pack state, right?

BeachRunnerJoe