0

はじめに: ゲームを作成していて、その自動テストを作成したいと考えています。

ゲーム シナリオ: rルーム、pゲーム プレーヤー、g mゲーム マスターがあり、 t合計テスト時間です。各部屋には独自のゲーム マスターがあるため、たとえば 5 つの部屋がある場合、マスターは 5 人になります。プレイヤーはプレイする部屋をランダムに選択します。部屋のサイズは無限であるため、部屋に同時に何人のプレイヤーがいるかは重要ではありません。プレイヤーはプレイヤー プールから取得されます。たとえば、プレイヤーのプール = 100 で、同時にプレイするプレイヤーを 30 人だけ見たいとします。

問題: プレイヤーをランダムな部屋に入れるメカニズムはできていますが、プレイヤーごとにランダムなプレイ時間を設定したいと考えています。これが私の脳がシャットダウンする場所です。テストの合計時間を 30 分に設定するかのように、その時間までにすべてのプレイヤーがゲームを終了するようにします。そのため、プレイヤーがプールから連れ出されてプレイを開始するたびに、次のようにプレイ時間を設定しています。player1.play(10);

そこで私は、各プレイヤーにランダムな時間を設定できるある種のアルゴリズムについて考えていましたが、合計テスト時間を念頭に置いて、それを超えないようにする必要があります。つまり、プレイヤーは 1 人ずつ来ており、テストは設定された時間内に終了し、プレイヤー プールも使い果たされている必要があります (彼らはプールから取り出され、二度と戻ってきません)。

これまでの私の考え: テストの合計時間を期間として設定し、「再生」メソッドを呼び出すたびに、テスト期間を確認します - 残り時間はどれくらいですか? したがって、プレイヤーのゲーム時間はこの値を超えません。ただし、他のプレイヤーにもプレイする時間が必要であるという問題があります。おそらくこれは、テスト開始前にプレイヤーをテーブル間で分割し、合計時間をテスト期間に設定して、各テーブルのプレイヤー間で分割する必要があることを意味します。しかし、同じテーブルで並行してプレイできるため、これを実装するのは非常に困難です。

できるだけ詳しく説明したかったので、長い投稿で申し訳ありません。何かご意見は?

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時間を割り当てる前に確認できるように、2 回行う必要があります。


*私の疑似コードは非常に標準的ではなく、Javaに似すぎていると言う人もいます。私はこう言います: 私は疑似コードが好きではない

于 2013-08-31T20:10:24.377 に答える