AstaTus
-- 夏天不热。。
posts - 22,comments - 12,trackbacks - 0
   今天写的一个程序,很奇怪,我要让每个ball的M_CurLoc的值都不一样,但是单步调试的时候是做到了不一样,但直接运行的时候结果每个ball的M_CurLoc的值居然都一样,喊我调了2个多小时。。抓狂ing。。
后来发现是随机数里的srand在作怪
void Balloon::Loc_Reset()
{
        srand(time(NULL));
    M_CurLoc.x 
= rand()%700 + 100;
    M_CurLoc.y 
= rand()%700 + 600;
    flag 
= UP;

}


for(i = 0; i < n; i++)
{
    tempball.Loc_Reset();

    M_ActBall.push_back(tempball);    

}
这个代码实现的n个ball 中的 M_CurLoc都是一样的,因为CPU运行太快 以致每一次寻环中srand(time(NULL))所取得的系统时间都一样。。(srand的精度为秒),所以在调试和直接运行这两种情况下会出现两种结果。。
最后改了下
void Balloon::Loc_Reset()
{
    M_CurLoc.x 
= rand()%700 + 100;
    M_CurLoc.y 
= rand()%700 + 600;
    flag 
= UP;

}


void Balloon::GetSrand()
{
    srand(time(NULL));

}


////////////////////////////////////

tempball.GetSrand();

for(i = 0; i < n; i++)
{
    tempball.Loc_Reset();

    M_ActBall.push_back(tempball);    

}
posted on 2008-09-10 19:13 AstaTus 阅读(232) 评论(0)  编辑 收藏 引用 所属分类: 其他

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理