【C语言】-- 猜数字小游戏

目录

1.要求

2.思路

3.主函数

4.菜单函数 menu1(),menu2()

5.猜数字

6.游戏函数 game()

7.运行结果

8.完整代码


 编译环境VS2022

1.要求

电脑随机生成一个1~100之间的数字,然后玩家开始猜数字,如果猜小了,电脑会告诉你猜小了,反之会告诉你猜大了,猜对了的话,电脑也会告诉你恭喜你,猜对了。

2.思路

1.让电脑生成一个随机数

2.玩家开始猜数字

3.玩游戏不可能只玩一次就结束,游戏结束由玩家定,可以使用do...while循环

3.主函数

        使用do...while循环可以保证游戏至少进入一次,然后根据menu()菜单函数提示选择:开始或者退出游戏。

        选择开始游戏,电脑先生成一个随机数,进入game()游戏函数。

       重点说如何生成随机数:

        在C语言中rand()函数(需要头文件#include)是专门生成随机数的,并且会返回一个在(0----32767)之间的随机整数但是rand()生成的树也不是纯粹的随机,下面图片是两次运行后生成随机数的结果。

【C语言】-- 猜数字小游戏_第1张图片

【C语言】-- 猜数字小游戏_第2张图片

通过对比,很明显每次重新运行后生成随机数是有规律的,也就是说每次进入游戏后第每局游戏的随机数是固定的,这显然不行。

为此,通过查找,C语言中 srand() (需要头文件#include) 函数可以解决,只需要在使用rand()之前调用srand()函数(设置随机数的生成器)。

srand((unsigned int)time(NULL)); //放在循环外面

n = rand(); //生成随机数n  范围(0----32767) //放在循环里面

srand()函数是设置一个随机起点,需要使用整型,但由于整型为固定值,随机值也相同,所以我们需要一个每时每刻都在发生变化的值,那就是:时间戳(是计算机当前时间-起始时间)所得到的值就是时间戳,使用时间戳来设置随机数的生成起点,使用时间戳要用time()函数来获取当前时间,srand函数返回值为unsigned int 类型,那么要将time强制类型转换成unsigned int 类型,time(NULL)为空指针。

srand 生成起点不能多次调用,否则会出现相同的情况,放在主函数内部调用一次就可以。

4.菜单函数 menu1(),menu2()

void menu1() {      //进入游戏界面

	printf("**************\n");
	printf(" 1.进入游戏   \n");
	printf(" 0.退出游戏   \n");
	printf("**************\n");

}
void menu2() {     //已经进入游戏玩游戏后的界面

	printf("**************\n");
	printf(" 1.继续游戏   \n");
	printf(" 0.退出游戏   \n");
	printf("**************\n");

}

这里为了更加符合游戏逻辑,添加了进入游戏界面和已经进入游戏玩游戏后的界面。

void 表示函数无返回值。

5.猜数字

        由于rand()生成的随机数是在0---32767之间,数字大,很难猜对,所以我们可以将随机值%100+1(%100余数在1-99之间再加1,就是1--100之间),就会得到1--100之间的数字。

        然后进行循环猜数字若猜大了,提示猜大了,若猜小了,提示猜小了,若猜对了,跳出循环 ,选择是否继续游戏。

n = rand() % 100 + 1; //生成1--100的随机数 

6.游戏函数 game()

void game(int n) {      //n为从main函数中传入的随机数
	int m = 0;          //m 玩家输入的猜的数
	printf("\n欢迎进入猜数字小游戏\n请猜一个数字->");
	while (1) {         //while(1)循环 直到猜中, 用break 结束循环   
		scanf("%d", &m);

		if (m > n) printf("猜大了!");      // 玩家猜的数m 与 电脑生成的随机数n 比较大小
		if (m < n) printf("猜小了!");
		if (m == n) {
			printf("恭喜你,猜对了!!!\n\n");
			menu2();
			printf("\n继续游戏请输入1,退出请输入0->");
			break;        //猜中,则跳出while循环
		}
		printf("\n继续猜->");
	}
}

7.运行结果

【C语言】-- 猜数字小游戏_第3张图片

8.完整代码

#define _CRT_SECURE_NO_WARNINGS
#include
#include 
#include 

void menu1() {      //进入游戏界面
	
	printf("**************\n");
	printf(" 1.进入游戏   \n");
	printf(" 0.退出游戏   \n");
	printf("**************\n");

}
void menu2() {     //已经进入游戏玩游戏后的界面
	
	printf("**************\n");
	printf(" 1.继续游戏   \n");
	printf(" 0.退出游戏   \n");
	printf("**************\n");

}
void game(int n) {      //n为从main函数中传入的随机数
	int m = 0;          //m 玩家输入的猜的数
	printf("\n欢迎进入猜数字小游戏\n请猜一个数字->");
	while (1) {         //while(1)循环 直到猜中, 用break 结束循环   
		scanf("%d", &m);

		if (m > n) printf("猜大了!");      // 玩家猜的数m 与 电脑生成的随机数n 比较大小
		if (m < n) printf("猜小了!");
		if (m == n) {
			printf("恭喜你,猜对了!!!\n\n");
			menu2();
			printf("\n继续游戏请输入1,退出请输入0->");
			break;        //猜中,则跳出while循环
		}
		printf("\n继续猜->");
	}
}

int main() {

	int input = 0;
	int n = 0;       //n为随机数 
	srand((unsigned int)time(NULL));   //放在循环之外
	menu1();
	printf("\n请输入【0/1】->");
	
	do {
		n = rand() % 100 + 1; //生成随机数,放在循环之内
		scanf("%d",&input);
		if (1 == input) game(n);   //进入游戏
		else if (0 == input) {
			printf("已退出游戏!");
		}
		else printf("输入有误,请重新输入->");

	} while (input);
	
	return 0;
}

你可能感兴趣的:(C语言篇,c语言,游戏)