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