上传高分榜 - 如何让它只对朋友可见?

时间:2012-01-06 09:34:21

标签: ios xcode

我想知道你上传高分时是否有可能将你的分数与你的朋友比较(如果更简单,只选择联系人)? 如果是这样,有人能指出我正确的方向,怎么做?我在google上找不到任何有用的东西。 据我所知,它应该是可能的,因为像WhatsApp这样的应用程序也允许您选择要发送消息的特定联系人。 与此相关:我可以使用/云来上传高分,还是应该使用我的网站空间?

1 个答案:

答案 0 :(得分:2)

我没有回答这个特定的iOS /等。

您通常会在您的网站上公开您的应用程序与之通信的REST(或POX / POJSON - 普通旧XML或普通旧JSON)服务 - 它将负责协商友谊,上传高分数和检索高分。这可能会触及您控制下的数据库,也可能会连接到云服务器;这两种方法都没有问题(如果你想应用我的SQL概念,Azure是一个不错的选择)。

在数据库中,您将维护一个朋友列表 - 这是一个非常简单的设置结构。基本上你想要两个如下所示的表:

CREATE TABLE [UserAccount]
(
  [ID] BIGINT IDENTITY(1,1) PRIMARY KEY,
  [Name] NVARCHAR(255),
)

CREATE TABLE [Friendship]
(
  [User1] BIGINT, -- Primary key, FK to [UserAccount].[ID]
  [User2] BIGINT, -- Primary key, FK to [UserAccount].[ID]
)

这将允许您按照以下方式表示友谊:

User: ID = 1, Name = Joe
User: ID = 2, Name = Fred
Friendship: User1 = 1, User2 = 2
Friendship: User1 = 2, User1 = 1

然后,您可以使用以下查询查询朋友:

SELECT [F1].[User2] AS [ID] FROM [Friendship] AS [F1]
 WHERE [F1].[User1] = @CurrentUser
   -- Check for symmetric relationship.
   AND EXISTS
       ( SELECT 1 FROM [Friendship] AS [F2]
          WHERE [F2].[User2] = [F1].[User1] AND [F2].[User1] = [F1].[User2] );

如果您的SQL变体支持它们,您可以将其设为TVF(表值函数)。接下来,您将创建一个高分表和一个表,以将其映射到用户。

 CREATE TABLE [Highscore]
 {
   [ID] BIGINT IDENTITY(1,1) PRIMARY KEY,
   [Score] INT,
 }

 CREATE TABLE [UserHighscore]
 {
   [UserID] BIGINT, -- Primary key, FK to User.ID
   [HighscoreID] BIGINT, -- Primary key, FK to Highscore.ID
 }

这方面的一些示例数据是:

 -- In this game you can only score over 9000!
 Highscore: ID = 1, Score = 9001
 Highscore: ID = 2, Score = 9005
 Highscore: ID = 3, Score = 9008
 UserHighscore: UserID = 1, HighscoreID = 1
 UserHighscore: UserID = 1, HighscoreID = 2
 UserHighscore: UserID = 2, HighscoreID = 3

然后,您可以查询朋友的高分:

SELECT TOP(10) [U].[Name], [H].[Score] FROM [Friendship] AS [F1]
 LEFT INNER JOIN [User] AS [U] ON [U].[ID] = [F1].[User2]
 LEFT INNER JOIN [HighscoreUser] AS [HU] ON [HU].[UserID] = [F1].[User2]
 LEFT INNER JOIN [Highscore] AS [H] ON [H].[ID] = [HU].[UserID]
 WHERE [F1].[User1] = @CurrentUser
   -- Check for symmetric relationship.
   AND EXISTS
       ( SELECT 1 FROM [Friendship] AS [F2]
          WHERE [F2].[User2] = [F1].[User1] AND [F2].[User1] = [F1].[User2] )
 ORDER BY [H].[Score] DESC;

该查询会给你的朋友排名前十;给你他们的名字和分数。