简介: 我正在创建一些游戏,我想为它创建一个自动化测试。
游戏场景: 有 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/