猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)

游戏规则

      电脑随机生成一个1~100的数字,用户输入数字,猜错10次就启动电脑关机程序60秒内关机,输入我是猪,则停止关机,回到猜数字游戏开始界面;

游戏设计思路

1.游戏交互界面    

        (1)游戏菜单

        (2)游戏主体

2.猜数字游戏

        (1)电脑生成随机数字

        (2)玩家输入数字

        (3)判断是否猜对

        (4)猜错惩罚

完整代码

void guanji()//关机代码
{
    system("color 0a");//代码变色
    char intput2[20] = { 0 };
    system("shutdown -s -t 60");//系统关机命令,定时60秒

  while (1)
 {

	printf("请注意,你的电脑在60秒内关机,我是猪,就取消关机\n");
	scanf("%s", intput2);               //strcmp是判断字符串是否相等的函数,如果相等返回值为0
	if (strcmp(intput2, "我是猪") == 0)//当strcmp返回值是零的时候说明输入的字符串和目标字符串一样
	{
		system("shutdown -a");//-a是取消关机
		printf("关机取消\n");
		break;
	}
	else
	{
		printf("你的输入有误,关机程序继续运行\n");
	}
 }
}

void menu()//游戏交互界面,给用户提供选择
{
	printf("************猜数字游戏************\n");
	printf("************* 1.play  *************\n");
	printf("**************2.exit   ************\n");
	printf("***********************************\n");

}

void game()//
{
	int guess = 0;
	int ret = rand()%100+1;//生成随机数
	//猜数字
	int a = 10;
	while (1)                //循环判断用户输入的数字是否正确
	{
		printf("请猜猜是什么数字(1~100)");
		scanf("%d" ,& guess);//用户输入的数字传递给变量guess
		if (guess < ret)    //如果输入的数小于电脑随机生成数
		{
			a--;            //猜错了机会减一
			printf("猜小了,你还有%d次机会\n",a);
			
			if (a < 1)     //当机会数为0时
			{
				printf("你是猪吗?");
				Sleep(1000); //输出你是猪后停顿一秒让用户看到
				guanji();    //调到关机程序启动关机惩罚
				break;
			}
		}
		else if (guess > ret)  //如果输入的数大于电脑随机生成数
		{
			a--;              //机会减一
			printf("猜大了.你还有%d次机会\n",a);
			
			if (a < 1)
			{
				printf("你是猪吗?");
				Sleep(1000);//输出你是猪后停顿一秒让用户看到
				guanji();   //调到关机程序启动关机惩罚
				break;
			}
		}
		else {
			printf("恭喜你,猜对了.\n");
			break;
		}


	}


}


int main()
{
	int intput;
	srand((unsigned int)time(NULL));//用时间戳来设置随机数生成器
	                                //时间是随机的
	do
	{
		menu();
		printf("请选择:> 1 或 2\n");
		scanf("%d", &intput);
		switch (intput)//选择分支,3种输入情况
		{
		case 1:
			game();
			break;
		case 2:
			printf("退出游戏!\n");
			break;
		default:
			printf("输入错误请重新选择!!\n");
		}

	} while (intput);



	


	return 0;
}

运行截图

猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)_第1张图片猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)_第2张图片

游戏制作关键点:随机数生成

 电脑随机数的生成需要使用到3个函数:rand()、srand()、time()

1.rand( )随机数生成器:

猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)_第3张图片

rand()函数的属性:int rand (void)——生成随机整数(0-32767)

rand()函数接受参数为空,返回一个int类型的随机整数。头文件-stdlib.h

通过测试发现,单独通过rand()生成的随机数是伪随机数,每次运行生成的随机数都是一样的。这是因为没有初始化随机数生成的起点,每一次生成随机数的点位都相同。

猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)_第4张图片

 三次运行生成的随机数都是一样的。

那这样猜数字每次都是一个数肯定不行啦,很容易就被人家猜出来,而且每次都一样,所以这是不能达到要求的。这时我们就要用到srand()重新设置随机生成数的起点

 2.srand()随机数生成器初始化函数

猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)_第5张图片

srand()函数属性:void srand (unsigned int seed)

srand函数接受一个unsigned int类型,返回空(不需要返回值->设置随机数生成起点),头文件-stdlib.h

 我们在原来的代码rand()前加上srand()函数,初始化随机数生成器看看会有什么变化呢?

猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)_第6张图片

   通过对比我们发现rand()生成随机数的值会随着我们srand()设置的初始化的值而改变。

那么我们怎么生成一个真的随机数呢?

        因为rand()生成数的值是会随着srand()的改变而改变,那么我们只要给strand()传递一个随机值,那么rand()就会生成一个真正的随机数。

这时就要用到time()函数啦!时间是在不断改变的。

 3.time()函数

time函数属性:time_t time (time_t* timer)

:time函数接收一个指针类型,返回time_t类型,头文件-time.h

三者结合便可生成我们的随机数啦!!!

猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)_第7张图片

因为调用一次函数就会设置一个随机数的生成器,不需要重复调用,所以可以放到循环的之外。

通过对比我们发现每次生成的数字都不一样,我们随机数生成器就完成啦!!!!

注意:

1.因为time()函数返回值类型是time-t类型,而strand()函数接受的类型是unsigned int(无符号整型)类型;所以在time前加上(unsigned int)强制转换类型;

2.time需要的参数是指针,我们传入一个空指针就可以啦!

把这个知识运用到游戏里面去:

猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)_第8张图片

注:rand()%100是设置生成数的范围,rand()原本的范围是(0~32767),除以100取余的范围就是(0~99),那么加上1范围就变成了(1~100);

判断用户输入是否正确代码

void game()//
{
	int guess = 0;
	int ret = rand()%100+1;//生成随机数
	//猜数字
	int a = 10;
	while (1)                //循环判断用户输入的数字是否正确
	{
		printf("请猜猜是什么数字(1~100)\n ");
		scanf("%d" ,& guess);//用户输入的数字传递给变量guess
		if (guess < ret)    //如果输入的数小于电脑随机生成数
		{
			a--;            //猜错了机会减一
			printf("猜小了,你还有%d次机会\n",a);
			
			if (a < 1)     //当机会数为0时
			{
				printf("你是猪吗?");
				Sleep(1000); //输出你是猪后停顿一秒让用户看到
				guanji();    //调到关机程序启动关机惩罚
				break;
			}
		}
		else if (guess > ret)  //如果输入的数大于电脑随机生成数
		{
			a--;              //机会减一
			printf("猜大了.你还有%d次机会\n",a);
			
			if (a < 1)
			{
				printf("你是猪吗?");
				Sleep(1000);//输出你是猪后停顿一秒让用户看到
				guanji();   //调到关机程序启动关机惩罚
				break;
			}
		}
		else {
			printf("恭喜你,猜对了.\n");
			break;
		}


	}


}

 惩罚关机代码

void guanji()
{
    system("color 0a");//代码变色
    char intput2[20] = { 0 };
    system("shutdown -s -t 60");//系统关机命令,定时60秒

  while (1)
 {

	printf("请注意,你的电脑在60秒内关机,我是猪,就取消关机\n");
	scanf("%s", intput2);               //strcmp是判断字符串是否相等的函数,如果相等返回值为0
	if (strcmp(intput2, "我是猪") == 0)//当strcmp返回值是零的时候说明输入的字符串和目标字符串一样
	{
		system("shutdown -a");//-a是取消关机
		printf("关机取消\n");
		break;
	}
	else
	{
		printf("你的输入有误,关机程序继续运行\n");
	}
 }
}

菜单代码

void menu()//游戏交互界面,给用户提供选择
{
	printf("************猜数字游戏************\n");
	printf("************* 1.play  *************\n");
	printf("**************2.exit   ************\n");
	printf("***********************************\n");

}

游戏主体代码

int main()
{
	int intput;
	srand((unsigned int)time(NULL));//用时间戳来设置随机数生成器
	                                //时间是随机的
	do
	{
		menu();
		printf("请选择:> 1 或 2\n");
		scanf("%d", &intput);
		switch (intput)//选择分支,3种输入情况
		{
		case 1:
			game();
			break;
		case 2:
			printf("退出游戏!\n");
			break;
		default:
			printf("输入错误请重新选择!!\n");
		}

	} while (intput);



	


	return 0;
}

制作不易,如有帮助请给博主一键三连,蟹蟹!!!

制作不易,如有帮助请给博主一键三连,蟹蟹!!!

制作不易,如有帮助请给博主一键三连,蟹蟹!!!

制作不易,如有帮助请给博主一键三连,蟹蟹!!!

你可能感兴趣的:(重新学习编程,游戏)