2015-06-28 64 views

回答

4

您將需要相同的代碼來生成相同的隨機數。 Lua庫不復雜,將作業傳遞給C runtime library。如果你使用它,那麼你有可能得到相同的數字。容易做到的PInvoke:

using System.Runtime.InteropServices; 
... 
    public static double LuaRandom() { 
     const int RAND_MAX = 0x7fff; 
     return (double)(rand() % RAND_MAX)/RAND_MAX; 
    } 

    public static void LuaRandomSeed(int seed) { 
     srand(seed); 
    } 

    [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] 
    private static extern int rand(); 
    [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] 
    private static extern void srand(int seed); 

兩個Lua和C#寫一個小的測試程序,一定要使用LuaRandomSeed()和math.randomseed(),所以他們開始以相同的順序,比較第一〜25他們吐出的數字。如果你沒有得到一個匹配,那麼你的Lua實現使用了一個不同的C運行庫,你必須編寫你自己的隨機數生成器。 Microsoft使用的簡單LCG:

private static uint seed; 

public static int rand() { 
    seed = seed * 214013 + 2531011; 
    return (int)((seed >> 16) % RAND_MAX); 
} 
1

您需要2個使用相同算法和參數的隨機生成器。

.NET框架並不保證關於生成器的任何內容(即它可能在未來版本中更改)。我對Lua瞭解不多,但它可能有一個標準的生成器,它基於具有類似變幻莫測的實現平臺。

因此,您最可靠的課程將是挑選an algorithm並在兩個平臺上自行實施。然後你需要的是一個共同的種子來產生相同的序列。