猜数字游戏(C语言实现)

自我介绍:一个脑子不好的大一学生,c语言接触还没到半年,若涉及到效率等问题,各位都可以在评论区提出见解,谢谢啦

注:该文章会对我的下一篇文章:扫雷游戏打下一定基础;

该文章所写代码猜数字的范围为1~100,若需要更改范围,可以对相关数据进行修改

1.思路:

首先:

1.所有游戏需要菜单,因此先得做一个菜单,我单独将它作为了一个函数:caidan,以增加它的通用性。

2.玩家在玩游戏时需要几种选择:(1)继续玩(2)退出;而这一部分需要用do...while...语句来实现。

3.猜数字需要产生随机数:该处需要用到下面几种函数rand,srand,time,下面我会给详细介绍。

2.详细步骤

1.菜单的生成:

void caidan()
{
	printf("***********************\n");
	printf("***请选择一个数字:****\n");
	printf("***     1.play   ******\n");
	printf("***     0.exit   ******\n");
	printf("***********************\n");

}

2.玩家选择:

int main()
{
	int input;
	//srand((unsigned int)time(NULL));

	do
	{
		caidan();
		scanf("%d", &input);
		switch (input)
		{
			case 1:
					//game();//虽然有break,但是不用大括号,因为这是switch语句
                    printf("继续游戏\n");
					break;
			case 0:
				printf("退出游戏\n");
					break;
			default:/**/
				printf("选择错误,请重新选择\n");
				break;
		}
	} while (input);
//因为玩家如果退出游戏,就会选择0,所有while的条件直接选成input(玩家的选择)就好
	return 0;
}

3.随机数的生成:

1.rand函数:

C语言提供了一个函数叫rand,这函数是可以生成随机数的,函数原型如下所示:

int rand (void);

rand函数会返回一个伪随机数,这个随机数的范围是在0~RAND_ _MAX之间,这个RAND_ MAX的大小( 可以通过在编译器上输入并“转到定义”看见 )是依赖编译器上实现的,但是大部分编译器上是32767.

9038050974b74f8f9a25342b57b66f34.png

从上图可知:

(1)rand函数的作用是:生成随机数(Generates a pseudorandom number)

(2)rand函数的头文件是:<stdlib.h>

  (3)rand函数的参数是:void,所以调用rand时括号内不要写任何数

   当函数中放了rand函数,产生了如下数据:

caf13328d6a44aff89c8387a88fa847f.png

看似随机,但是当你多操作几次时,会发现每次的数据相同,以下是第二次运行:

c25c61359de64e1c859dccfc4298bd09.png

这是因为rand函数中有一个叫种子的东西(由srand的括号内数字决定,而rand函数默认种子为1,所以当括号内为1时,产生的数据与之前的一样

4d25b72759e34117b582122a8535fb57.png

若将种子的数值改变,则会发现随机数改变:)

933e21338ef840849ee331f1ab473552.png

由此可以得出,要产生随机数,srand函数的参数应该是随时变化的,以下为srand的函数相关信息:

2.srand函数:

de67721686774626a1fc8846e6f03b83.png

而时间是随时在变化的,因此可以将srand函数的参数设为时间的函数:time

3.time函数:

time函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的差值,单位是秒。返回的类型是time_ t类型的(本质上是32位或者64位的整型类型)。

93b3eca916924fc0b90b07d21d2a1f78.png

因为srand函数的参数是unsighted int ,而time函数为time_t类型,

所以要对time函数类型转换:srand((unsighted int)time());

time函数的参数time如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。

如果timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。

而srand函数只需要time的返回值,所以time函数并不需要设置参数,因此传一个NULL就好:

srand((unsighted int)time(NULL));

就此,我们的游戏框架就搭建好了,具体代码如下:

#include<stdio.h>
#include <stdlib.h>
#include <time.h>
//不要忘了头文件
void game()
{
;
}
void caidan()
{
	printf("***********************\n");
	printf("***请选择一个数字:****\n");
	printf("***     1.play   ******\n");
	printf("***     0.exit   ******\n");
	printf("***********************\n");

}
int main()
{
	int input;
	srand((unsigned int)time(NULL));

	do
	{
		caidan();
		scanf("%d", &input);
		switch (input)
		{
			case 1:
					game();//不用大括号,这是switch语句
					break;
			case 0:
				printf("退出游戏\n");
					break;
			default:/**/
				printf("选择错误,请重新选择\n");
				break;
		}
	} while (input);
	return 0;
}

下面我们就来写game函数的具体内容

4.game函数:

1.先要设置好正确答案,但是由于该题要设置的随机数应该在1~100,所以应该将答案这样设置:

int daan=rand() % 100 + 1;所用到的公式为(若生成的数据范围为a~b):

int daan=a+rand() % (b-a+1);接下来要读入玩家所猜数字,并将其与答案进行对比,对玩家进行反馈,具体代码如下:

void game()
{
	int guess;
	int daan = rand() % 100 + 1;
	printf("请输入你要猜的数字:\n");
	while(1)
	{
		scanf("%d", &guess);
		if (guess > daan)
			printf("猜大了,请重新输入\n");
		else if (guess < daan)
			printf("猜小了,请重新输入\n");
		else
		{
			printf("恭喜你,答对了,答案是:%d\n", daan);
			break;
		}
	}

}

5.完整代码:

#include<stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <time.h>
void game()
{
	int guess;
	//srand((unsigned int)time(NULL));
	int daan = rand() % 100 + 1;
	printf("请输入你要猜的数字:\n");
	while(1)
	{
		scanf("%d", &guess);
		if (guess > daan)
			printf("猜大了,请重新输入\n");
		else if (guess < daan)
			printf("猜小了,请重新输入\n");
		else
		{
			printf("恭喜你,答对了,答案是:%d\n", daan);
			break;
		}
	}

}
void caidan()
{
	printf("***********************\n");
	printf("***请选择一个数字:****\n");
	printf("***     1.play   ******\n");
	printf("***     0.exit   ******\n");
	printf("***********************\n");

}
int main()
{
	int input;
	srand((unsigned int)time(NULL));

	do
	{
		caidan();
		scanf("%d", &input);
		switch (input)
		{
			case 1:
					game();//不用大括号,这是switch语句
					break;
			case 0:
				printf("退出游戏\n");
					break;
			default:/**/
				printf("选择错误,请重新选择\n");
				break;
		}
	} while (input);
	return 0;
}

创作不易,望各位多多支持,如果各位有任何对代码或者本人注释的建议,都欢迎在评论区提出来,共同进步!

  • 42
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

脑子不好的小菜鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值