- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这个问题并不是特定于语言的,它更多的是关于在 1v1 配对游戏中用于配对玩家的算法背后的逻辑。
这是一个由两部分组成的问题。
如果我有一款配对 1v1 类型的游戏,你打开手机的应用程序,选择“玩”,它会为你找到一个对手,最好的方法是什么?
假设在我的玩家数据库中,我有一个名为“pairing”的键,其 BOOL 值为 YES/NO。
有人打开应用程序,点击播放,所以我需要将它们配对,所以我将此 BOOL 翻转为 YES,然后我们寻找具有 YES 值的其他人并进行确认,然后他们播放?
如果第一个用户在等待付款时因为无聊而离开而关闭了应用程序,会发生什么情况,服务器值将保持为"is",因为我无法将其切换为否,因为应用程序已关闭。所以这行不通。
因此,我有一个带有 int 值的键“Pairing”,0 = no,除 0 之外的任何值都是 yes,所以每一秒我都会将该值从客户端增加 1 到服务器。在任何给定时间,如果这个值在 10 秒左右(服务器端)后没有改变,我假设用户关闭了应用程序并离开了,所以我们将值翻转为“0”。
好的,现在我们有了正确的配对模式检测(问题 1:这是检测正确配对模式的最佳方法吗?一个动态变量)
但是,现在服务器上有 10,000 名玩家都处于配对模式,进行配对的最佳方式是什么?如果我最终有 5 个玩家(玩家 A、B、C、D 和 E)都与同一个玩家(玩家 F)配对怎么办,当然我只是使用一些简单的 rand() 打破平局算法,但似乎有人可以最终总是打成平局并不断被抛来抛去,可能需要 20 秒才能确认两个玩家将互相战斗。最佳算法将有效地配对每个人,有什么想法吗?我有一种感觉,它会涉及某种队列,按照您等待配对的时间顺序排列。 (这是问题 2)
最佳答案
我的实现方式如下:
player_id
。ping
数据包。如果服务器在指定的时间后没有收到来自客户端的 ping
,则断开客户端。如果发生这种情况时玩家正在游戏中,请通知其他用户他们的对手已断开连接,并认为比赛无效。至此,我们已经解决了连接问题。现在,关于多个用户是否与同一个人配对的问题。最简单的事情是像
while server is running
if player is not currently in a match
if there are available opponents
set the first player's opponent to the opponent
set the opponent's opponent to the first player
remove each of them from the list of available players
else
wait for an opponent to become available
如果服务器在 n
时间后没有从客户端收到 ping 数据包,您还应该从可用播放器列表中删除该播放器。
关于algorithm - 在配对多人游戏中到达 "pair with opponent"的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27491016/
我正在使用 QuickBlox SDk 进行视频通话。当我从一个用户调用另一个用户时,我收到了来自该用户的调用,但没有收到对方的视频和语音流?你能建议我如何解决这个问题。即使我正在尝试 Quickbl
这个问题并不是特定于语言的,它更多的是关于在 1v1 配对游戏中用于配对玩家的算法背后的逻辑。 这是一个由两部分组成的问题。 如果我有一款配对 1v1 类型的游戏,你打开手机的应用程序,选择“玩”,它
我希望在我的回合制游戏中有一个“快速匹配”模式,玩家会自动与第一个可用的玩家匹配。我正在使用我自己的自定义用户界面。到目前为止我的代码如下所示: - (void)quickMatch { GKMa
我已经阅读了 Professional XMPP 的所有 484 页,并阅读了无数关于花名册 + XMPP 的论坛帖子,这个问题仍然是我正在努力解决的问题。我正在寻找有关最佳实践的见解,所以我至少知道
我正在制作一款用户与计算机对战的游戏。轮到玩家时,计算机对手会考虑下一步行动。如果玩家移动到计算机对手计划移动的位置,计算机对手将重新开始搜索它的移动。 下面是主函数和对手函数的概要: [更新] pt
MCTS算法的步骤是: 选择 扩张 模拟 反向传播 我的问题涉及第三步,模拟。我们用一个新节点扩展了我们的决策树,并模拟了剩余的 Action ,直到游戏结束。这个模拟可以分为两部分: 轮到我们利用决
在serializer.py中使用create方法后出现错误 这是我的错误: Got AttributeError when attempting to get a value for field o
在serializer.py中使用create方法后出现错误 这是我的错误: Got AttributeError when attempting to get a value for field o
我是一名优秀的程序员,十分优秀!