原创首发于CSDN,转载请注明出处,谢谢!https://blog.csdn.net/weixin_46959681/article/details/117460434
为何写这篇文章?
笔者在上一篇博文的结尾处记录了一个关于贪吃蛇食物随机生成的小bug,即食物 ## 有时会在地图的行、列边界处生成导致贪吃蛇无法吃到食物。该问题继续深入下去可以总结成两个方面的内容:
- 经由随机函数生成的随机数字的上限设置;
- 随机函数 rand() 和随机种子函数 srand() 的使用。
随机数字上限 —— 贪吃蛇地图边界与随机函数 rand()
在笔者调试贪吃蛇游戏代码的初期就发现了一个小小的bug,随机生成的食物位置有时会出现在20X20地图的边界处如 row=(0,20)、column=(0,20)【表示两者都有出现】,直接导致贪吃蛇无法吃到食物只能在地图上随机游走。
|
|
---|---|
基于以上的运行情况笔者仔细查阅了随机函数 rand()
的用法,发现是对随机生成的上下限数字设置的太过随意只有取模20,没有设置下限,自然也就会出现食物不在地图内的现象。在对食物模块代码 void initFood()
做出修改后,游戏终于正常运行。
修改后的模块代码: initFood()
/* initFood() */
void initFood()
{
//原代码,范围为0-19。
//int x = rand()%20;
//int y = rand()%20;
srand((unsigned)time(NULL));
//行与列的下限各自为 3,上限都为 18。
int x = rand()%15+3;
int y = rand()%15+3;
food.row = x;
food.column = y;
}
srand() 、rand()的具体用法
- 请看参考资料内的文章,各自博主已经写的非常详细了。笔者的重点只是简短的记录下个人在实际编程中所遇的问题,而不是重新造轮子。
参考资料
- C语言中的rand()函数
- C语言有关rand(),srand()产生随机数学习总结
- C语言随机数生成教程,C语言rand和srand用法详解
- 【C语言】C语言随机数生成教程,C语言rand和srand用法详解
文章更新时间记录
- 第一节“为何写这篇文章?”完成。 「2021.6.2 10:18」
- 文章框架初步搭好。 「2021.5.2 10:30」
- “随机数字上限 —— 贪吃蛇地图边界与随机函数 rand()”一节完成。 「2021.6.2 16:08」
- 文章竣工。 「2021.6.2 16:26」
P.S.1 到底什么是“正态分布”,我估计只有在学习完概率论后才会有初步理解,真正的精髓还是得掌握现代数学的测度论,理解测度空间后才能有所得。(外面要下雨了) 「2021.6.2 16:27」