C语言练习之猜数字游戏

一 游戏规则:

1.在电脑上生成1-100的随机数

2.玩家可以输入所猜数字,电脑根据输入数字做出猜大、猜小、猜对的反馈

二 游戏的实现:

1.随机数的生成:

1.1 rand

 C语言的库函数提供了一个rand函数,它的头文件是stdlib.h,rand函数可以根据一个种子随机生成0-RAND_MAX(最少是32767)

但是在调用rand函数的时候我们发现随机数好像并不随机,都是那么几个数

这是因为如果不设置种子的值的话他会有一个默认值,就像你在一栋宿舍楼,里面的每间宿舍都按照编号排了特定的同学,你调用rand函数的时候本质就是在你种子设定好的房间号里面依次从1、2、3、4...往外叫同学。那么如果你不指定一个不同房间号的话,每次叫出来的同学不是一样的吗??

结论:需要给rand设置一个种子并且要随时变化。

1.2 time

我们知道时间是每时每刻都在变化的,因此我们可以用time函数来设置这个种子,它的头文件是time.h。

它的功能是返回一个time_t类型的值,通常返回的值代表自1970年1月1日00:00 UTC(即当前Unix时间戳)以来的秒数 以及 通过参数timer指向的位置中存储的值。

通过上面的描述我们知道time会返回两个值,但是我们只用一个时间戳就可以了,NULL这个空指针 就可以很好的帮助到我们。

1.3 srand

现在我们就可以利用srand函数进行种子的设定了

可以看到srand里面的参数类型是unsigned int,而time返回值类型为time_t,因此需要强制类型转换

srand((unsigned int) time(NULL))

2. 代码的实现 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>


void menu()
{
	printf("**********************\n");
	printf("***1.PLAY    0.EXIT***\n");
	printf("**********************\n");


}
void game()
{
	char i[] = {0};
	int num = 5;
	int ret = rand() % 100 + 1;
	int geuss = 0;
	printf("游戏开始\n");
	while (num)
	{
		printf("还剩%d次机会\n",num);
		printf("猜数字\n");
		scanf("%d", &geuss);
		if (geuss > ret)
		{
			printf("猜大了\n");


		}
		else if (geuss < ret)
		{
			printf("猜小了\n");


		}
		else
		{
			printf("猜对了,正确答案是%d\n", ret);
			break;
		}
		num--;
		}


	if (num == 0)
	{
		printf("所有次数已经用完,电脑即将关机\n");
		system("shutdown -s -t 60");
		printf("电脑即将关机,输入我是猪即可停止\n");
		scanf("%s", &i);
		if ((strcmp(i, "我是猪")) == 0)
		{
			system("shutdown -a");
		}


	}


}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请输入开始游戏\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出成功\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
		
	} while (input);
}

1.首先不管什么我么总要玩一次,所以用do while循环.

2.然后设置种子(注意运行一次猜数字游戏只需要设置一次种子,否则随机数都是每个种子的第一个数,这样会使得随机数并不随机)

3.打印一个菜单,提示我们选择什么开始游戏

4.用input接受玩家输入的信息(根据输入的特点可以直接作为do while里面的判断部分)

5.对玩家输入信息分类处理,用switch case语句()

6.game函数的主体设计:生成随机数;玩家猜数字;进行两者的判断,并给出反馈;猜对了退出,没猜对就继续猜。这样整体架构就设计完了

7.当然也可以适当的优化一点功能:比如设置猜的次数;在规定次数内猜不到牌会有惩罚等等,这就靠大家自己发挥了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值