• 使用C语言,编写猜数字小游戏(使用时间戳)


    C语言学习日志

    猜数字小游戏:
        本文使用的猜数字小游戏主要运用了srand()函数基于系统时间生成随机数的原理;
        -----------------------------------------------------------------------------------------------------------
        

     1.首先讲解一下时间戳的概念

      (1)什么是时间戳?

            百度百科给出的解释为:
            时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数 。 [百度百科-时间戳]
            其实可以粗略的理解为就是某一刻的时间。


      (2)时间戳起到什么作用?

        时间戳的主要功能就是记录时间,保证数据的客观性,真实性,应用于电子数据长期归档,保存,验证。

        本文起到的作用是运用时间戳产生不同随机数,

     2. 关于C语言中产生随机数的相关函数及本文引用时间戳的相关思路

    (1)rand()函数

            C语言中用于产生一个随机数的函数。

            C 库函数 int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。

            RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。

            RAND_MAX位于 的标准库中,在其中定义了0x7fff,即对应的十进制为32767。

            需注意:该函数每次产生的随机数是相同的。

    1. int ret = 0;
    2. ret = rand();

    (2)srand()函数

            C 库函数 void srand(unsigned int seed) 播种由函数 rand 使用的随机数发生器。

            参数 seed -- 是一个整型值,用于伪随机数生成算法播种。

            需注意:该函数 在使用时,参数seed需要一个随机数才能使得srand()函数产生随机数,若seed参数唯一,则产生的随机数为固定值。所以用【srand(1);】多次产生随机数是不可行的。

    srand(1);

    (3)引入时间戳概念

            因rand()函数和srand()函数产生随机数的限制,我们引入时间戳,也就是本文的核心概念。

            这里需要用到,在中存在一个变量time_t。

    time_t这是一个适合存储日历时间类型。

    我们可以在vs中写出time_t将其转到定义,可以看到time_t实际是对_time32_t 的重命名

    我们进一步将_time32_t 转到定义发现其实time_t本质上是一个长整型

    然后我们返回到srand()函数,其有一个格式为void srand(unsigned int seed) ,因此我们仅需将long长整型强制转换为无符号整型即可。

    	srand((unsigned int)time(NULL));

    3.实现代码:

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. #include
    4. #include
    5. int menu()
    6. {
    7. printf("**************************************\n");
    8. printf("****Welcome to the Numbers Puzzle*****\n");
    9. printf("***********1.play 0.exit**********\n");
    10. printf("--------------------------------------\n");
    11. printf("*******游戏途中退出,请输入101*******\n");
    12. printf("**************************************\n");
    13. return 0;
    14. }
    15. void game()
    16. {
    17. //当前计算机的时间-计算机的起始时间(1970.1.1.0:0:0)=(?)秒
    18. int ret = 0;
    19. ret = rand() % 100 + 1;//生成1-100随机数
    20. while (1)
    21. {
    22. int guess;
    23. printf("请给出您所猜的数字:>");
    24. scanf("%d", &guess);
    25. printf("--------------------------------------\n");
    26. if (guess == 101)
    27. {
    28. break;
    29. }
    30. else if (guess > 101)
    31. {
    32. printf("请输入1-100之间的数字\n");
    33. }
    34. else if (guess > ret)
    35. {
    36. printf("猜大了\n");
    37. }
    38. else if (guess < ret)
    39. {
    40. printf("猜小了\n");
    41. }
    42. else
    43. {
    44. printf("恭喜你猜对啦!\n");
    45. break;
    46. }
    47. }
    48. }
    49. int main()
    50. {
    51. int input = 0;
    52. srand((unsigned int)time(NULL));//运用时间戳
    53. do
    54. {
    55. menu();
    56. printf("请选择>:");
    57. scanf("%d", &input);
    58. switch (input)
    59. {
    60. case 1:
    61. game();//猜数字游戏
    62. break;
    63. case 0:
    64. printf("退出游戏\n");
    65. break;
    66. default:
    67. printf("选择错误\n");
    68. break;
    69. }
    70. } while (input);
    71. return 0;
    72. }

  • 相关阅读:
    openGauss概述
    大文件分断上传后端
    C#语法知识之变量
    线性代数应用基础补充2
    go反射的基本介绍
    anaconda pytorch cpu安装 顺着流程走 没有装不了的
    数据仓库:分层设计详解
    分布式系统设计模式和一致性协议,你用过哪些?
    DAT:Vision Transformer with Deformable Attention
    Linux下线程池(ThreadPool)
  • 原文地址:https://blog.csdn.net/Prayer41/article/details/132916839