游戏时长算法

时间:2013-08-31 19:15:34

标签: java algorithm scala

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

游戏场景 r 房间, p 游戏玩家, gm 游戏大师, t 是总测试持续时间。每个房间都有自己的游戏大师,所以例如,如果有5个房间 - 将有5个主人。玩家选择随机的房间玩,房间大小是无限的,所以同时房间里有多少玩家并不重要。玩家从玩家池中被带走。例如,我们有一些玩家= 100,我们希望看到只有30名玩家同时玩。

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

所以我在考虑某种算法,它可以为每个玩家设置随机时间,但是应该记住总测试时间,不应该超过它。我的意思是玩家一个接一个地进行测试应该在设定的时间内完成,玩家游泳池也应该用尽(他们从游泳池中取出并且永远不会返回)。

到目前为止我的想法: 将测试总时间设置为持续时间,每次,当我们调用“播放”方法时,我们会查看测试持续时间 - 剩下多少时间?所以玩家的游戏时间不会超过这个值。但是有一个问题,其他球员也应该有时间参加比赛。可能这意味着,我应该在测试开始之前在桌子之间拆分玩家,并将他们的总时间设置为测试持续时间,并在每个桌子的玩家之间进行分割。但由于它们可以在同一个桌面上并行播放,因此很难实现。

很抱歉很长的帖子,只是想尽可能地描述它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

所以伪代码*将是

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了,我会说:我不喜欢伪代码