作者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
1F:→ hirabbitt:我是要client算 所以应该会自订乱数表+种子 06/27 12:41
2F:推 ddavid:不过用这种方式要非常小心,万一因为网路Lag或传输时间的因 06/27 22:12
3F:→ ddavid:素,导致取用乱数的顺序不同,那就还是会发生问题。 06/27 22:13
4F:→ ddavid:你必须要非常肯定你的行动及事件串列至少在使用到乱数的部 06/27 22:15
5F:→ ddavid:分不会在网路的不同端发生不同的顺序。 06/27 22:15
6F:→ Splash5:基本上我还会加一些timestamp或framecount之类的来确定 06/27 22:45
7F:→ Splash5:每隔一段时间的种子, 乱数index都是同步的 06/27 22:46
8F:→ Splash5:不过连线游戏client端算乱数很容易被hack... 06/27 22:48
9F:→ Splash5:大多都是server端算好再分配给client端去"播"... 06/27 22:48
10F:→ hirabbitt:喔~ 原来是这样0.0 06/28 05:15