2025年手把手带你用C语言写出一个猜数字小游戏!!!

手把手带你用C语言写出一个猜数字小游戏!!!简单了解 C 语言后 我们尝试写出一个简单的猜数游戏吧 游戏名称 猜数字 又称 Bulls and Cows 是一种古老的的密码破译类益智类小游戏 游戏规则 首先由计算机自动给出一个随机数 然后由玩家输入出所猜数字 系统会自动告知玩家所猜数据比实际数据大还是小

大家好,我是讯享网,很高兴认识大家。

简单了解C语言后,我们尝试写出一个简单的猜数游戏吧。

游戏名称
猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏。
游戏规则
首先由计算机自动给出一个随机数,然后由玩家输入出所猜数字,系统会自动告知玩家所猜数据比实际数据大还是小,之后玩家可以根据系统提示,对所猜数据做出调整后再次输入,直到玩家所猜数据与实际数据相吻合,一轮游戏结束。

  1. 获取一个随机数;
  2. 输入所猜数据并且得到反馈(猜大了,猜小了,猜对了);
  3. 实现可以反复玩的功能;

获取随机数和输入所猜数据得到反馈属于游戏内容,我们首先根据反复玩这个功能去建立游戏基本框架。

我们需要设计一个友好的询问菜单menu()界面询问玩家是否进行游戏,而且要实现反复玩的功能,这里肯定需要用到循环,游戏每结束一次,这个询问菜单界面弹出,询问玩家是否进行下一轮游戏还是退出游戏。

#include<stdio.h> void menu(void) //询问菜单 { 
    printf("\n"); printf("\n"); printf("* 1. play \n"); printf("* 0. exit \n"); printf("\n"); printf("\n"); } int main() { 
    int input; //菜单栏 do { 
    menu(); //调用了询问菜单 printf("请选择:"); scanf("%d", &input); //玩家输入自己的选择 if (input == 1) { 
    printf("进行猜数游戏\n"); } else if(input == 0) { 
    printf("退出游戏\n"); break; } else { 
    printf("请重新输入\n"); } } while (input); return 0; } 

讯享网

效果如下:我们已经基本实现了猜数游戏的框架构造
在这里插入图片描述
讯享网

在上面我们基本实现猜数游戏的整体框架之后,我们需要对猜数游戏game()进行设计。

  • rand ()
    运用 rand() 函数可以产生随机数,范围在0至RAND_MAX(32767) 之间。
讯享网#include<stdio.h> #include<stdlib.h> //使用rand()函数的头文件 int main() { 
    int i; int a[5] = { 
    0 }; for (i = 0; i < 5; i++) { 
    a[i] = rand(); } for (i = 0; i < 5; i++) { 
    printf("%d ", a[i]); } return 0; } 

运用rand()函数时,该代码块多次运行结果均相同。这就意味着如果单纯用rand()函数产生随机数时,每轮游戏将产生的随机数是相同的。若要不同,就要在使用rand()函数前使用srand() 函数,先去设置初始化随机数的生成器(生成起点)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • srand()
    运用 srand() 函数初始化随机数的生成起点,其参数是一个整数。
#include<stdio.h> #include<stdlib.h> int main() { 
    int i; int a[5] = { 
    0 }; srand(100); //这里的参数是随便输入的一个数 for (i = 0; i < 5; i++) { 
    a[i] = rand(); } for (i = 0; i < 5; i++) { 
    printf("%d ", a[i]); } return 0; } 

在这里插入图片描述

讯享网#include<stdio.h> #include<stdlib.h> int main() { 
    int i; int a[5] = { 
    0 }; srand(100); //这里的参数是随便输入的一个数 for (i = 0; i < 5; i++) { 
    a[i] = rand(); } for (i = 0; i < 4; i++) { 
    printf("%d ", a[i]); } return 0; } 

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210623203924907.png
我们发现如果每次 srand() 函数参数都设相同值,rand()所产生的随机数值每次就会一样。
所以 srand() 函数的参数每次都需要发生变化,使每次产生的随机数都不相同。这里就可以用到 时间戳。
在这里插入图片描述

  • time()
    时间戳是当前计算机时间与计算机起始时间(1970年1月1日00点00分00秒)之间的时间差值秒数。在C语言中用 time() 表示,它的返回值是不断发生变化的。
    time_t time (time_t* timer);这里的返回类型time_t在编译器中的解释为整型。
    在这里插入图片描述
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { 
    int i; int a[5] = { 
    0 }; srand((unsigned int) time (NULL)); for (i = 0; i < 5; i++) { 
    a[i] = rand(); } for (i = 0; i < 5; i++) { 
    printf("%d ", a[i]); } return 0} 

在这里插入图片描述
在这里插入图片描述
我们发现用time()作为strand()参数可以有效解决上面遇到的问题
但是

讯享网#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { 
    int i; int a[5] = { 
    0 }; srand((unsigned int) time ( NULL )); printf("第一次"); for (i = 0; i < 5; i++) //第一次 { 
    a[i] = rand(); } for (i = 0; i < 5; i++) { 
    printf("%d ", a[i]); } printf("\n"); printf("第二次 "); srand((unsigned int)time(NULL)); for (i = 0; i < 5; i++) //第二次 { 
    a[i] = rand(); } for (i = 0; i < 5; i++) { 
    printf("%d ", a[i]); } printf("\n"); return 0; } 

在这里插入图片描述

我们发现srand((unsigned int) time ( NULL ))不可快速频繁调用,因为频繁调用太快时,时间戳的值不会改变,以至于 srand() 参数不会发生变化。在猜数游戏时并不需要在每次生成随机数时都将srand((unsigned int) time ( NULL ))调用一次,只需要设置一次随机数的起点即可。

在这里插入图片描述
了解了以上知识,我们就可以着手写猜数游戏game()部分。先产生一个随机数,然后输入所猜数据,直到随机数与所猜数据相同,即可退出循环。

void game() { 
    int a = 0; int guess=0; //srand((unsigned int) time(NULL));在主函数中调用一次即可 //生成一个1到100的随机数 a = rand()%100+1; //开始猜数字 while (1) { 
    printf("请输入你所猜的数字: "); scanf("%d", & guess); if (guess > a) printf("猜大了\n"); else if (guess < a) printf("猜小了\n"); else { 
    printf("恭喜你,猜对了\n"); break; //猜对以后跳出循环 } } } 

综上,将两部分代码合并起来为:

讯享网#include<stdio.h> #include<time.h> #include<stdlib.h> void menu(void) { 
    printf("\n"); printf("\n"); printf("* 1. play \n"); printf("* 0. exit \n"); printf("\n"); printf("\n"); } void game() { 
    int a = 0; int guess=0; //生成一个1到100的随机数 a = rand()%100+1; //开始猜数字 while (1) { 
    printf("请输入你所猜的数字: "); scanf("%d", & guess); if (guess > a) printf("猜大了\n"); else if (guess < a) printf("猜小了\n"); else { 
    printf("恭喜你,猜对了\n"); break; //猜对以后跳出循环 } } } int main() { 
    srand((unsigned int)time(NULL));//用时间戳作为参数,设置随机数的生成起点。 int input; do { 
    menu();// 询问菜单 printf("请选择:"); scanf("%d", &input); if (input == 1) { 
    game(); } else if(input == 0) { 
    printf("退出游戏\n"); break; } else { 
    printf("请重新输入\n"); } } while (input); return 0; } 

运行结果:
在这里插入图片描述

game over !
在这里插入图片描述

小讯
上一篇 2025-01-06 13:17
下一篇 2025-03-15 22:49

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/126849.html