私は小さなプロジェクトのために小さなクラスを作っています。これはテキストベースのRPGゲームで、NPCの死亡時のドロップクラスを作成しようとしています。私はアイテムID(名前)のランダムな量を落としてアイテムの希少性を落とすために、いくつかのMath.randomメソッドを作成しています(まったく同じです。それはすべて正常に動作しますが、(起動時または実行時に)1回ランダム化するだけで、それ以降の量はランダム化されません。私はまた、2つの数字、例えば25と50の間で無作為化しています。無作為ではなく、次に25より小さくならないでしょう。乱数化する配列の番号ランダムを使用する
私の質問は次のとおりです。2D配列または一般的な配列NPCが死ぬたびに、最初に取得された乱数が変化し、同じままではありません。今のところ、それは選択肢の数にとどまります。数が25であれば、次のnpcが殺されますが、その金額はまだ25 ..と25 ..と25 ...となります。ランダム化したり変更したりする必要があります。
ご協力お願いいたします。
public class DropConfig {
private static final int
ALWAYS = 0,
VERY_COMMON = rate(1, 9),
COMMON = rate(10, 20),
UNCOMMON = rate(30, 40),
RARE = rate(50, 60),
VERY_RARE = rate(70, 80),
SUPER_RARE = rate(90, 100);
public static final int[][] NPC_DROPS = {
// Normal NPC's
{1, 526, 1, ALWAYS},
{2, 526, 1, ALWAYS},
{3, 526, 1, ALWAYS},
{1, 995, drop(1, 50), ALWAYS},
{2, 995, drop(1, 50), ALWAYS},
{3, 995, drop(1, 50), ALWAYS},
// Moderate NPC's
{9, 526, 1, ALWAYS},
{9, 995, drop(250, 500), UNCOMMON},
{9, 555, drop(2, 7), VERY_COMMON},
{9, 995, drop(5, 50), VERY_COMMON},
{9, 1050, 1, RARE},
};
public static int rate(int min, int max) {
return 1 + (int)(Math.random() * ((max - min) + 1));
}
//Same as rate, different name for looks.
public static int drop(int min, int max) {
return 1 + (int)(Math.random() * ((max - min) + 1));
}
私は私が正しく理解していれば、あなたはこれが配列のNPC_DROPSたびに再初期化されるdrop()
への呼び出しで初期化さNPC_DROPS配列の要素をしたいと思い
public void npcDeath() {
int npc = 0;
if (npc == null)
return;
for(npc = 0; npc < DropConfig.NPC_DROPS.length; npc++) {
if(npc == DropConfig.NPC_DROPS[npc][0]) {
if(Misc.random(DropConfig.NPC_DROPS[npc][3]) == 0) { //Drops ALWAYS item
Item(DropConfig.NPC_DROPS[npc][1], DropConfig.NPC_DROPS[npc][2]);
}
}
}
}
シンプルですがスケーラビリティに優れていません。 ;) –
測定する必要があります。パフォーマンスへの影響に気づく前に、毎秒非常に多くの死亡が予想されます。 –
+1:たくさんのドロップタイプがありますが、しばしばシンプルさが最適です。 –