C# 基于浏览器的网络游戏问题

C# 基于浏览器的网络游戏问题,c#,asp.net,C#,Asp.net,我正在asp.net中开发一个基于浏览器的小游戏。设想一个游戏室,它有22名玩家,玩家通过点击按钮加入游戏室。(我正在数据库中保存房间中的玩家数量)当房间中的玩家数量为22时,我需要调用一个方法。问题是我不知道如何控制房间里的球员数量。我的意思是,我认为需要有一个bacground代码,它必须在服务器上一直运行,该代码控制号码并调用函数。这是我的第一个网络项目(学校项目),我希望你们都能帮助我 你的意思是向最终用户显示房间里的玩家数量?您可以使用AJAX在服务器上查询一个文件,该文件返回在线玩家

我正在asp.net中开发一个基于浏览器的小游戏。设想一个游戏室,它有22名玩家,玩家通过点击按钮加入游戏室。(我正在数据库中保存房间中的玩家数量)当房间中的玩家数量为22时,我需要调用一个方法。问题是我不知道如何控制房间里的球员数量。我的意思是,我认为需要有一个bacground代码,它必须在服务器上一直运行,该代码控制号码并调用函数。这是我的第一个网络项目(学校项目),我希望你们都能帮助我

你的意思是向最终用户显示房间里的玩家数量?您可以使用AJAX在服务器上查询一个文件,该文件返回在线玩家的数量,并使用它更新
或其他内容。jQuery可以帮助简化客户端代码。

在非常高的级别上,当用户尝试加入聊天室时,您可以检查聊天室是否已满


当你开始回答谁还在房间里的问题时,事情开始变得复杂起来。您是否已经知道会导致一个人退出房间的所有情况?

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

我想到的最明显的事情是让游戏与当前游戏保持一致

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

在服务器上,您可以通过将内容存储在应用程序状态或会话状态对象中来管理正在发生的事情

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

您必须了解应用程序生命周期之类的事情。。。

我建议您使用ashx(web处理程序)或WCF来满足基于服务器的需求

在客户机上(假设您想使用silverlight,因为您仍然可以使用C),然后您可以连接到服务器并请求数据

这将帮助你想象(我希望)多人在线游戏是如何运作的

正如上面所建议的,您可能会发现AJAX可以满足您的需要,AJAX请求通常是轻量级的,但请记住,您的客户机的完整源代码将有效地提供给每个玩家,因此您可以接受黑客攻击


因为这是一个简单的学校项目,但我相信你会很好。

这里,AJAX
定时器
控件可能是相关的。也可以使用
更新面板
。实际上,我可以向最终用户显示房间里的玩家数量。我想做但不能做的是,当房间里的人数是22时,我想调用一个函数(或方法),比如matchStart()。这个函数创建两个团队(11x2人)并将玩家放入这两个团队中,以此类推。所以我想做的不是客户端操作。我不需要向最终用户展示任何东西。我希望你这次做对了。我知道我解释得太复杂了,但我不知道如何简单地解释。但是你知道什么时候检查服务器端的玩家数量:当用户进入游戏时。每个来的人都要通过服务器上的一个中心函数,在其中检查当前号码,然后调用matchStart()函数。但是,由于html模型的存在,将消息发送给最终用户可能会更加棘手。。。进入房间的用户不能离开房间。当他加入房间时,这意味着他在游戏中,因此退出房间并不太重要,但无论如何感谢=)但是我在我的回答中检查房间中的玩家数量是否最大:我建议使用global.asax中的“Session start”事件添加到计数器中。。。应用程序[“UserCount”]=应用程序[“UserCount”]++;另一种方法是当会话结束时。。。应用程序[“UserCount”]=应用程序[“UserCount”]--;然后在页面加载事件中。。。。this.Controls.Add(新的LiteralControl(“用户计数:+Application[“UserCount”]].ToString());您可以通过添加越来越多的功能使这一点变得复杂,这应该会让您开始。