如何在您的网站中连接两个人
有一个名为Verbosity的游戏(它是一个有目的的游戏),它就在这个链接上
www.gwap.com
在游戏中他们随机连接两个玩家互相玩,游戏是玩家1应该向他的伙伴(玩家2)描述一个单词,玩家2应该猜对话。
我正在尝试建立一个类似的网站,但我想知道
1-我如何随机连接两个玩家让他们一起玩,虽然他们不是注册用户(他们只是网站的访客)?
2-如何让他们在私人比赛中打球,我的意思是每两名球员都在玩自己的比赛?
3-我需要使用什么? 使用ASP.Net是否足够? 我需要银光吗?
谢谢
根据我的理解,我们有两个逻辑实体:
游戏:涉及两个私人玩家之间的互动
玩家:网站的访客(匿名)
我将从玩家开始,因为它更容易。 访客登陆您的网站,需要(唯一)识别他。 最简单的解决方案是Guid,它可以用作会话参数或会话cookie(我的建议)。 Guid不是可以为空的类型,所以任何32个零的Guid都将成为我们未定义的Guid。
拥有GUIDed访问者后,您需要一个将其连接到游戏的键/值集合。
场景1:每个访问者一次只能是一个游戏的玩家。 字典
场景2:每个访问者可以同时成为许多游戏的玩家。 字典
现在让我们看看你可以用游戏做些什么。 首先,您可以使用GUID来识别您的游戏。 这意味着您的玩家字典将为场景1的词典
总而言之,您需要在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> Messages; // holds the player/message pairs public GameDetails(Guid role1, Guid role2) { this.Role1 = role1; this.Role2 = role2; this.Message = new List>(); } }
添加和删除玩家很容易,游戏也很简单(玩家与游戏相关)。
你可以做很多其他的事情(即猜测退出的人,你随机分配另一个玩家继续等)。
或多或少这也是与私人房间进行asp.net聊天的方式。 您可以找到并检查一个简单的asp.net聊天脚本的好样本,查看逻辑和实现并使其适应上述内容。 此外,您可以扩展聊天脚本以支持私人房间,并且有两个应用程序而不是一个。
毋庸置疑,asp.net对您的项目来说已经足够了。 您需要考虑的是,如果您无法控制应用程序池的回收,您还需要一个持久层,否则您可能会丢失您的词典。
如果您需要更多帮助,请告诉我。
1-我如何随机连接两个玩家让他们一起玩,虽然他们不是注册用户(他们只是网站的访客)?
注册用户没有什么神奇之处。 ASP.NET可以跟踪匿名用户的状态。
2-如何让他们在私人比赛中打球,我的意思是每两名球员都在玩自己的比赛?
您只需要跟踪哪两个用户在一起玩。 这就像存储他们的SessionID一样简单
3-我需要使用什么? 使用ASP.Net是否足够? 我需要银光吗?
不要去Silverlight,你不需要它来实现这一点,我相信微软正在放弃它而转而支持HTML5。 此外,它的市场份额约为60%,而Flash约为100%,因此如果您使用Silverlight插件路线,那么人们将能够使用您的网站。
正如其他人所说,你的想法可以通过客户端AJAX和ASP.NET服务器端的组合来完成。 我推荐jQuery用于客户端代码,它使JavaScript和DOM操作变得轻而易举。
最后一件事,请查看http://browserquest.mozilla.org/ ,了解如何在没有今天浏览器技术插件的情况下完成的任务。
我想如果有两个人访问您的网站,他们可以分别访问数据并独立玩游戏
要控制站点中的并发用户数,您必须创建一个Application State变量并将两个选定的用户ID存储到该变量中。
每次用户尝试玩游戏时,您都必须检查其ID是否存在于应用程序状态变量中,如果存在则允许其他情况不允许。
当然你必须写很多代码
- 将userid添加/删除到Global.ascx文件中的Application State变量
- 实现身份validation以了解用户是谁以及用户validation。
- 如果您希望它们在一段时间后自动退出(空闲/固定),您必须在Global.ascx文件的Session_End事件中编写代码。
如果您想要具体答案,请告诉我更多细节。
创建一个类GameSession {int gameid; string player1; string player2}
假设最多只有一个游戏和2个用户
用户注册过程:如果第一个用户进入您的网站,检查用户是否已注册检查他的用户ID pwd并从表中获取用户ID,如果他是访客生成随机密钥(guid)或询问他是否有唯一密钥(uniquenickname) 。
状态管理:创建此类的对象,指定gameid = 1并指定player1 =用户的唯一键。 创建GameSession对象的集合,比如说GameSessions,将GameSession添加到GameSessions Store GameSessions到Application State。
下次如果其他用户登录,请按照相同的用户注册流程进行操作。 在GameSessions中检查空槽(空播放器2),如果找到则将此用户分配给GameSessions的第一个或选定的空槽。 现在这个GameSession已准备就绪。
将对象保存回应用程序状态。
允许用户玩游戏
为上述场景写下否定案例。
这样你就可以做到这一点。
客户端上的ASP.NET服务器端和Ajax(javascript)足以实现此目的。
粗略地说,您希望将客户端设置为以给定间隔轮询服务器以获取信息。 服务器将响应客户端随后作出反应的状态更新。
您为客户端提供唯一的令牌,服务器会跟踪哪些令牌在一起播放。 您将需要使用某种数据库来管理游戏中的待处理状态更新。
示例对话:
客户:加入
服务器:Join-Accepted,Token:55164145
客户:更新55164145
服务器:空闲,“等待对手”
客户:更新55164145
服务器:对手发现,“匿名用户31”
客户:更新55164145
服务器:描述“花”
客户:更新55164145
服务器:等待描述
客户:提交 – 描述55164145,“带花瓣的植物”
服务器:已接受 – 说明
客户:更新55164145
服务器:等待对手
客户:更新55164145
服务器:对手断开连接
你明白了。
使用SingleIR通过在Web浏览器中运行的javascript连接两个用户
我建议使用NodeJS。 转到http://nodejs.org/下载并安装
它现在可以在Windows(我使用它)以及Linux上运行良好,并且您可以轻松地创建相关的微站点。
在线书籍http://www.nodebeginner.org/将帮助您快速上手。