Advertisement

C语言简易小游戏--猜数字

阅读量:

游戏要求:

1.系统自动产生一个1-100的随机数字

2.开始菜单里,可以选择开始游戏或者退出游戏

3.猜数字时,如果猜大或者猜小了会提醒,猜对了会恭喜你游戏结束

代码实现:

复制代码
 #include <stdio.h>

    
 #include <stdlib.h> // rand函数需要用到的头文件
    
 #include <time.h> // time函数需要用到的头文件
    
  
    
  
    
 void menu()
    
 {
    
 	printf("********************\n");  //普普通通的一个菜单界面,没啥好说的
    
 	printf("*****1.开始游戏*****\n");
    
 	printf("*****0.退出游戏*****\n");
    
 	printf("********************\n");
    
 }
    
 void game()
    
 {
    
 	int num = rand() % 100 + 1; //除100取余数,得到的余数一定在0-99之间,因为超过100会进1
    
 	int guess = 0;
    
 	while (1)
    
 	{
    
 		printf("请输入你猜的数字:");
    
 		scanf_s("%d", &guess);
    
 		if (guess < num)
    
 		{
    
 			printf("猜小了\n");
    
 		}
    
 		else if (guess > num)
    
 		{
    
 			printf("猜大了\n");
    
 		}
    
 		else
    
 		{
    
 			printf("恭喜你,猜对了!!\n");
    
 			break;
    
 		}
    
 			
    
 	}
    
 }
    
 int main()
    
 {
    
 	int choose = 0;
    
 	srand((unsigned int)time(NULL)); //运用时间戳生成随机数
    
 	do
    
 	{
    
 		menu();
    
 		printf("请输入数字(1/0):");
    
 		scanf_s("%d" ,&choose);
    
 		switch (choose)
    
 		{
    
 		case 1:
    
 			game();
    
 				break;
    
 		case 0:
    
 			printf("退出游戏\n");
    
 				break;
    
 		default:
    
 			printf("请重新输入:\n");
    
 				break;
    
 		}
    
 	} while (choose);
    
 }
    
    
    
    

rand函数返回的是整型int,它的作用就是生成一个随机数,范围在0-32767之间。

为了确定rand的范围,我们需要用到srand函数

但重复运行rand函数生成的随机数是不变的,这样不符合我们的要求,这样会降低游戏的可玩性。

所以我们加入了时间戳,因为时间就是一个不断变化的数。

还有就是最重要的一点,srand函数为什么不放在rand前面,因为如果srand被重复调用,生成的数字变化不会太大,所以把它放在main主函数中,运行过程中只调用一次,就能稳定的生成变化范围大的随机数。

以下是运行效果:

猜数字最快捷的方法就是二分法,也就是取中位数。比如0-100我先取最中间的数字50,目标数字在0-50之间的话,就能排除50-100这一半的数字,以此类推。多试试几次就能掌握技巧。

全部评论 (0)

还没有任何评论哟~