如何在您的网站中连接两个人

时间:2012-03-21 07:28:44

标签: c# asp.net web

有一款名为Verbosity的游戏(它是一款有目的的游戏),它就在这个链接上 www.gwap.com

在游戏中他们随机连接两个玩家互相玩游戏,游戏是玩家1应该向他的伙伴(玩家2)描述一个单词,玩家2应该猜到这个单词。
我正在尝试建立一个类似的网站,但我不知道 1-我如何随机连接两个玩家让他们一起玩,虽然他们不是注册用户(他们只是网站的访客)?
2-如何让他们在私人比赛中打球,我的意思是每两名球员都在玩自己的比赛?
3-我需要使用什么?使用ASP.Net是否足够?我需要银光吗? 感谢

6 个答案:

答案 0 :(得分:3)

根据我的理解,我们有两个逻辑实体:

游戏:涉及两个私人玩家之间的互动

玩家:网站的访客(匿名)

我将从玩家开始,因为它更容易。访客登陆您的网站,需要(唯一)识别他。最简单的解决方案是Guid,它可以用作会话参数或会话cookie(我的建议)。 Guid不是可以为空的类型,因此任何32个零的Guid将是我们未定义的Guid。

拥有GUIDed访问者,您需要一个键/值集合,将它们连接到游戏。

场景1: 每个访问者一次只能是一个游戏的玩家。字典<播放器,游戏>可以做到这一点,非玩家的访客可以很容易地被追踪(游戏=未定义的Guid)

场景2: 每个访问者可以同时成为许多游戏的玩家。字典<播放器,列表<游戏>>是解决方案,但game = undefinedGuid将成为List.Count = 0

现在让我们看看你可以用游戏做些什么。首先,您可以使用GUID来识别您的游戏。这意味着你的玩家字典将是Dictionary< Guid,Guid>对于场景1或词典< Guid,List< Guild>>对于场景2.显然你需要一个游戏的键/值集合,让我们以Dictionary< gameGuid,gameDetails>的形式说。 GameDetails必须是一个包含必要信息的类,可以定义玩家之间的交互性。在其他世界中,这个类必须包括每个玩家的角色(角色1:要求的人或角色2:正在猜测的人)以及他们作为键/值集合交换的消息,其中key是玩家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对您的项目来说已经足够了。您需要考虑的是,如果您无法控制应用程序池的回收,您还需要一个持久层,否则您可能会丢失您的词典。

如果您需要更多帮助,请告诉我。

答案 1 :(得分:2)

1-我如何随机连接两个玩家让他们一起玩,虽然他们不是注册用户(他们只是网站的访客)?

注册用户没有什么神奇之处。 ASP.NET可以跟踪匿名用户的状态。

2-如何让他们在私人游戏中玩,我的意思是每两位玩家都在玩自己的游戏?

您只需要跟踪哪两个用户在一起玩。这就像存储他们的SessionIDs

一样简单

3-我需要使用什么?使用ASP.Net是否足够?我需要silverlight吗?

不要去Silverlight,你不需要它来实现这一点,我相信微软正在放弃它而转而支持HTML5。此外,其market share约为60%,而Flash约为100%,因此如果您使用Silverlight插件路线,那么人们将能够使用您的网站。

正如其他人所说,你的想法可以通过客户端AJAX和ASP.NET服务器端的组合来完成。我推荐jQuery用于客户端代码,它使JavaScript和DOM操作变得轻而易举。

最后一件事,请查看http://browserquest.mozilla.org/,了解如何在不使用当今浏览器技术的插件的情况下完成的任务。

答案 2 :(得分:1)

我认为如果有两个人访问您的网站,他们可以单独访问数据并独立玩游戏

要控制站点中的并发用户数,您必须创建一个Application State变量并将两个选定的用户ID存储到该变量中。

每次用户尝试玩游戏时,您都必须检查其ID是否存在于应用程序状态变量中,如果存在则允许其他人不允许。

当然你必须写很多代码

  1. 将userid添加/删除到Global.ascx文件中的Application State变量
  2. 实现身份验证以了解用户是谁以及用户验证。
  3. 如果您希望它们在一段时间后自动退出(空闲/固定),您必须在Global.ascx文件的Session_End事件中编写代码。
  4. 如果您想要具体答案,请告诉我更多详情。

    创建一个类GameSession {int gameid; string player1; string player2}

    假设只有一个游戏,最多2个用户

    用户注册流程: 如果第一个用户进入您的网站,检查用户是否已注册检查他的用户ID pwd并从表中获取他的用户ID,如果他是来宾生成随机密钥(guid)或询问他是否有唯一密钥(uniquenickname)。

    国家管理: 创建此类的对象,指定gameid = 1并指定player1 =用户的唯一键。 创建GameSession对象的集合,比如GameSessions,将GameSession添加到GameSessions 将GameSessions存储到应用程序状态。

    下次如果其他用户登录,请按照相同的用户注册流程进行操作。检查GameSessions中的空插槽(空播放器2),如果找到则将此用户分配给GameSessions的第一个或选定的空插槽。现在这个GameSession已准备就绪。

    将对象保存回应用程序状态。

    允许用户玩游戏

    针对上述情况编写否定案例。

    这样你就可以做到这一点。

答案 3 :(得分:1)

客户端上的ASP.NET服务器端和Ajax(javascript)足以实现此目的。

粗略声明您要设置客户端以在给定时间间隔内轮询服务器以获取信息。服务器将响应客户端随后做出反应的状态更新。

您为客户提供唯一的令牌,服务器会跟踪哪些令牌在一起播放。您将需要使用某种数据库来管理游戏中的待处理状态更新。

示例对话:

客户:加入

服务器:Join-Accepted,Token:55164145

客户:更新55164145

服务器:空闲,“等待对手”

客户:更新55164145

服务器:对手发现,“匿名用户31”

客户:更新55164145

服务器:描述“花”

客户:更新55164145

服务器:等待描述

客户:提交 - 说明55164145,“带花瓣的植物”

服务器:已接受 - 说明

客户:更新55164145

服务器:等待对手

客户:更新55164145

服务器:对手已断开连接

你明白了。

答案 4 :(得分:1)

使用SingleIR通过在网络浏览器中运行的javascript连接两个用户

http://signalr.net/

答案 5 :(得分:1)

我建议使用NodeJS。 转到http://nodejs.org/下载并安装

现在它在Windows(我使用它)以及Linux上运行良好,您可以轻松地创建相关的微站点。

在线图书http://www.nodebeginner.org/可让您快速上手。