据我了解,我们有两个逻辑实体:
游戏:涉及两个玩家之间的私下互动
玩家:网站的访问者(匿名)
我将从 Players 开始,因为它更容易。访问者登陆您的网站,需要(唯一地)识别他。最简单的解决方案是可以用作会话参数或会话 cookie 的 Guid(我的建议)。 Guid 不是可空类型,因此任何 32 个零的 Guid 都将是我们未定义的 Guid。
拥有引导访问者,您需要一个键/值集合将他们连接到游戏。
场景 1:
每个访问者一次只能成为一个游戏的玩家。 Dictionary 可以完成这项工作,并且可以轻松追踪非玩家的访问者(game = undefined Guid)
场景 2:
每个访客可以同时成为许多游戏的玩家。 Dictionary> 是解决方案,但 game = undefinedGuid 将变为 List.Count = 0
现在让我们看看您可以用游戏做什么。首先,您可以使用 GUID 来识别您的游戏。这意味着您的玩家字典将是场景 1 的 Dictionary 或场景 2 的 Dictionary> 。显然,您将需要游戏的键/值集合,假设形式为字典。 GameDetails 必须是一个包含可以定义玩家之间交互性的必要信息的类。在其他世界中,这个类必须包括每个玩家的角色(角色 1:提问者或角色 2:猜测者)和他们作为键/值集合交换的消息,其中键是玩家 Guid,值是字符串消息。
总而言之,您需要在 global.asax 中定义两个静态字典,一个用于玩家,一个用于游戏。您还需要一个类似于此的 GameDetails 类(基本概念实现):
class GameDatails
{
public Guid Role1 { get; set; } // holds the guid of the player who asks
public Guid Role2 { get; set; } // holds the guid of the player who guesses
public List<KeyValuePair<Guid, string>> Messages; // holds the player/message pairs
public GameDetails(Guid role1, Guid role2)
{
this.Role1 = role1;
this.Role2 = role2;
this.Message = new List<KeyValuePair<Guid, string>>();
}
}
添加和删除玩家和游戏一样简单(玩家连接到游戏)。
您还可以做很多其他事情(即猜中的人退出,而您随机分配另一名玩家继续等)。
这或多或少也是与私人房间进行 asp.net 聊天的方式。找到并检查一个简单的 asp.net 聊天脚本的良好示例可能会对您有所帮助,查看其逻辑和实现并将它们适应上述内容。此外,您可以扩展聊天脚本以支持私人房间并拥有两个应用程序而不是一个。
不用说,asp.net 对您的项目来说已经绰绰有余了。您必须考虑的是,如果您无法控制应用程序池回收,您还需要一个持久层,否则您可能会丢失您的字典。
如果您需要更多帮助,请告诉我。