前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >猜数字游戏(C语言实现)

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

作者头像
用户11039529
发布2024-03-25 15:11:07
1330
发布2024-03-25 15:11:07
举报
文章被收录于专栏:算法学习日常算法学习日常

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

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

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

1.思路:

首先:

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

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

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

2.详细步骤

1.菜单的生成:

代码语言:javascript
复制
void caidan()
{
	printf("***********************\n");
	printf("***请选择一个数字:****\n");
	printf("***     1.play   ******\n");
	printf("***     0.exit   ******\n");
	printf("***********************\n");

}

2.玩家选择:

代码语言:javascript
复制
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,这函数是可以生成随机数的,函数原型如下所示:

代码语言:javascript
复制
int rand (void);

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

从上图可知:

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

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

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

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

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

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

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

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

2.srand函数:

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

3.time函数:

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

因为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));

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

代码语言:javascript
复制
#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);接下来要读入玩家所猜数字,并将其与答案进行对比,对玩家进行反馈,具体代码如下:

代码语言:javascript
复制
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.完整代码:

代码语言:javascript
复制
#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;
}

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.思路:
  • 2.详细步骤
    • 1.菜单的生成:
      • 2.玩家选择:
        • 3.随机数的生成:
          • 1.rand函数:
          • 2.srand函数:
          • 3.time函数:
          • 4.game函数:
        • 5.完整代码:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档