用C语言制作的猜数字游戏,你绝对想不到这么简单!

一男子学了分支与循环后,觉得的不够得劲,于是半夜打开浏览器查询了相关的学习资料,发现了猜数字这款游戏,然后他被这游戏深深的吸引毅然决然完成了这道题,玩了几把后并表示这比金铲铲、原神等游戏都要好玩。

猜数字:编程先由计算机“想”一个1到100之间的整数请人猜,如果猜对了,则结束游戏,并在屏幕上输出猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。
提示:
(1)程序编制要点:
①由计算机生成一个随机数;
②用do…while语句,for语句或者while语句实现循环;
③if语句的嵌套。
(2)该题目涉及的知识点和难点:
①使用srand,rand,time函数;
②使用随机函数得到一个1到100的随机数;
③循环语句的输入与使用;
④if语句的嵌套使用。 

一.随机数的生成

猜数字的前提是需要一个随机数,rand这个函数刚好可以帮我们生成一个随机数,但这个不是一个正真的随机数,是伪随机的,它是通过算法实现的。

int rand(void);

rand函数会返回一个随机数,这个随机数的范围是在0~RAND_MAX之间,RAND_MAX的大小是依赖编译器上实现的,但是大部分的编译器上是32767。

rand函数对一个叫“种子”的基准值进行运算生成的随机数,rand函数生成随机值的默认种子是1。

而当我们调用rand函数的时候,调用srand函数就可以改变它的基准值。

例如将rand()的基准值改为2就可以这样写:

srand(2);
printf(“%d”,rand());

要想使得rand()发生改变只要“种子”发生变化就可以了。而程序的运行时间是变化的,正好可以作为我们的“种子”,在c语言中time函数就可以返回一个时间戳(说白了就是,表示某一刻的时间)。又因为srand需要unsigned int的值所以我们需要将time(NULL)强制类转换。

#include<time.h>
srand((unsigned int)time(NULL))
printf("%d",rand());

二.游戏的开始与结束 、游戏菜单的生成

(1)思路:

我们可以设置一个命令来控制游戏的开始与结束,然后制作一个菜单告诉玩家怎么去操作游戏。

(2)具体操作:

首先写一个循环然后通过输入1(或0)去控制循环的开始(或结束),其中循环一开始就得生成一个菜单,所以我们可以选择用do...while循环来实现这些功能。因为输入1进入游戏,输入0结束游戏,按其它键我们就要告诉玩家“输入错误请重新输入”,这时候我们在do.while循环内部调用switch语句来可以实现这些功能。

三.游戏的执行

(1)思路:

当我们按1开始游戏时就需要执行游戏了,首先由程序生成一个随机数,然后由玩家去猜测,为了使玩家可以更精准的猜测答案我们可以用玩家猜测的数字与随机数相比较,让程序去提醒玩家猜大了(或猜小了)。

(2)具体操作:

如果玩家没有猜对就要继续进行游戏,猜对了就要就结束游戏,所以我们要先写一个循环函数

当没有猜对就继续循环猜测,猜对了我们就用break跳出循环,while循环就可以实现这一功能,然后我们在while循环中用if语句去提醒玩家猜数字的情况。

四.游戏优化

为了让游戏更具有挑战性,我们可以设定猜测的次数,当猜够某一次数时我们将会认定玩家猜测挑战失败,然后结束这次游戏。这时我们可以用 i -- 的形式加入循环中,当i减为零时将会跳出循环,为了让玩家知道自己还剩几次机会我们还可以在while循环中打印i的值。前面对rand()函数的讲解我们已经rand()的取值范围是0~32767,为了使我们生成的随机数是1~100的值我们可以将rand()% 100 + 1就可以了。

完整代码 

#include<stdio.h>
#include<time.h>
void game()
{
	srand((unsigned int)time(NULL));
	int i = 0;
	int ret = rand() % 100 + 1;
	int count = 10;
	while (count)
	{
		printf("你还有 %d 次机会\n",count);
		scanf("%d", &i);
		if (i == ret)
		{
			printf("恭喜你,猜对了!!!\n");
			break;
		}
		else if (i <= ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜大了\n");
		}
		count--;
		if (count == 0)
		{
			printf("很遗憾你猜错了");
		}
	}
	
}
void menu()
{
	printf("***********************\n");
	printf("**** 1.开始游戏  ****\n");
	printf("**** 0.结束游戏  ****\n");
	printf("***********************\n");

}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择");
		}
	} while (input);  
	return 0;
}

效果图: 

  • 44
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code Warrior

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值