C语言——猜数字游戏

“猜数字小游戏”游戏规则:由两个人玩(人机),一方出数字,一方猜。计算机随机确定一个数,用户来猜,每猜一次计算机提示猜的数字偏大还是偏小,直到猜对数字结束。

代码1:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	int count = 0;
	int flag = 0; //为0表示猜错
	int mynum = 0;
	int yournum = 0;
	srand((unsigned)time(NULL));//利用时间设置随机种子,Time(0)是得到当前时间值 
	mynum = rand() % 100 + 1;//rand函数返回随机数(在1~100之间的)

	while (count<7) //最多猜7次 
	{
		printf("请输入猜的数字>:\n");
		scanf("%d", &yournum);
		count++;
        if (yournum == mynum)//答对 
		{
			printf("YES!");
			flag = 1;
			break;
		}
		else//答错 
		{
			if (yournum > mynum)
				printf("TOO BIG!\n");
			else
				printf("TOO SMILE!\n");
		}
	}
	if (flag == 0)
		printf("\nGAMEOVER!!");
	return 0;
}

代码1详解:定义count变量来记录猜的次数,在while的判断表达式中判断count的值(此代码设置最多猜7次,count<7时执行循环体),当7次都未猜中时GAME OVER!

※产生随机数的过程:void srand(unsigned seed)函数是随机数发生器的初始化函数,需要的头文件<stdlib.h>srandrand()配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,那么每次调用rand函数生成的伪随机数序列都是一样的。这时,就需要用到srand(unsigned seed)通过参数seed改变系统提供的种子值,从而使rand函数生成不同的伪随机数序列,实现真正意义上的随机。一般通过系统时间来改变系统的种子值,即srand( time(NULL) ),为rand函数提供不同的种子值。time函数(需要的头文件<time.h>)来获取当前的系统时间(机器日历时间),其值表示从CUT时间1970年1月1日00:00:00到当前时刻的秒数,然后将此time_t型数据转化为unsigned型再传给srand函数,即srand( (unsigned) time(NULL) ),直接传入一个空指针(因为这里不需要经过参数获得的数据)。如果随机数的范围很大,那么猜对的难度会很大,而若我们设定一个较小的范围,难度就大大降低。rand()%100,随机数对100取余,限制产生随机数的范围为0~99,那么rand()%100+1表示随机数的范围为0~100。

计算机产生随机数后,在while循环体中,每次①用户输入猜的数字②判断猜对猜错③若猜对则打印“YES!”跳出循环;若猜错提示猜大了还是猜小了,继续循环体。直到猜对或次数用完,游戏结束。

代码2:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void menu()
{
	printf("**********************************\n");
	printf("*********** 1、play ***************\n");
	printf("*********** 0、exit ***************\n");
	printf("**********************************\n");
}
void game()
{
	int random_num = rand() % 100 + 1;
	int input = 0;
	while (1)
	{
		printf("请输入猜的数字>:");
		scanf("%d",&input);
		if (input > random_num){
			printf("猜大了!\n");
		}
		else if (input < random_num){
			printf("猜小了!\n");
		}
		else{
			printf("恭喜你!猜对了!\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do{
		menu();
		printf("请选择>:");
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

过程:①产生一个随机数(产生过程同上)用户输入猜的数字 ③判断猜对猜错,若猜对则打印“恭喜你猜对了!”跳出循环;若猜错提示猜大了还是猜小了,继续循环体。直到猜对游戏结束(没有设计猜的次数),再进入下一次游戏。此段代码还加入了一个简易菜单,可以选择(1、play   0、exit)。在主函数中用switch(input)和while(input)来实现,选择1则开始游戏;选择0时,此时while(0),所以跳出循环,不进入游戏;输入非0非1时提示“选择错误,请重新输入”,进入下一循环。

游戏效果图如下↓




扫描二维码关注公众号,回复: 160656 查看本文章




猜你喜欢

转载自blog.csdn.net/sillyxue/article/details/80215372