java - 游戏时长算法

标签 java algorithm scala

简介: 我正在创建一些游戏,我想为它创建一个自动化测试。

游戏场景:r 个房间,p 个游戏玩家,gm 个游戏高手,t 是总测试时长。每个房间都有自己的游戏管理员,例如,如果有 5 个房间 - 就会有 5 个管理员。玩家选择随机房间进行游戏,房间大小是无限的,所以房间内同时有多少玩家并不重要。球员是从球员池中挑选出来的。例如,我们的玩家池 = 100,我们希望同时玩游戏的玩家只有 30 人。

问题: 将玩家带到随机房间的机制已经完成,但我想为每个玩家设置随机播放时间。这是我的大脑关闭的地方。好像我想将测试总时间设置为 30 分钟,我希望所有玩家都在那个时候完成游戏。因此,每当玩家从游泳池中被带走并开始比赛时,我都会设置比赛时间,如下所示:player1.play(10);

所以我在考虑某种算法,它可以为每个玩家设置随机时间,但它应该记住总测试时间并且不应该超过它。我的意思是玩家一个接一个地来,测试应该在规定的时间内完成,玩家池也应该用完(他们从池中被带走,再也没有回来)。

到目前为止我的想法: 将测试总时间设置为持续时间,每次调用“播放”方法时,我们都会查看测试持续时间 - 还剩多少时间?所以玩家游戏时间不会超过这个值。但是有一个问题,其他玩家也应该有时间玩。可能这意味着,我应该在测试开始之前将玩家分配到不同的 table ,并将他们的总时间设置为测试持续时间,并将其分配给每张 table 的玩家。但由于他们可以在同一张 table 上同时玩,这很难实现。

抱歉发了这么长的帖子,只是想尽可能多地描述一下。有什么想法吗?

最佳答案

简单地为每个玩家分配随机时间的问题在于,总时间可能比总体可用时间大得多或小得多。因此,随机分配每个玩家可以拥有的总时间的权重更有意义。

所以伪代码*会是

double totalWeighting=0

for each player
    player.weighting=randomPositiveNumber()
    totalWeighting+=player.weighting
end

for each player
    player.allocatedTime=(player.weighting/totalWeighting)*availableTime
end

必须经历两次,这样我们才能在分配时间之前知道totalWeighting


*有人会说我的伪代码很不标准,看起来太像java了,我会说:我不喜欢伪代码

关于java - 游戏时长算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18551878/

相关文章:

Java可视化库称为 "C-BOMB"之类的?我想我听错了

java - 如何在 Java 中分配数组的数组?

scala - 如何理解scala中的monad

scala - 使用 scala 提取器将 String 转换为 Int

java - WebClient - 如何获取请求正文?

java - 使用 Thin Driver 设置扫描关闭

随机选择对象的算法

algorithm - 高效分发的数据结构

arrays - 连续子集数组Sum为某整数算法

mysql - Slick 3.0 (scala) 查询在运行多次之前不会返回数据(我认为)