使用c语言编写一个猜数字游戏

使用c语言编写一个猜数字游戏!

编写前言: (可以直接看标黄的文字!)

猜数字游戏 猜1-100间的数字。
做这个游戏需要生成随机数,
rand函数是生成随机数的函数。rand函数在vs上会生成0 - 32767间的数字。
rand 函数原型: int rand (void);
但是rand函数生成的随机数并不是真正的随机数,是伪随机数。打印出来时,和上次生成的结果是一样的。

之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。
如果要⽣成不同的随机数,就要让种⼦是变化的。

让种子变化的方法:C语⾔中⼜提供了⼀个函数叫 srand,⽤来初始化随机数的⽣成器的,也就是改变种子
srand的原型:void srand (unsigned int seed);
种子是数据类型需要是unsigned int 如果不是,编译器会报警告。
(unsigned int是无符号整型,如果是int,值可以为负,而unsigned int就只有正数)
只要种⼦在变化,每次⽣成的随机数也就变化起来了。

生成一个随机数,但又需要一个随机数,那该怎么做呢?
方法:在C语⾔中有⼀个函数叫 time ,可以获得这个时间,而时间是在变的,把时间当种子。
time函数原型: time_t time (time_t timer);*
该函数返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型

time函数的参数 timer 如果是⾮空的指针的话,函数会将这个返回的差值放在 timer指向的内存中去。
如果 timer 是(空)NULL指针,就直接返回这个时间的差值。也就是说直接拿srand函数接收就好了。
返回的这个时间差也被叫做:时间戳。

time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值。单位是秒。
好的,下面开始。
#include time 函数头文件
#include rand,srand 函数头文件

第一步(先写好大概的结构):
#include 	//库函数头文件
#include 	//time 函数头文件
#include   //rand,srand 函数头文件
void menu()		// 菜单函数
{
   printf("**********************");
   printf("*****   1. play   ****");	//1开始游戏
   printf("*****   0. exit   ****");	//0退出
   printf("**********************");
}

int main()
{
   int input = 0; //定义一个装用户从键盘输入的值
   do		//使用do while循环,用户得先进来 然后选择。
   {
   	menu();		//首先得进入循环得打印一个菜单。由于不想太啰嗦 所以直接定义个菜单函数,调用就好了。
   	printf("请输入>");
   	scanf("%d", &input);
   	
   	switch (input)		//用if判断也行!
   	{
   	case 1:
   		printf("开始游戏!\n");
   		break;
   	case 0:
   		printf("游戏结束!\n");
   		break;
   	default:
   		printf("输入错误!\n");
   		break;
   	}

   } while (input); //当用户输入0,为假直接退出循环了,所以直接放个input就行。


   return 0;
}
测试:

使用c语言编写一个猜数字游戏_第1张图片

第二步(写玩游戏的语句):

(不限次数)

#include 
#include 	//time 函数头文件
#include   //rand,srand 函数头文件

void menu()		// 菜单函数
{
	printf("**********************\n");
	printf("*****   1. play   ****\n");	//1开始游戏
	printf("*****   0. exit   ****\n");	//0退出
	printf("**********************\n");
}

void game()
{
	//首先得生成随机数。
	int r = 0;			//定义一个变量装随机数。
	r = rand() % 100 - 1; //这里每次玩游戏都调用rand函数,生成新数字。
						//因为rand函数生成数是0-32767间,%100则只能取0-99,而1-100只需要%100+1就可以了。
						//取随机数公式:⽣成a-b的随机数,a + rand()%(b-a+1)。
	
						//srand函数只需要调用一次就可以!所以不用写在这里,写在主函数就可以!。
	int guess = 0;
	while (1)			//不限制次数,一直为真就可以,猜对直接break就行
	{
		printf("请猜数字>:");
		scanf("%d", &guess);

		if (guess < r)
		{
			printf("猜⼩了\n");
		}
		else if (guess > r)
		{
			printf("猜⼤了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

int main()
{
	srand((unsigned int)time(NULL)); //srand(time(NULL) 这样写也可以,不想报警告就强制类型转换为unsigned int。
	
	int input = 0; //定义一个装用户从键盘输入的值
	do		//使用do while循环,用户得先进来 然后选择。
	{
		menu();		//首先得进入循环得打印一个菜单。由于不想太啰嗦 所以直接定义个菜单函数,调用就好了。
		printf("请输入>");
		scanf("%d", &input);
		switch (input)	//用if判断也行!
		{
		case 1:
			printf("开始游戏!\n");
			game();
			break;

		case 0:
			printf("游戏结束!\n");
			break;

		default:
			printf("输入错误!\n");
			break;
		}

	} while (input); //当用户输入0,为假直接退出循环了,所以直接放个input就行。


	return 0;
}
测试:

使用c语言编写一个猜数字游戏_第2张图片

那限次数的怎么写呢:

只需要把上面的viod game修改一些就好了。

void game()
{
	int r = 0;			
	r = rand() % 100 - 1; 
	int guess = 0;
	int count = 5;		//限制5次

	while (count)		//次数用完为零 自动跳出循环。
	{
		printf("\n你还有%d次机会\n", count);
		printf("请猜数字>:");
		scanf("%d", &guess);
		if (guess < r)
		{
			printf("猜小了\n");
		}
		else if (guess > r)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		count--;		//每猜一次减1。
	}
	if (count == 0)		//如果是为0自动跳出循环 说明没猜对,给个提示。
	{
		printf("你失败了,正确值是:%d\n", r);
	}
}
测试:

使用c语言编写一个猜数字游戏_第3张图片

好的本期就到此结束了!再见!

你可能感兴趣的:(编程c语言,c语言,游戏,开发语言)