Re: [程式] 連線對戰的隨機數

看板GameDesign (遊戲設計)作者 (sccccon)時間15年前 (2010/06/27 12:32), 編輯推噓1(109)
留言10則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

06/27 12:41, , 1F
我是要client算 所以應該會自訂亂數表+種子
06/27 12:41, 1F

06/27 22:12, , 2F
不過用這種方式要非常小心,萬一因為網路Lag或傳輸時間的因
06/27 22:12, 2F

06/27 22:13, , 3F
素,導致取用亂數的順序不同,那就還是會發生問題。
06/27 22:13, 3F

06/27 22:15, , 4F
你必須要非常肯定你的行動及事件串列至少在使用到亂數的部
06/27 22:15, 4F

06/27 22:15, , 5F
分不會在網路的不同端發生不同的順序。
06/27 22:15, 5F

06/27 22:45, , 6F
基本上我還會加一些timestamp或framecount之類的來確定
06/27 22:45, 6F

06/27 22:46, , 7F
每隔一段時間的種子, 亂數index都是同步的
06/27 22:46, 7F

06/27 22:48, , 8F
不過連線遊戲client端算亂數很容易被hack...
06/27 22:48, 8F

06/27 22:48, , 9F
大多都是server端算好再分配給client端去"播"...
06/27 22:48, 9F

06/28 05:15, , 10F
喔~ 原來是這樣0.0
06/28 05:15, 10F
文章代碼(AID): #1C9jHo94 (GameDesign)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1C9jHo94 (GameDesign)