• C++游戏设计教程(1)—— 随机数


     哈喽大家好,我是iecne,本期为大家带来的是CPP/C++游戏设计教程的第①期—— 随机数 ,包教包会,快来看看吧!

    大家都知道,初学C++或者各种语言,面对枯燥无比的题目,脑子要爆的感觉是十分难受的,不妨会想设计一款游戏玩玩,但是由于能力不足、不知道如何设计而放弃。而这一专栏将会教会你们如何设计一款简单的Cpp游戏点赞收藏关注评论支持以下博主,蟹蟹


    目录

    一.运用位置

    1.随机数游戏

    2.球类游戏

    3.石头剪刀布(机)

    二.rand( )的用法

    1.rand的使用

    2.随机数的生成

    (1)0~100的生成

    (2)1~100的生成 

    (3)a~b的生成

    三.解决rand()函数生成的随机数每次都一样

    四.总结

    系列文章目录


    一.运用位置

    rand函数是一个可以取随机数的语句,他的运用是否的广,可以有以下运用位置

    1.随机数游戏

    1. int right_number=rand()%100+1;
    2. int left=1;
    3. int right=100;
    4. int a;
    5. cout<<"请猜,["<","<"]"<
    6. cin>>a;
    7. while(a!=right_number)
    8. {
    9. if(a>=right_number) right=a;
    10. else left=a;
    11. cout<<"请继续猜,["<","<"]"<
    12. cin>>a;
    13. }
    14. cout<<"恭喜小主,猜对啦!"<
    15. cout<<"正确答案:"<

    以上代码借鉴博主大姨妈V的随机数游戏


    2.球类游戏

    1. if(wofen+difen<180+rand()%60)
    2. {
    3. Sleep(500);
    4. srand((unsigned)time(NULL));
    5. for(int i=1;i<=5;i++)
    6. {
    7. int jilv=rand()%100;
    8. if(jilv<=30)
    9. {
    10. int mingzhong=rand()%1000;
    11. int zl=(SSS3[a]-(SSSF[a1]/2)-10);
    12. if(mingzhong>=0 && mingzhong<=zl)
    13. {
    14. wofen+=3;
    15. ……

    以上代码由作者原创小游戏Supreme basketball中篮球实战的代码


    3.石头剪刀布(机)

    1. srand((unsigned)time(0));
    2. for (int i = 0; i < 10; i++)
    3. {
    4. j = rand() % 3;
    5. }
    6. switch (j)
    7. {
    8. case 0:setbase(0);
    9. break;
    10. case 1:setbase(1);
    11. break;
    12. case 2:setbase(2);
    13. break;
    14. }

    以上代码由作者原创小游戏石头剪刀布中实战的代码


    二.rand( )的用法

    1.rand的使用

    (1)rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数

    (2)如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = rand() % 100;

    这样,num的值就是一个0~99中的一个随机数了


    2.随机数的生成

    (1)0~100的生成

    如果要产生0~100,则是这样:int num = rand() % 100;

    实际如下:

    1. int main()
    2. {
    3. int rand_test;
    4. rand_test = rand()%100;
    5. cout << rand_test << endl;
    6. return 0;
    7. }

    (2)1~100的生成 

    由于我们经常会以1为开头,所以普通的rand还是无法绝对做到我们的目的

    如果要产生1~100,则是这样:int num = rand() % 100 +1;

    实际如下:


    (3)a~b的生成

    一般情况下,rand() % (b-a+1)+ a   就表示 a~b 之间的一个随机整数

    1. int main()
    2. {
    3. int a, b;
    4. cin >> a >> b;
    5. int rand_test;
    6. rand_test = rand() % (b - a + 1) + a;
    7. cout << rand_test << endl;
    8. return 0;
    9. }

    三.解决rand()函数生成的随机数每次都一样

    我们看下以下代码:

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int a, b;
    6. a = 10;
    7. b = 100;
    8. int rand_test;
    9. for (int i = 1; i <= 10; i++)
    10. {
    11. rand_test = rand() % (b - a + 1) + a;
    12. cout << rand_test << endl;
    13. }
    14. return 0;
    15. }

    指的是10~100中取10个不同的随机数

    结果如下:

     效果非常棒,但是我们再次执行一次

    结果相同 ,所以rand()函数生成的随机数每次都一样

    其实,函数rand是一个伪随机数,从固定的初始种子计算得出。所以每次运行获取到的随机数序列是相同的。要解决这一问题,需要设置一个随机数种子,一般用当前时间作为种子

    所以我们还需要用到srand

    srand((unsigned)time(NULL));

    在随机数的前面加上此函数,调用时间作为种子,就可以实现真正的随机数

    但是,切记:千万不要把此代码放入循环中,否则没用

    rand()和srand()要一起使用,其中srand()用来初始化随机数种子,rand()用来产生随机数

    因为默认情况下随机数种子为1,而相同的随机数种子产生的随机数是一样的,失去了随机性的意义,所以为使每次得到的随机数不一样,用函数srand()初始化随机数种子。srand()的参数,用time函数值(即当前时间),因为两次调用rand()函数的时间通常是不同的,这样就可以保证随机性了
     

    完整代码:

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int a, b;
    6. a = 10;
    7. b = 100;
    8. int rand_test;
    9. srand((unsigned)time(NULL));
    10. for (int i = 1; i <= 10; i++)
    11. {
    12. rand_test = rand() % (b - a + 1) + a;
    13. cout << rand_test << endl;
    14. }
    15. return 0;
    16. }

    四.总结

    本节课主要是讲解了srand和rand,至此随机数的思想博主已经彻彻底底分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下

    包教包会,帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!


    系列文章目录

     本期收录于博主的专栏——C++游戏设计教程,感兴趣的朋友们可以订阅,查看其它专栏。

    C++游戏设计教程_iecne的博客-CSDN博客

    C++游戏设计教程(1) 随机数


     感谢每一个观看本篇文章的朋友,更多精彩敬请期待:iecne的博客_CSDN博客-C++保姆级入门教程领域博主

    文章存在借鉴,如有侵权请联系修改删除!

  • 相关阅读:
    【案例实战】分布式应用下登录检验解决方案(JWT)
    Django中开发遇到的问题(11月10号)
    大二网页制作实习总结
    基于ESP32-WROOM-32的USB转WIFI模块设计
    js使用crypto-js做加密解密
    ArcGIS笔记12_ArcGIS搜索工具没法用?ArcGIS运行很慢很卡?
    科技的成就(五十一)
    一文了解Linux内核网络设备驱动
    JavaScript基础
    C++第二十三弹---深入理解STL中list的使用
  • 原文地址:https://blog.csdn.net/CSDN_linyanchen/article/details/126039119