通过计数器获得随机数种子

2019-07-21 07:00发布

写了个小游戏需要一个随机数种子,想通过读取定时器计数寄存器的值来实现的。
前面有加一个按键的程序,因为按键时间不同所以每次计数器读出的数值应该是不同的我是那么想的,但是实际上并不行,求解。。。
定时器是开的,TIM7就是我用来放按键检测程序的定时器。
另外有一个很神奇的现象是程序刚烧进去第一次运行和第二次运行的结果是不一样的,但是之后每一次的运行就都一样了。。。

        while( TouchEvent!=CLICK_ONCE ); //按键等待程序
        srand( TIM_GetCounter(TIM7) );      //根据计数器数值产生随机数,这里用srand( TIM7->CNT );也不行
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
nashui_sx
1楼-- · 2019-07-21 11:04
本帖最后由 nashui_sx 于 2018-12-10 18:12 编辑
zdyz123123 发表于 2018-12-10 17:27
定时器就是开的,但是并不行。。。

按键随机数 定时器.rar (4.86 MB, 下载次数: 17) 2018-12-10 18:11 上传 点击文件名下载附件

给你写了个,测试过了  第一次按下按键产生种子 以后按键生成随机数
既然你要用按键,定时器也可以省了直接用delay做 按键随机数 delay.rar (4.86 MB, 下载次数: 44) 2018-12-10 18:11 上传 点击文件名下载附件
QQ截图20181210180355.jpg


zdyz123123
2楼-- · 2019-07-21 12:52
如果这样不行的话只能通过读取板载时钟来解决这个问题了么。。。
nashui_sx
3楼-- · 2019-07-21 13:55
 精彩回答 2  元偷偷看……
zdyz123123
4楼-- · 2019-07-21 16:53
nashui_sx 发表于 2018-12-9 19:15
[mw_shl_code=applescript,true]//Rand_adc_Init 后使用rand()产生随机数       Rand_adc_Init 放在自己的a ...

哦这是根据温度来设置随机种子啊,可以是可以但是很麻烦啊。。。
我就想知道为啥我这方法不行呢
nashui_sx
5楼-- · 2019-07-21 19:25
zdyz123123 发表于 2018-12-9 21:20
哦这是根据温度来设置随机种子啊,可以是可以但是很麻烦啊。。。
我就想知道为啥我这方法不行呢

srand 是随机数种子,rand产生随机数,初始化一次以后就不用管了呀,直接用rand就可以了,感觉比你的按键简单还,最起码省个定时器和按键吧

你可以提前开定时器,按键按下的时候读取定时器值做种子,rand产生随机数。不过最好的还是弄个数组,按10次 平均值作为种子,产生随机数,理论都是可以的
zdyz123123
6楼-- · 2019-07-21 23:56
nashui_sx 发表于 2018-12-9 22:07
srand 是随机数种子,rand产生随机数,初始化一次以后就不用管了呀,直接用rand就可以了,感觉比你的按键 ...

我的按键是本来就要用的呀,顺便产生个随机数种子而已

一周热门 更多>