使用HTML/JS/AJAX/Java开发基于浏览器的多人纸牌游戏

使用HTML/JS/AJAX/Java开发基于浏览器的多人纸牌游戏,java,javascript,jquery,Java,Javascript,Jquery,我目前有一款多人纸牌游戏,是用Java开发的,现在正在控制台中运行。这个游戏的形式类似于桥牌和黑桃,不包括竞价过程。这是一个四人游戏,玩家轮流玩一张牌 我目前正在努力将其转换为基于浏览器的webapp,并且正在添加springmvc,并使用HTML、JavaScript和AJAX作为UI和与后端的通信。我有一个很好的想法,我想采取的方法是让单人对AI工作,允许用户玩他们的牌,并使用AJAX调用从服务器获得接下来的三个播放 然而,我想知道我需要采取什么样的方法才能实现多人游戏。我见过一些关于“So

我目前有一款多人纸牌游戏,是用Java开发的,现在正在控制台中运行。这个游戏的形式类似于桥牌和黑桃,不包括竞价过程。这是一个四人游戏,玩家轮流玩一张牌

我目前正在努力将其转换为基于浏览器的webapp,并且正在添加springmvc,并使用HTML、JavaScript和AJAX作为UI和与后端的通信。我有一个很好的想法,我想采取的方法是让单人对AI工作,允许用户玩他们的牌,并使用AJAX调用从服务器获得接下来的三个播放

然而,我想知道我需要采取什么样的方法才能实现多人游戏。我见过一些关于“Socket编程”的引用,我不熟悉,但它们似乎围绕着Java小程序,而不是基于浏览器的应用程序


基本上,我正在寻找一种方法来确保当一个用户启动一个游戏而其他人加入时,我如何确保他们连接到同一个游戏,并且能够看到彼此的游戏?在为单人游戏开发完全的用户界面之前,我要问这个问题,因为我想避免完全重新设计以支持多人游戏功能。

由于您要创建多人游戏,您的客户端需要至少有一台服务器连接。由于您希望使此浏览器成为基于浏览器的,因此您很可能需要自己的服务器(而不是让其中一个客户端成为服务器)。当用户加入游戏时,它会登录到该用户所在的服务器上。当玩家执行某个动作时,服务器会处理该动作,然后向连接到该房间的每个其他客户端发送通知。此时,客户端UI将更新

在过去,纯HTML/JavaScript无法做到这一点,因为无法打开套接字。也就是说,服务器无法通知客户端。然而,在HTML5中,你应该能够使用WebSoCube来实现你在中间的服务器所做的事情。p> 然而,如果您不想使用HTML5WebSockets,还有另一种技术可以模仿JavaScript中的套接字。也就是说,服务器可以与客户端对话。这种技术称为长轮询。客户机向服务器发送请求更新的请求,如果没有可用的更新,服务器将保留该请求,直到有可用的更新,并将其发送回客户机,此时他们会发出另一个更新请求

另一个选择是,如果您非常熟悉Java,您可能希望查看。GWT是Java的一个子集,它被编译成HTML和JavaScript作为前端,如果需要,它会创建一个服务器端Java可执行文件,您可以与TomCat或其他web服务一起使用。在这个选项中,有几个库允许您编写套接字样式的代码,这些代码将被编译成长轮询JavaScript


祝你好运

您可以使用,但根据您的服务器结构,这可能不是最好的解决方案。或者,您可以让每个客户端的脚本重复调用服务器以查找新数据。从理论上讲,您希望每个玩家都有相同的“sessionID”,他们可以用它来调用服务器。很明显,你希望这是散列。谢谢你提供了非常翔实的答案。我想我会选择WebSocket选项,因为它看起来像IE10将加入聚会,并且已经找到了一些很好的教程来帮助实现这一点。最后一点让我困惑的是如何保持比赛的公正性。我想我会让服务器维护一组游戏对象(我已经创建了)。我将向我的游戏对象添加一个“gameId”数据成员,并在每次请求时向UI发送/接收该ID。这听起来像是一种可行/有效的方法吗?我建议使用每个游戏特有的哈希gameSessionID,以及从gameSessionID到游戏的并发安全映射。由于您有多个用户与服务器对话,因此并发性将非常重要。确保仔细阅读如何安全地执行此操作。由于您熟悉Java,您可能希望从这里开始:长轮询比WebSocket更好。我讨厌网袋