基于浏览器的在线游戏问题

3
我正在开发一个基于ASP.NET的小型浏览器游戏。想象一下一个游戏房间,容纳22名玩家,玩家通过点击按钮加入房间。(我将房间中的玩家数量保存在数据库中) 当房间中的玩家数量达到22人时,我需要调用一个方法。问题是我不知道如何控制房间中的玩家数量。我的意思是,可能需要一个后台代码一直在服务器上运行,并控制数量并调用函数。这是我的第一个Web项目(学校项目),希望大家能帮助我。
4个回答

1

假设每次用户进入或离开房间时,您都会调用一个 Web 方法,对吗?因此,您可以在那个时候更新房间中的用户数量(确保进行适当的锁定),如果是 22,则调用您想要的任何代码(因为您已经在服务器上)。您还可能需要定期让用户向服务器发送 ping,以让您知道他们仍然处于活动状态,这样如果他们断开连接或其他情况,您就可以将他们从房间中删除。


0
你的意思是向最终用户展示房间中的玩家数量吗?你可以使用AJAX查询服务器上的文件,该文件返回在线玩家数量,并将其用于更新<div>或其他内容。jQuery可以帮助简化客户端代码。

这里可能会涉及到 AJAX 的 Timer 控件。也许可以使用 UpdatePanel - Brian
实际上,我可以向最终用户显示房间中的玩家数量。我想做但无法做到的是当房间中的人数为22时,我想调用一个函数(或方法)比如matchStart()。这个函数会创建2个团队(11x2人)并将玩家放入这两个团队等等。所以我想做的不是客户端操作。我不必向最终用户显示任何内容。希望这次你能理解。我知道我解释得太复杂了,但我不知道如何用简单的方式解释它。 - Emre
1
但是你知道什么时候在服务器端检查玩家数量:当用户进入游戏时。每个人都通过服务器上的一个中央函数进行处理,在其中检查当前数量,然后调用matchStart()函数。由于HTML模型的原因,将消息传递给最终用户可能会更加棘手。 - Blindy

0

在一个非常高的层面上,当用户尝试加入房间时,您需要检查房间是否已经满了。

当您开始回答谁仍然在房间里的问题时,情况就开始变得复杂起来。您是否已经知道所有可能导致人们退出房间的情况?


嗯...进入房间的用户无法离开房间。当他加入房间时,意味着他已经在游戏中了,所以退出房间并不是太重要,但还是谢谢=) 然而,我会检查房间内玩家数量是否达到最大值。 - Emre

0

对我来说,最明显的想法是使游戏与当前的游戏保持一致。

有一个服务器(asp.net)和客户端(silverlight / flash可能)。

在服务器上,您可以通过将事物存储在应用程序状态或会话状态对象中来管理正在进行的事务。

您可以使用数据库(sql server可能)跟踪玩家在不同会话之间的进度。

您必须了解应用程序生命周期等事项... http://msdn.microsoft.com/en-us/library/ms178473.aspx

我建议您在服务器端使用ashx(Web处理程序)或WCF来满足您的需求。

在客户端(假设您希望使用silverlight,因为您仍然可以使用C#),然后可以连接到服务器并请求数据。

这将帮助您理解多人在线游戏的工作原理(希望如此)。

如上所述,您可能会发现AJAX对您的需求很好,ajax请求通常很轻量级,但请记住,每个玩家实际上都会获得客户端的完整源代码,因此您容易受到黑客攻击。

由于这只是一个简单的学校项目,我相信您会没问题的。


关于我的回答:我建议使用 global.asax 中的“Session start”事件来增加计数器...Application["UserCount"] = Application["UserCount"]++;然后在会话结束时进行反向操作...Application["UserCount"] = Application["UserCount"]--;然后在页面加载事件中....this.Controls.Add(new LiteralControl("用户计数:" + Application["UserCount"].ToString()));您可以通过添加更多功能来使此过程变得复杂,这应该可以让您开始。 - War

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接