【发布时间】:2018-05-11 19:13:28
【问题描述】:
我正在 PIC18F2550 上制作游戏,我需要创建一个介于 1 和 4 之间的随机数。 我已经发现 rand() 函数不适合真正的随机数。 我试过srand(time(NULL)),这是主文件
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
void main(void) {
srand(time(NULL));
init();
while(timed_to_1ms()) {
fsm_game();
}
}
这是 fsm_game.c 文件
void randomSpawn(int time2) {
if(counter%time2==0) {
int x = rand()%4 +1; // Makes number between 1 and 4
}
}
当我尝试构建它时,我收到一条错误消息:
":0: 错误: (499) 未定义符号: _time(dist/default/production\Dontcrash.production.obj) "
我认为问题可能在于微处理器不“知道时间”,所以如果是这种情况,我该怎么做才能解决这个问题?
【问题讨论】:
-
计算机(微控制器)程序是确定性的。需要一个外部熵源来生成“真正的”随机数。在您的情况下,这是时间,这并不是真正随机的。所以答案是——你不能,除非你有一些硬件来为你提供熵。但显然这根本不是你的问题。您可以使用连接了一些温度敏感电路的模拟输入来代替时间。
标签: c random build mplab microprocessors