2017-02-07 9 views
2

私はGMLでシャッフル配列関数を作ろうとしています。ここでargument0は、この配列のサイズであるシャッフルする配列とargument1ことで、私が試したものです:私のGMLシャッフル配列関数はいつも同じ結果を返しています

///Shuffling array function 

//argument0: the array to shuffle 
//argument1: the size of the array 

var i; 
var j; 

show_debug_message("----------"); 
show_debug_message("Original array: "); 
show_debug_message(argument0); 
show_debug_message("Size: "); 
show_debug_message(argument1); 

for (i = 0; i < argument1; i++) 
{ 
    j = irandom_range(i, argument1 - 1); 

    if (i != j) 
    { 
     k = argument0[i]; 
     argument0[i] = argument0[j]; 
     argument0[j] = k; 
    } 
} 

show_debug_message("Result array: "); 
show_debug_message(argument0); 
show_debug_message("----------"); 

return argument0; 

私はこの機能を実行すると、私はなかれ、同じ結果を得た:

---------- 
Original array: 
{ { 1,2,3,4,5 }, } 
Size: 
5 
Result array: 
{ { 5,3,1,4,2 }, } 
---------- 
+0

は、あなたがこれを確認するために、より大きな配列でそれを試してみましたか?シャッフルする要素の数は限られていますが、同じ要素をランダムに繰り返し取得する可能性はわずかです。または、シャッフルを複数回呼び出すこともできます。 –

答えて

1

はあなたを持っていますあなたのゲームのどこでも関数randomize()を使用しましたか? Randomizeは、ゲームが実行されるたびにシードをランダムな値に設定します。無作為の関数は、常に同じシード値で動作するため、常に同じ結果を返します。

注:GameMaker:Studioが毎回同じ初期乱数シードを生成するため、[ランダム関数]は、毎回ゲームが実行されるたびに同じ値を返します。この動作を回避するには、ゲームの開始時にランダム化を使用します。 randomize()

ドキュメント:https://docs.yoyogames.com/source/dadiospice/002_reference/maths/real%20valued%20functions/randomize.html

関連する問題