点对点的无主机竞争游戏?[关闭]


15

我想知道-有没有创造过以下游戏:

  • 对等体,没有一个对等体被指定为主机
  • 竞争(不合作,玩家互相对抗)
  • 可证明是公平的(任何玩家都不可能作弊)
  • 不要给任何玩家过多的信息(例如,不要向正在运行的应用程序泄露其他玩家的机密)

这样的游戏的一个例子是扑克游戏,其中每个玩家和他们的游戏只能知道自己的手,而不知道其他玩家的手而不依赖于他们中的任何一个。我知道有一些游戏可以证明是公平的,但是我所知道的全部都存在于服务器-客户端配置中。


1
“点对点”和“没有任何玩家作弊的可能性”-那是不可能的。
Kikaimaru 2013年

7
@Kikaimaru你错了。
sam hocevar 2013年

@Kikaimaru实际上,我确实对此有一些了解,但是我想先问一下,然后再尝试重新发明轮子(好吧,在这种情况下,也许是一架飞机)。
ThePiachu

2
我非常怀疑是否有一种方法可以防止在服务器客户端执行此操作时作弊。例如,玩家可以知道其他玩家在作弊并停止游戏-不需要任何代码(或者您可以停止游戏),但是“没有作弊的可能性”吗?
菊丸

@Kikaimaru如果协议强制正确性,则尝试作弊与根本不玩游戏相同-如果有两个以上的玩家,其他玩家仍然可以继续玩,并且作弊尝试将被忽略,这与无效的IP数据包不同是。
sam hocevar 2013年

Answers:


19

我不知道是否已经创建了这样的游戏,但是它们确实已经被理论化了。关于该主题已经发表了几篇论文。您可能需要研究承诺方案,以解释两个意见不同的方如何在物理距离较远的情况下翻转硬币(另请参见此1981年论文:通过电话进行硬币翻转)。

一篇非常详尽的论文是例如作弊对等交易纸牌游戏

我们提出了一种 防作弊的点对点协议,用于实施在线交易纸牌游戏。我们将分解所有TCG共有的动作,并说明如何在两个玩家之间执行这些动作而无需第三方裁判(通常需要无偏见的服务器)。在每个动作中,可以防止玩家作弊,或者如果他们作弊,则对手将能够证明自己已经作弊。最后,我们将展示这些方法的安全性,以及如何将它们与其他样式的TCG和其他点对点游戏混合使用。

同样适用于集中式和点对点游戏的防作弊播放

我们提出了一种具有可证明的反作弊保证,可证明的安全和有效的协议,但会降低性能。然后,我们开发了该协议的扩展版本,称为异步同步,它避免了代价,是无服务器的,提供了可证明的反欺诈保证,在丢包的情况下也很健壮,并提供了显着提高的通信性能。此技术适用于常见的游戏功能以及大型多人游戏的群集和基于单元的技术。具体来说,我们提供了零知识证明协议,以便玩家彼此之间处于特定范围内,否则就没有距离的概念。我们的性能要求得到了基于真实游戏轨迹的模拟分析的支持。


1
另请参阅Wikipedia上的“心理扑克”页面-en.wikipedia.org/wiki/Mental_poker。目前已经对比特币论坛关于这个的潜在应用的讨论bitcointalk.org/index.php?topic=1487.0
liamzebedee

很棒的链接@liamzebedee。那篇文章几乎具有使扑克在点对点运作良好的精确算法。
captncraig 2013年

4

尽管这不是偶然的游戏,但我正在开发一款接近您要求的AIR游戏。

  1. 使用Flash的RTMFP多播协议开发。两个客户端均不被视为主机。
  2. 基于物理的竞争系统。
  3. 验证对手的输入,并取消无效数据的比赛资格。
  4. 由于带宽/延迟原因,不传输某些物理信息(这也禁用了某些作弊方法)。

但是,请注意...

我认为“不可能...作弊”是一种错误的说法。如果您不控制所有方面(硬件和软件),则可能会作弊。

虽然不是游戏,但我认为比特币网络是您正在寻找的主要示例。

编辑

我将对您的主要问题进行一些扩展。

首先,没有某种程度的权威要求,我看不到任何要求“证明公平”条件的游戏。从排行榜到小额支付,集中式系统和权威都可以并存。

其次,我能想到的最好的示例游戏是早期的神奇宝贝游戏。尽管内部网络物流可能不是对等的,但它遵循相同的原则。

最后,移动平台特别适合点对点游戏。我认为这个领域非常缺乏,这就是为什么我目前正在开发一系列点对点游戏的原因。


是的,我可能对比特币有一些经验…… bitcoin.stackexchange.com/users/323/thepiachu ;)
ThePiachu 2013年

1

根据使用情况,可能有一些帮助:

如果您需要同时获得用户的输入,而又不能过早地利用信息来为其带来好处,则可以使用承诺方案。本质上是:

  1. 两位玩家都提供他们希望执行的动作的哈希值。
  2. 在双方都做出承诺之后,双方都可以提供明文动作。
  3. 可以将纯文本与哈希进行比较,以验证没有人在学习了另一人的操作后更改了答案。

这可以用于多种用途,包括共享的随机数(两者均通过承诺提供整数,并在共享后将它们进行异或运算以得到共享的值。)

但是,这对于像扑克之类的游戏来说是不够的,因为它要求只有一个人才能知道纸牌,同时还要能够从共享卡组中抽牌。维基百科使用一种方案,即两个玩家分别对每张卡进行多次加密,可以很好地进行共享改组。这就形成了一种情况,需要2个密钥来解密任何给定的卡,并且两个玩家都拥有1个。这篇文章引用了性能方面的问题,但是我认为AES或类似的东西在2个玩家扑克所需的规模上并不昂贵。

如果我正在设计一种算法,我将让玩家在游戏开始时计算一个随机值,以用作其余所有操作的种子,并共享该值的哈希值。这样,他们就可以在赛后分享该价值,并且您可以验证他们是否正确遵循了协议,而没有任何恶作剧。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.