C语言初学者编程游戏(猜数字)

2023-01-18 20:15:14
 //猜数字游戏
 //1. 电脑随机生成一个随机数
 //2.猜数字

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

void menu()
{
	printf("*********************************");
	printf("*** 1. play   0. exit ***********");
	printf("*********************************");
}


void game()
{
	int guess = 0;
	// 1. 生成一个随机数
	// 拿时间戳来设置时间起点
	int ret = rand()%100 +1; // 生成随机数
	// 如果将ret = rand();直接放到while里面,会每次循环生成一个数字

	// 2. 猜数字
	printf("猜数字");
	while (1)
	{
		scanf("%d", &guess);
		if (ret > guess)
		{
			printf("猜小了");
		}
		else if (ret < guess)
		{
			printf("猜大了");
		}
		else
		{
			printf("恭喜你,猜对了!");
		}
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));

	do
	{
		menu();
		printf("\n请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("exit the game\n");
			break;
		default:
			printf("error in this way\n");
			break;

		}
	} while (input);

}

代码如图所示,非常简单有意思的一个小软件,在此尝试回顾本段代码的含义:

首先解释三个第一次遇到的函数 -srand -rand -time()

-srand 函数是随机数发生器的初始化函数(来自百度百科)

-rand 函数是伪随机数发生器,因为每次运行的结果都相同,因此经常配合-srand使用

Remarks: the rand function returns a pseudorandom integer in the range 0 to RAND_MAX.

Use the srand function to seed(设置) the pseudorandom-number generator before calling(调用) rand.

-time() 时间戳函数,返回一个指针,通过时间的不断变化,配合-srand生成真正的随机值

在srand((unsigned int)time(NULL))中,如果使用-srand()返回一个固定值,那么生成的值将会固定,因此我们配合-time()使用,但由于-time()会返回一个time_t类型的指针,因此我们需要用unsigned int强行转换为整型,值得一提的是,time_t在定义中,其实是长整形long类型;另外,-time()需要调用一个指针,我们用NULL(空指针)来代替。因此srand((unsigned int)time(NULL))就完成了。


由此,整个代码最核心的部分,生成一个随机数就已经大功告成了,我们通过控制ret的大小,如代码所示的:

int ret = rand() % 100 + 1;

或者按照自己的意愿确定一个区间,就可以实现。其余内容只不过是对整款代码的添色。

另外值得一提的是在主函数中的do while 语句设置,由于while(input),因此input为真(非零)的时候,会执行循环,所以如果将case 0 换成其他数字,这个界面都会出现bug。

最后

while(1)
{
这里是循环的内容!
}

这样的循环操作对于我这样的小白真的是大开眼界,由于while判断永远为真,只要执行到game();这个函数,这个循环就一定会执行,而不需要任何条件,学习了!


第一次敲出一个互动性代码,还是有点开心,玩了大概10分钟。

最后回顾这篇代码的时候还是有些吃力,对于核心的三个代码的内容还是不怎么清晰,希望自己再接再厉!

  • 作者:Gwwen
  • 原文链接:https://blog.csdn.net/Gwwen/article/details/120822196
    更新时间:2023-01-18 20:15:14