Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何连接网站中的两个人_C#_Asp.net_Web - Fatal编程技术网

C# 如何连接网站中的两个人

C# 如何连接网站中的两个人,c#,asp.net,web,C#,Asp.net,Web,有一个叫做“冗长”的游戏(这是一个有目的的游戏),它就在这个链接上 www.gwap.com 在游戏中,他们随机将两名玩家连接在一起玩,游戏是玩家1应该向他的搭档(玩家2)描述一个单词,玩家2应该询问这个单词。 我正试图建立一个这样的网站,但我想知道 1-我如何随机连接两名玩家,让他们一起玩,尽管他们不是注册用户(他们只是网站的访客)? 2-如何让他们玩私人游戏,我的意思是每两个玩家都在玩自己的游戏 3-我需要使用什么?使用ASP.Net就足够了吗?我需要silverlight吗? 谢谢我想如果

有一个叫做“冗长”的游戏(这是一个有目的的游戏),它就在这个链接上
www.gwap.com

在游戏中,他们随机将两名玩家连接在一起玩,游戏是玩家1应该向他的搭档(玩家2)描述一个单词,玩家2应该询问这个单词。
我正试图建立一个这样的网站,但我想知道
1-我如何随机连接两名玩家,让他们一起玩,尽管他们不是注册用户(他们只是网站的访客)?
2-如何让他们玩私人游戏,我的意思是每两个玩家都在玩自己的游戏
3-我需要使用什么?使用ASP.Net就足够了吗?我需要silverlight吗?

谢谢

我想如果两个人访问你的网站,他们可以分别访问数据,独立玩游戏

要控制站点中并发用户的数量,您必须创建一个应用程序状态变量并向其存储两个选定的用户ID

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

当然,您必须编写大量的代码

  • 向Global.ascx文件中的应用程序状态变量添加/删除userid
  • 实施身份验证以了解用户是谁并进行用户验证
  • 如果您希望他们在一段时间后自动注销(空闲/固定),则必须在Global.ascx文件的Session_End event中编写代码
  • 如果你想得到具体的答案,请告诉我更多的细节

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

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

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

    国家管理: 创建此类的对象,分配gameid=1,分配player1=用户的唯一密钥。 创建GameSession对象集合,如GameSessions,将GameSession添加到GameSessions 将游戏会话存储到应用程序状态

    下次如果有其他用户登录,请遵循相同的用户注册过程。检查GameSessions中的空插槽(空player2),如果找到,请将此用户分配到GameSessions的第一个或选定的空插槽。现在,此游戏会话已准备就绪

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

    允许用户玩游戏

    为上述场景编写负面案例


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

    据我所知,我们有两个逻辑实体:

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

    玩家:网站的访问者(匿名)

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

    有了引导访客,您需要一个键/值集合,将他们与游戏联系起来

    情景1: 每位访客一次只能玩一场游戏。字典可以完成这项工作,可以很容易地追踪非玩家的访问者(game=未定义的Guid)

    情景2: 每位访客可以同时成为多个游戏的玩家。字典是解决方案,但game=undefinedGuid将成为List.Count=0

    现在让我们看看你能用游戏做些什么。首先,您可以使用guid来识别您的游戏。这意味着您的玩家字典将是场景1的字典或场景2的字典。显然,游戏需要一个键/值集合,比如说以字典的形式。GameDetails必须是一个包含必要信息的类,这些信息可以定义玩家之间的交互。在其他世界中,此类必须包括每个玩家的角色(角色1:提问者或角色2:猜测者)以及他们作为键/值集合交换的消息,其中键是玩家Guid,值是字符串消息

    总结一下,您需要在global.asax中定义两个静态字典,一个用于玩家,一个用于游戏。您还需要类似的GameDetails类(基本概念实现):

    class GameDatails
    {
    public Guid Role1{get;set;}//保存请求的播放机的Guid
    public Guid Role2{get;set;}//保存猜测的玩家的Guid
    public List Messages;//保存播放器/消息对
    公开游戏详细信息(Guid角色1、Guid角色2)
    {
    this.Role1=Role1;
    this.Role2=Role2;
    this.Message=新列表();
    }
    }
    
    添加和删除玩家与游戏一样简单(玩家连接到游戏)

    你还可以做很多其他的事情(比如猜中的人退出,你随机分配另一个玩家继续等)

    或多或少,这也是与私人聊天室进行asp.net聊天的方法。查找并检查一个简单asp.net聊天脚本的示例可能会对您有所帮助,请查看其逻辑和实现,并使其适应上述情况。此外,您可以扩展聊天脚本以支持私人聊天室,并拥有两个应用程序,而不是一个

    不用说,asp.net对于您的项目来说已经足够了。您必须考虑的是,如果无法控制应用程序池的回收,您还需要一个持久层,否则可能会丢失字典


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

    客户端上的ASP.NET服务器端和Ajax(javascript)足以完成此任务

    粗略地说,您希望将客户端设置为在给定的时间间隔内轮询服务器以获取信息。服务器将响应客户端随后发布的状态更新
    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>>();
      }
    }