- 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/
我正在尝试制作一个程序,显示飞机到达和起飞的时间表,然后要求用户在 C 中输入时间。然后程序将找到最接近输入时间的到达时间用户。问题是它没有按预期工作,并且给我一个错误的到达时间,甚至不接近输入的时间
我有一个不断填充新信息行的 Excel 表,其中一列与联系客户的日期(有时为空 - 无需输入日期)相关,如果在 10 内没有收到回复从那以后的几天,我们必须发送提醒,如果过了 17 天,我们必须取消订
实际到达很简单,标签进入接收器天线范围,但是偏离是造成问题的原因。 首先,我们了解一些有关设置的信息。 标签: 它们以433Mhz的速度工作,每1.5秒钟发送一次“心跳”,移动时进入传输突发模式,这种
我构建了这段代码来从 URL 获取 XML我使用了 AsyncTask,当到达 getInputStream() 点时,半身应用程序仍然崩溃 重点是我想从 url 获取 XML 作为字符串。 我尝试不
所以我有一个 TDBGrid,我的目的是搜索 DBGrid 的 Fieldname 并将其与我的编辑的 Text 属性进行比较,如果它们相等,则 我想将找到匹配项的整列写入列表框。 通过带有 fiel
我会写得非常简单,因为实际的修复并不比我不理解的实际设计重要。似乎一旦我的 @RequestBody 命中 @Controller,有关 subtype 的信息就会丢失。 假设我们有: class A
所以我正在做这个简单的动态编程问题,关于达到 n一次只能走 1 或 2 步。我知道答案基本上是一个斐波那契序列,答案是:达到n-2的步骤数+ 到达 n-1 的步数. T(n) = T(n-1) +
(function start (){ $('.bar').each(function(i){ var $bar = $(this); $(this).append('')
我有一个程序,我在启动它之前要求用户输入。 public static void main(String args[]) { String database = JOptionPane.sho
就是这样,我必须在提交按钮上有一张图片,但它根本没有出现。 我希望它看起来像这样: 现在看到我的是这样的,我不明白为什么它没有出现在页面上。 HTML CSS #sognu { bac
click here 点击后重定向至 xyz.com/#contact, 现在我想获得div #abc的顶部位置 //set the value as a variable, and remove t
here is a fiddle to know where I am starting from 我要解决的问题涉及对单个 html 文件的内容进行“分页”,以一种将它们一次锁定在一个部分中的方式。
是否可以在传递页面部分时运行 javascript 函数?我想要实现的是类似于 Twitter Bootstrap 的 scrollspy。 最佳答案 您可以使用 waypoints 插件: http
我有一个可以动态调整其大小的 iframe。我通过父页面上的发布消息和监听器解决了这个问题,因此每次 iframe 的内容发生变化时,iframe 的大小也会发生变化,并且永远不会有滚动条。 在 if
我试图让我的导航栏在到达我在网站下方设置的 anchor 时变得透明。 这是我的HTML Home About Logo W
我写了一个简单的程序来管理姓名列表(下面是程序的一部分)。我希望函数“choice()”结束并返回到 main()——从而结束程序——当用户对变量“option”的输入为 4 时。然而,choice(
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
代码片段在 while 循环后有一个 EOF,之后必须再次重新打开文件 - fopen 被重用。我的问题是是否有办法避免这种笨拙的 fopen 双重使用或以某种方式不使用 EOF? if (!(f=f
从这个页面: http://www.beta.inegi.org.mx/app/buscador/default.html?q=e15a61a 我正在尝试检索此网址: http://www.beta.
我使用维基百科的 API 来获取有关页面的信息。API 给我这样的 JSON: "query":{ "pages":{ "188791":{ "pageid":18879
我是一名优秀的程序员,十分优秀!