【问题标题】:ASP.NET MVC turn-based game for anonymous user [closed]面向匿名用户的 ASP.NET MVC 回合制游戏[关闭]
【发布时间】:2014-12-16 04:07:46
【问题描述】:

我是 ASP.NET MVC 的新手

我正在尝试实现游戏Rock-Paper-Scissors

实施要求:

  1. 允许匿名用户玩游戏(游戏必须是私有的)
  2. SignalR 禁止使用

我阅读了类似的问题 (this)。我还有问题。

在哪里创建会话播放器Guid(第一次)?

Dictionary<player, game>(提到here)必须是线程安全的吗? 或者我可以将它用作 Global.asax.cs 中的静态变量?

更新

可以在静态字典中存储来宾玩家信息吗?

那么如何删除过期的会话播放器信息?

我想我需要在Global.asax 中实现Session_StartSession_End 方法。 并且当会话过期时删除玩家信息。这方法好不好?

【问题讨论】:

标签: c# asp.net-mvc asp.net-ajax


【解决方案1】:

会话玩家 GUID 应该在玩家点击 PLAY 按钮或任何应该触发游戏开始的阶段生成。

使用 ConcurrentDictionary 代替 Dictionary<player, game>。阅读here。它应该是静态的,而不是线程静态的。你应该在那里存储你的游戏会话。

如果用户刷新页面或短时间断开连接,您应该允许他恢复他的游戏。为此,您可以将游戏会话 guid 存储在 coockie 或本地存储中(将在标头中发送)并在服务器端对其进行分析并决定开始新游戏或继续旧游戏。

很简单。

【讨论】:

  • 感谢您的回复!如何连接两个用户:一个是等待还是创建游戏?
  • 第一个创建新游戏并允许新玩家连接。第二个玩家浏览打开的游戏。如果找到加入它。游戏开始,打开状态被移除以防止新玩家到来。
  • 何时从字典中删除元素?
  • 以及为什么存储为字典而不是数据库更好?
  • 对于小型解决方案 - 在内存中,对于大型数据库。显然应该从字典中删除元素然后游戏结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多