作者scornn (sccccon)
看板GameDesign
標題Re: [程式] 連線對戰的隨機數
時間Sun Jun 27 12:32:47 2010
※ 引述《hirabbitt (兔子)》之銘言:
: 請問一下
: 我做了一個連線遊戲
: 還算可以玩
: 直到我加了某一個隨機的元素
: 因為我在傳送資料時並沒有將這隨機數一起傳送出去
: 所以導致兩位玩家自己算自己的隨機
: 想請問在不傳送隨機數的情況下
: 有沒有可能讓兩邊的隨機數一樣呢?
: 謝謝
不知道你的亂數是要server算再丟給client 還是client端自己算..
不過自訂一個亂數表應該都可以解決~
(server算的話 次數跟時機也都一樣的話.. 好像就不用自訂亂數表了)
int myrand(unsigned int myHoldRand) {
myHoldRand = myHoldRand * 1103515245 + 12345;
return (int)(myHoldRand % 0x80000000);
}
server給兩邊同一組 seed..
然後呼叫seed = myrand(seed);
每次取出來的應該就都會一樣了.. 就算有一個取比較快.. 另一個取比較慢
得到的亂數次序都會一樣..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.255.218
→ hirabbitt:我是要client算 所以應該會自訂亂數表+種子 06/27 12:41
推 ddavid:不過用這種方式要非常小心,萬一因為網路Lag或傳輸時間的因 06/27 22:12
→ ddavid:素,導致取用亂數的順序不同,那就還是會發生問題。 06/27 22:13
→ ddavid:你必須要非常肯定你的行動及事件串列至少在使用到亂數的部 06/27 22:15
→ ddavid:分不會在網路的不同端發生不同的順序。 06/27 22:15
→ Splash5:基本上我還會加一些timestamp或framecount之類的來確定 06/27 22:45
→ Splash5:每隔一段時間的種子, 亂數index都是同步的 06/27 22:46
→ Splash5:不過連線遊戲client端算亂數很容易被hack... 06/27 22:48
→ Splash5:大多都是server端算好再分配給client端去"播"... 06/27 22:48
→ hirabbitt:喔~ 原來是這樣0.0 06/28 05:15