C语言—猜数字小游戏

游戏规则:

       让系统随机生成一个0-100的整数,让玩家来猜,玩家猜数字后,系统给予玩家回馈并且统计玩家猜的次数,直到玩家猜对为止。

游戏方法:

       1、生成游戏菜单 1. play(进入游戏) 0. exit (退出游戏)

       2、使用循环语句,构建游戏框架,使玩家可以进行多次游戏,直到猜对为止。

       3、设计游戏具体思路,使系统生成一个随机数,让玩家输入一个数字,然后两个数字对比,根据系统反馈信息,逐渐锁定目标。

一、代码实现:

1.打印菜单:

当我们游戏运行起来的时候,至少先要看见菜单,所以我们首先要做的就是打印菜单。其次游戏要重复玩,所以我们用do....while语句来实现。

#include <stdio.h>
void menu()
{
	printf("******************************************\n");
	printf("*********       1.play        ************\n");
	printf("*********       2.exit        ************\n");
	printf("******************************************\n");
}
 
int main()
{
	do
	{
		//打印菜单
		menu();
	} while();
	return 0;
}

2. 根据菜单选择:

#include <stdio.h>
void menu()
{
	printf("******************************************\n");
	printf("*********       1.play        ************\n");
	printf("*********       0.exit        ************\n");
	printf("******************************************\n");
}
 
int main()
{
	int input = 0;
	do
	{
		//打印菜单
		menu();
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("猜数字\n");
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}
	} while(input);
	return 0;
}

3.猜数字的实现:

当我们输入1时进入游戏开始进行猜数字,下面我们来看一下如何用代码实现:

必备知识:C语言中生成随机数的方法:rand函数

下面我们来看一下RAND_MAX有多大:

 我们可以看到RAND_MAX代表的数字为0x7fff,转换为十进制为32767.

⭐:需要注意的是调用rand函数之前需要用srand函数来设置随机数生成器,且设置一次就可以。

下面我们来看一下srand函数:

 当srand函数里面的参数在不断发生变化时,rand返回的值才会不断的发生变化。我们知道时间在不断的发生变化,而每一个时间都对应一个数字,而我们获得的数字叫做时间戳。那我们如何获取时间戳呢?此时我们需要time函数,下面我们来看一下time函数: 

 我们可以将空指针(NULL)传入time函数里面:time(NULL).

 下面我们来探究一下time_t是什么:

  我们可以看到time_t不过是__time64_ttypedef重命名过来的,而__time64_t又是64位整型typedef重命名过来的,所以time函数的返回类型为64位整型。但srand要的参数类型为无符号整型,此时我们只需要强制类型转换即可。

rand函数返回的值的范围为0~32767,而我们要产生的数字范围为0~100,所以我们要把rand返回的值%100再+1.

void game()
{
	int guess = 0;
	//生成随机数
	int r = rand()%100+1;  //0~99->1~100
	//猜数字
	while (1)
	{
		printf("猜数字:");
		scanf("%d", &guess);
		if (guess < r)
		{
			printf("猜小了\n");
		}
		else if (guess > r)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;//猜对跳出循环。
		}
	}
}

 🍎:因为随机数生成器只能设置一次,所以将它放入到了主函数中。 

4.完整代码呈现:

#include <stdio.h>
#include <stdlib.h>
#iclude <time.h>

void menu()
{
  printf("************************\n");
  printf("*******  1.play  *******\n");
  printf("*******  0.exit  *******\n");
  printf("************************\n");
}
void play()
{
  int guess=0;
  int r=rand()%100+1;
  int counter=0;
while(1) 
 {
  printf("猜数字:\n");
  scanf("%d";&guess);
  counter++;
  if(guess<r)
  {
    printf("猜小了,重新猜。\n");
  }
   else if(guess>r)
  {
     printf("猜大了,重新猜。");
  }
   else
  {
     printf("猜对了,真棒哦!");
     printf("你一共猜了%d次",counter);
     break;
  }
 }
}
int main()
{
   int input=0;
   srand=((unsigned int)time(nall));
   do
   {
    menu();
    printf("请选择:");
    scanf("%d";&input);
    switch(input)
    {
     case 1:
         game();
         break;
     case 0:
         printf("退出游戏");
         break;
     default:
         printf("选择错误");
         break;
    }
   }while(input);
   return 0;
}

二、二分法实现猜数

如果使用二分法进行猜100以内的任何一个随机数,最多七次就可以正确猜对该随机数。

二分法又可以被称为二分查找,它描述了在有序集合中搜索特定值的过程。广义的二分查找是将问题的规模尽可能的缩小到原有的一半。

程序通过二分法不断缩小猜测范围, 直到猜中n

例如n = 93

程序第一次猜测50, 判断数值太小

第二次猜测75,判断数值太小

第三次猜测87,判断数值太小

第四次猜测93,right

如果93不对,我们还能继续根据反馈缩小范围,最多七次就可以猜对答案

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值