标签: multiplayer

是否有一种估算时钟偏差的算法可以在Http上工作?

我正在为Windows Phone 7编写一个多人游戏.我需要确保每个玩家同时发生事件.我现在的方法是提前播放我希望活动发生的时间,并依靠电话的时钟相当准确.

麻烦的是,我已经看到一些时钟不准确的情况 - 它可能会在几秒钟内消失.所以我想要做的是估计电话时钟与服务器的时间有多么不同.当然,需要考虑网络延迟,特别是因为对我开放的唯一网络协议是Http.

所以我的问题是,有没有人知道我可以用来估计客户端和服务器之间时钟时间差异的算法,精度大约是100ms?

从我作为数学本科生的日子开始,我似乎记得有一个统计模型可以用于这种情况,我们正在采样一个假定由常数加上误差量(延迟)组成的值.假设遵循一些分配.有人知道这个,它确实适用吗?

algorithm http multiplayer windows-phone-7

5
推荐指数
1
解决办法
2026
查看次数

创建多人二十一点游戏

我是python的新手,并且已经尝试在python上制作多人二十一点游戏一段时间了.我遇到了很多很多问题,并且想知道你们是否可以帮助我.

import random

def total(hand):
    aces = hand.count(11)
    t = sum(hand)
    if t > 21 and aces > 0:
        while  aces > 0 and t > 21:
            t -= 10
            aces -= 1
    return t

Cards = ["2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "AH", "JH", "QH", "KH", "AC", "JC", "QC", "KC", …
Run Code Online (Sandbox Code Playgroud)

python multiplayer blackjack

5
推荐指数
0
解决办法
2296
查看次数

自动化多人游戏中的坑洼,玩家可以使用自己的算法

关于标签

我将其标记为Java C ++问题。这意味着我不是在寻找特定于语言的答案。我只标记了C ++和Java,因为我精通它们,并且如果用这些(或类似)语言编写代码示例,则很可能会理解您的代码示例。

我在找什么

指针洞察力安全性措施,发展软件时,主要是我应该考虑到游戏,如描述的下方。安全是指检查并再次检查用户是否采取了非故意的行为。这可能意味着一些行为,例如将他/她存在的最新恶意病毒更新集发送到服务器/其他客户端,或者通过黑客攻击等方式损害其他玩家的用户体验。


预期的评论和答案

您是否在问如何阻止人们入侵您的游戏?

这是以任何方式,我的问题,因为它的方式过于广泛,这个线程。但是,如果您确实找到了一种简单的方法(通过作弊)来赢得每场比赛,请告诉我。

这个问题更适合X

我已经在CodeReview和程序员中提出了这个问题。在这两个网络中,该职位均受到好评。为了公平起见,这里也很不受欢迎(请参阅ADTC的评论),因此赏金很高。悬赏后,我重写了这篇文章,以更好地满足SO的标准。但是,如果您仍然认为此帖子不太适合此处,请告诉我原因。我很难确定这是否真的更适合SO或Programmers,所以不要以为这只是我一秒钟不考虑之后在这里发布的转储。

要在两台计算机之间创建连接,应使用套接字。去谷歌上查询。

我不是在寻找这种技术帮助。我知道如何实现该软件,这不是我第一次这样做。请看看我问的实际问题。


我为什么要问这个?

有问题的软件

我正在开发类似蛇的多人游戏,玩家可以使用自己的算法来确定蛇的下一步行动。播放器通过客户端-服务器连接彼此连接,即,一个播放器将充当主机。您可以假设服务器代码将等到所有玩家轮到自己,直到更新所有客户端之间的游戏状态为止。

关于游戏

我的游戏在文件夹中搜索任何兼容的.jar文件,这些文件的主类扩展了特定的抽象类。然后,玩家可以通过直接连接到其他玩家或通过在大厅搜索游戏来通过网络连接到其他玩家。

在玩游戏时,每个玩家将使用自己的算法来确定其蛇的下一步动作。每个游戏的持续时间可能会有所不同,具体取决于为游戏指定的更新速率,但是大多数情况下它们的速度很快,并且很可能会在不到30秒的时间内结束。

我还没有实现实际的网络多人游戏。


逻辑的模板源文件如下:

package template

import snake.*;

public class TemplateLogic extends SnakeLogic {

    @Override
    public void onLaunch() {
    }

    @Override
    public String getMove() {
        return "UP";
    }

}
Run Code Online (Sandbox Code Playgroud)

因此,从主机播放器的角度来看,我打算做的是以String格式(“上”,“下”,“左”,“右”)通过网络获取播放器的下一个动作,因此在这方面不会有任何安全问题。每个客户用来确定其下一步行动的实际程序只能在相应客户的计算机上运行。

我希望你到目前为止一直在关注我。无论如何,我现在担心的是我可能忽略的任何其他坑洼。确定所有这些坑洼可能是一件繁琐的工作,因此,我主要不会问这个。我对这件事的见解是我所期望的。理想情况下,我可以从不同的人的多个答案中得到更大的了解。

浮现在其他问题之上的问题是,我可以阻止任何客户端在其程序上使用会损害其他播放器用户体验的方法吗?例如,这样的方法Thread.sleep():如果玩家让他的算法在每次移动之间等待10分钟,那将很烦人。对于这个特殊的问题,我认为应该为每个动作设置一个时间限制,在此之后,落后的/恶意的玩家将被踢出或被分配一个默认的动作,以便游戏可以正常继续。


音符:

@Darinth的回答让我想起了游戏的一个非常重要的方面:允许用户输入,这意味着蛇的下一步可以由人类玩家决定-也就是说,可以使用键盘正常玩游戏。此外,没有任何限制会限制您在纯AI和仅键盘解决方案之间进行选择:您可以将它们混合在一起,例如,自己控制蛇,并在发现自己将自己陷入陷阱时让AI接管。


总结一下

我忽略了大事吗?我已经计划将这作为我和我的朋友一起度过的一个小项目,与他们共度时光,但是我有点发烧友。

无论您的想法有多小,请不要犹豫。如果您想到更多的兴趣点,以后可以编辑答案以更全面。我会定期检查所有答案以进行修改。

感谢您的时间。 …

c++ java security networking multiplayer

5
推荐指数
1
解决办法
462
查看次数

Box2D 是完全确定性的吗?

我正在使用 LibGDX 和 Box2D 编写一个 Android 游戏。我计划为其添加回合制多人游戏功能。

现在,如果我在两个客户端上以相同的时间步长以相同的速率步进 Box2D 世界,并使用完全相同的初始参数在两个客户端上开始模拟,当模拟结束时,两个模拟的最终状态是否完全相同相同?换句话说,Box2D 模拟是完全确定的吗?

如果不是,那么这意味着每次模拟结束时,作为主机的一个客户端将不得不告诉另一个丢弃其最终模拟的结果并使用它来代替。

android deterministic multiplayer box2d

5
推荐指数
2
解决办法
1767
查看次数

Google Play游戏实时多人游戏:获取参与者ID并将其存储到字符串中

我在我的统一游戏中第一次尝试使用Google实时多人游戏。QuickMatch工作正常,我的意思是我可以使用以下方法获取连接的参与者的ID并将其存储到字符串中:

string MyId = PlayGamesPlatform.Instance.RealTime.GetSelf ().ParticipantId;

//string frndId = PlayGamesPlatform.Instance.RealTime.GetParticipant ();
//Get all opponent's ID
List<Participant> playerIDs = PlayGamesPlatform.Instance.RealTime.GetConnectedParticipants ();

if (MyId == playerIDs [0].ParticipantId) {

    oppoUsarname = playerIDs [1].DisplayName.ToString ();
    multiplayersName [1].text = "nothosting" + oppoUsarname;
    gameHost = true;

    OppoID = playerIDs [1].ParticipantId;

    OppoDN = playerIDs [1].DisplayName.ToString ();
} else {
    oppoUsarname = playerIDs [0].DisplayName.ToString ();
    multiplayersName [1].text = "gamehoster" + oppoUsarname;
    gameHost = false;
     OppoID = playerIDs [0].ParticipantId;
     OppoDN = playerIDs [0].DisplayName.ToString ();
}
Run Code Online (Sandbox Code Playgroud)

对手进入房间后,我可以展示他的表情displayname …

c# multiplayer unity-game-engine google-play-games

5
推荐指数
0
解决办法
222
查看次数

如何在 Unity Netcode 中停止游戏对象的客户端/主机?

我设法使用 Unity Netcode 实现某种多人游戏,我知道这是非常新的,但我遇到了一个相当大的问题。我似乎无法断开与服务器实例的连接。这会导致我加载游戏场景并生成 NetworkManager 实例的问题。然后我返回主菜单场景并再次加载游戏场景,现在有 2 个 NetworkManager 实例,这显然会导致错误。

我在文档中读到您可以使用它:

public void Disconnect()
{
    if (IsHost) 
    {
        NetworkManager.Singleton.StopHost();
    }
    else if (IsClient) 
    {
        NetworkManager.Singleton.StopClient();
    }
    else if (IsServer) 
    {
        NetworkManager.Singleton.StopServer();
    }
    
    UnityEngine.SceneManagement.SceneManager.LoadScene("MainMenu");
}
Run Code Online (Sandbox Code Playgroud)

然而,所有这些停止函数似乎在单例下根本不存在。我错过了图书馆或其他什么吗?现在我使用的解决方法是禁用“不破坏”,然后 NetworkManager 在切换场景后被破坏,但是如果我想在切换场景后保留它怎么办?有没有办法控制服务器/客户端何时停止?我假设这是一个错误,但我只是想确定一下。

c# multiplayer unity-game-engine

5
推荐指数
1
解决办法
8105
查看次数

多人联网游戏中的同步?

最近我一直在研究多人网络应用程序.我使用Bonjour服务和NSStream对象成功实现了客户端服务器模型.双向沟通已成功完成.

我面临的问题是:运行应用程序的两个设备通过本地wifi连接.从客户端向服务器发送消息时存在延迟问题,反之亦然.

简要描述:

  • 这是一款最多有两名球员的赛车游戏.
  • 一台服务器和其他客户端.
  • 当客户端按下按钮时,会向服务器发送特定消息,告知按下了哪个键或按钮.然后服务器响应并在服务器本身上对客户端的汽车进行更改.这些变化并不总是一样的.客户端屏幕上的汽车实际位置与服务器屏幕中的实际位置之间始终存在差异.

有任何想法吗?

iphone networking synchronization multiplayer

4
推荐指数
1
解决办法
5810
查看次数

多人游戏是否应始终在每个客户端请求中从数据库请求数据?

好吧,我不知道这个问题的标题是否合适,但我不知道如何用几句话来说.

我目前正在开发一个多人2D游戏,在服务器端使用NodeJS和Socket.io,在客户端使用HTML5.除非他们完成比赛,否则这个游戏不需要保存球员的进度.我必须确保所有关于球员的信息,例如得分和帮助始终有效.所以我决定将这些信息集中在服务器上,这样客户端就不会向服务器发送分数,而是根据发送的信息计算服务器计算分数并将其发送给所有客户端.除此之外,我可以让这个游戏的不同会话最少运行2个玩家,最多4个玩家.

起初我决定实现这一点,服务器总是在内存中维护游戏会话数据,但现在我在质疑自己是否应该使用数据库来存储这些数据.我正在使用数据库来存储会话数据,因为我没有使用未完成的会话数据.但是,我应该在他们玩的时候维护数据库中的会话和玩家数据吗?我的问题是客户端经常与服务器通信,这种方法我必须首先从数据库请求他们的数据,进行必要的更改,将其存储回数据库,并在每个客户端请求上重复此过程.也许答案很明显,但我应该使用这种方法吗?

这是我第一次开发游戏,所以我不知道事情通常如何运作.我只知道我希望服务器快速.我之所以选择维护内存的一切,主要是因为我发现的关于多人游戏开发的所有示例和教程都没有提到过数据库......

谢谢!

html5 multiplayer node.js socket.io

4
推荐指数
1
解决办法
1137
查看次数

如何使用firebase向特殊在线用户发送警报消息

我正在尝试使用javascript制作一个"FourConnect"游戏.我想,所有在线用户都有一个列表.这个列表是我在firebase网站上的例子.现在我希望我可以选择一个在线用户并向他们发送邀请来与我一起玩.所以我写了一个函数,所有用户都希望我有一个额外的div.当我点击div时,这个特殊用户应该得到一个确认框来说出okey或取消.如果用户点击该键,则该游戏应该开始.我将保存用户的名称和ID.这已经有效了.

我的问题是,我不知道如何将请求发送给其他用户.我尝试了很多,但总是确认框在我的brwoser上而不是在其他用户的浏览器上.

我在firebase页面和谷歌上寻找解决方案,但找不到任何解决我问题的方法.

我已有的代码:

  var name = prompt("Your name?", "Guest"),
      currentStatus = "? online";

  // Get a reference to the presence data in Firebase.
  var userListRef = new Firebase(connectFour.CONFIG.firebaseUrl);

  // Generate a reference to a new location for my user with push.
  var myUserRef = userListRef.push();
  var gameId = myUserRef.name();
  document.getElementById('labelGameId').innerHTML = gameId;

  beginGame({id: gameId, name: name, status: currentStatus});
  // Get a reference to my own presence status.
  var connectedRef = new Firebase('http://presence.firebaseio-demo.com/.info/connected');
  connectedRef.on("value", function(isOnline) {
    if (isOnline.val()) {
      // …
Run Code Online (Sandbox Code Playgroud)

multiplayer sendmessage firebase

4
推荐指数
1
解决办法
1万
查看次数

向Lance Game中的个人玩家发送"秘密"数据

我想知道在lance-gg中是否有一种简单的方法可以仅向每个玩家发送玩家特定数据,而不是向所有玩家发送所有数据.

我希望创建一个扑克游戏,并且不希望每个玩家所持有的数据都向所有玩家广播,而只是让每个玩家都收到有关他们自己的牌的信息.

这在目前的GameEngine和ServerEngine之间是否可以轻松实现?

在游戏过程中,需要执行以下步骤:

  • 向每个玩家"交易"牌(单独向每个玩家发卡),并且还广播一个事件以指示其他客户应该为正在发牌的玩家动画接收它们的卡片.
  • 将待处理的卡存储在其他要更新的数据之外
  • 如果播放器断开连接,则检索播放器卡,然后在手中重新连接
  • "揭示"牌(向所有玩家广播任何显示的牌,如翻牌和摊牌)

玩家的牌也需要存储在服务器上,但不能在每一步重新广播.

javascript multiplayer socket.io lance

4
推荐指数
1
解决办法
382
查看次数