首页
社区
课程
招聘
[原创]一场由随机数引发的血案
发表于: 2013-9-3 00:08 22952

[原创]一场由随机数引发的血案

2013-9-3 00:08
22952

相信大家都用过rand/random吧?
高中数学里学过xxx吧?
相信许多棋牌游戏和抽奖程序都用此类伪随机数吧?
这里不分web和exe应用程序,只分是否使用此类随机数...............
//----------------------------------------------------

这个是演示...
伪随机数种子不一样生成出来的数就不一样,上面演示用的是10个数字,如果大家有兴趣可以用更大的循环来测试.
这里是前面演示的源码 Rand.7z
//----------------------------------------------------
下面来用一个棋牌游戏做一下测试(有的人就会想到统计学什么的,其实那些都不科学);



//这两副图是游戏服务端算牌的部分,直接扣出来在本地用就好了(直接有源码更好)..............
最后再讲讲如何能同步上服务端种子(这里只讲两种情况,一种是:开启后只设置一次种子,后面一直用这个生成;二种是:每生成一次设置一种子)这里的种子就是一个0~0xFFFFFFFF的数.
一种:
需要跑数据量:0~0xFFFFFFFF,次数是N;
二种:
需要跑数据量:0~0xFFFFFFFF;
这里再给一个算牌模块: 123.7z
      再给一个源码: fddd.7z

希望大家都能完爆各种使用此类伪随机数程序~~~~~~~~~~~
如果你有资源弄不出来可以联系俺.


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (41)
雪    币: 219
活跃值: (773)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
2
顶一下 以后看~!
2013-9-3 00:28
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看不懂。。。
2013-9-3 00:43
0
雪    币: 6524
活跃值: (4316)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
4
如果你的理解能力没问题,就是我的表达能力有问题..
2013-9-3 00:54
0
雪    币: 219
活跃值: (773)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
5
你的表达能力没问题的说~ ~ !
2013-9-3 01:17
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
最后说到“同步上服务端种子”那里有2种情况,没太看懂
2013-9-3 09:05
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
7
血案太多,比如网易的那个仙灵店的随机数...
2013-9-3 09:28
0
雪    币: 60
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看不懂。。估计是理解能力太差了。
2013-9-3 09:34
0
雪    币: 1501
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你的意思是伪随机数是已经定下来的值,
只不过生成这个表单的种子不一样,
随机值的表单就会不一样。
但是种子一样的话,就能使结果在某一个已确定的有限的范围里
所以比如我在打牌,我收到的牌1和牌2和牌3的顺序,
我就可以通过枚举种子来计算搜索 符合 牌1牌2牌3 的表单
我就能确定后面每个人收到的牌是什么。
我这么表达对么?
2013-9-3 10:31
0
雪    币: 6524
活跃值: (4316)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
10
差不多对,[但是种子一样的话,就能使结果在某一个已确定的有限的范围里]
种子一样的话不管范围,以后不管多少次都是一样......
2013-9-3 10:36
0
雪    币: 138
活跃值: (460)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
对于一次种子设置可以利用暴力跑; 但是 每次都 srand呢, 可否比得到大部分牌再跑有更好的办法;
while(1)
{
srand(time(NULL));
xx = rand()%54;
****发牌******
}
2013-9-3 10:48
0
雪    币: 6524
活跃值: (4316)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
12
0~0xFFFFFFFF全部跑一遍然后在里面找.
2013-9-3 10:50
0
雪    币: 138
活跃值: (460)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
在本局时间有限,得到的牌数有限的情况下怎么跑?

还有 RDTSC 这种 能跑出下一局的不~

求大神解答
2013-9-3 11:03
0
雪    币: 6524
活跃值: (4316)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
14
先全部跑出来,后面再到跑的数据里面找.......
需要高效的搜索算法~
2013-9-3 11:10
0
雪    币: 138
活跃值: (460)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
有人分析过PHP 的 rand 没; 求可逆推 求过程;
2013-9-3 11:11
0
雪    币: 138
活跃值: (460)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
在得到的牌数有限的情况下, 结果是多个的;

木有办法精确!

你说的这个(把所有都跑出来,再去搜索)办法 貌似适合某些游戏;赞~!
2013-9-3 11:13
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
如果根据自己拿到的牌优化一下跑的算法,应该很有用啊
2013-9-3 11:19
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
是不是象斗地主那样,只要知道自己的牌就可以知道别人的牌?
2013-9-3 12:29
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
网上不是有rand,srand的源码嘛?
2013-9-3 12:44
0
雪    币: 6524
活跃值: (4316)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
20
差不多就是这样~
2013-9-3 12:44
0
雪    币: 6524
活跃值: (4316)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
21
V大是个好胖子,mj0011是个有钱的坏胖子~~~
2013-9-3 12:47
0
雪    币: 297
活跃值: (265)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
22
好东西,谢谢分享
2013-9-3 13:29
0
雪    币: 492
活跃值: (51)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
23
这中方法好早就在用了,伪随机数很坑爹的,是有限值.只要自己生成一个对应的字典,后面查表就OK了.
2013-9-3 14:01
0
雪    币: 242
活跃值: (448)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
24
厉害
2013-9-3 15:29
0
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
好文,感谢楼主提供思路
2013-9-3 15:40
0
游客
登录 | 注册 方可回帖
返回
//