0

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

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

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

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

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

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

4

1 回答 1

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

于 2013-08-31T20:10:24.377 回答