猜数字游戏——C语言实现

完整代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>	
void menu()
{
	printf("*********************\n");
	printf("****   1、PLAY   ****\n");
	printf("****   0、EXIT   ****\n");
	printf("*********************\n");
}

int main(void)
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &input);  //1进入游戏
		switch(input)
		{
			case 0:
				printf("退出游戏\n");
				break;
			case 1:
				printf("游戏开始\n");
				game();
				break;
			default:
				printf("选择错误,请重新选择\n");
				break;
		}
	} while (input);
	//选择0就会结束while循环
	return 0;
}

void game()
{
	//1、生成随机数
	int b = 0;
	int a = rand()%100+1;//1~100的随机数
	//printf("%d", a);
	//2、猜数字
	int count = 5;
	while (count)
	{
		printf("请猜一个数:");
		scanf("%d", &b);
		if (b > a)
		{
			printf("猜大了,");
		}
		else if (b < a)
		{
			printf("猜小了,");
		}
		else
		{
			printf("恭喜你!猜对了!数字是%d\n",b);
			break;
		}
		count--;
		if (count > 0)
		printf("你还有%d次机会\n", count);
	}
		printf("很遗憾,你没能猜对,数字为%d\n", a);
}

主要运用的是自定义函数、分支与循环。下面来讲讲细节。

首先,先用自定义函数创建了一个界面,这个界面可以根据自己的想法来创建,但主要的就是搭配后面的switch进行选择,选1就进入游戏,选0 就退出游戏。选择其他的就再次进行选择。注意,如果case子项没有break,就会继续往下执行。比如选择1,如果该分支没有break,会继续执行下面的代码。

我用的是do while循环,因为我首先要先有一个界面,所以调用了menu(),do while循环至少执行循环体一次,然后用你输入的选择用作while里的条件,如果你选择1,为真就会无限循环,依靠break跳出循环,选择0就不进行循环。

其次,就是在case1中又调用了一个自定义函数。这个函数是这游戏最重要的部分,玩这个游戏首先就要生成一个随机数,让你去猜,下面我们来谈谈如何生成随机数。

先介绍rand()和srand()。rand和srand都在头文件stdlib.h中。rand函数返回一个伪随机数,什么是伪随机数,其是通过某种算法生成的,真正的随机数是谁都无法预测的。rand的值在0-RAND_MAX(32767)之间。

使用rand()时括号里面不带参数,rand函数是对一个叫“种子”的基准值进行运算生成的随机数。srand函数用来初始化随机数生成器的,也就是初始化基准值的,默认值为1.

srand的原型为

void srand(unsigned int seed);
time_t time(time_t*timer)

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

time函数的参数timer如果是非NULL的指针的化,函数也会将这个返回的差值放在timer指向的内存中带回去。   timer是NULL,就只返回这个时间的差值,time函数返回的这个时间差值被叫做时间戳。time函数在头文件time.h中

接下来回到这个程序。在每次程序进行时,我们只需要设置一次种子就行了,可以这样设置

srand((unsigned int)time(NULL));

如果不写srand括号里面的会怎么样?那么它的默认值是1,每次程序运行时它产生的随机数都不会变。

在没有srand的情况下,默认种子为1,那么我们再将srand的种子设为1,发现生成的值没有变化。

另外,srand不能放在循环里面,否则每次执行循环时设置的种子不一样,产生的数也会变化,也就是说让你猜的那个数一直在变,你是在折磨你自己。

在这个程序中,我还加了一个限制条件,只给你猜5次的机会,也可以根据自己的想法来。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值