猜数字游戏

//#include<stdio.h>
//#include<stdlib.h>
//#include<time.h>
//void menu()
//{
//	printf("*************************\n");
//	printf("******  1.play  *********\n");
//	printf("******  0.exit  *********\n");
//	printf("*************************\n");
//}
//
//void math()
//{
//	int se = rand() % 100 + 1;
//	//printf("%d\n",se);
//	int guess = 0;
//	while (1)
//	{
//		printf("请输入猜测的数字大小:>");
//		scanf("%d", &guess);
//		if (guess > se)
//		{
//			printf("猜大了\n");
//		}
//		else if (guess < se)
//		{
//			printf("猜小了\n");
//		}
//		else
//		{
//			printf("猜对了\n");
//			break;
//		}
//	}
//}
//
//int main()
//{
//	int n;
//	srand((unsigned) time);
//	do
//	{
//		printf("猜数字游戏:>\n");
//		menu();
//		printf("请做出选择:>");
//		scanf("%d",&n);
//		switch (n)
//		{
//		case 1:
//			math();
//			break;
//		case 0:
//			printf("您以退出游戏\n");
//			break;
//		default:
//			printf("输入错误,请重新输入:>");
//			break;
//		}
//		
//	} while (n);
//	return 0;
//}

C语言猜数字游戏的重难点在于随机数的处理,想要做好一个猜数字游戏,那么就要使得它的数字足够随机,那么如何解决随机数这个问题呢?

我们通常使用 rand()  这个函数来处理,rand()  函数是一个整形无参数函数(int rand(void)),每次调用它就可以获得一个明显不相关的数据,但是在使用rand  的时候,我们需要用srand 函数来进行初始化,让它得到一个随机值。

void srand(unsigned int seed)

 使用情况如下:

猜数字游戏

 猜数字游戏

经过实验发现,如果srand ()里面的数值不发生改变,那么rand 得到的数值也就不会发生变化,也就是说,如果想要得到一直在变化的随机数,那么srand 函数里面的随机数也要一直在变动,

但是这样一来我们的问题就再次回到了原点——随机数。

这样一来,我们就需要一个一直在变动的数值,那么什么一直在变动?答案是——时间

这时候我们就要引入一个时间戳的概念,什么叫时间戳 

时间戳是使用数字签名技术产生的数据,签名的对象包括了原始文件信息、签名参数、签名时间等信息。时间戳可以当成以前的邮戳来理解,戳记表明邮件的收发时间,时间戳也一样,不过时间戳的获取是指从计算机诞生的1970年1月1日早上0点到现在的时间的秒数。

我们引用时间戳的函数是time,则srand 可写为

srand ((unsigned) time);

此时我们的随机数就可以写出来了:

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

void math()
{
    int random;
    srand((unsigned) time(NULL));
    random=srand;
    printf("%d\n",random);
}

解决了最大的难题,那么猜数字游戏,我们也就能写出来了

先做一个简易的菜单

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

菜单做完了之后再做随机数的产生和猜数字游戏的玩法基础

#include<stdlib.h>
#include<time.h>
#include<stdio.h>
void math()
{
    srand((unsigned) time);
    int random=rand;
    int guess;
    while(1)    //这里判定条件为 1 是为了让游戏能够一直进行猜测数字,给玩家多次机会
    {
        pirntf("请输入你猜测的数字:>");
        scanf("%d",&guess);
        if(guess>random)
        {
            printf("猜大了\n");
        }
        else if(guess<random)
        {
            printf("猜小了\n");
        }
        else
        {
            printf("恭喜你,猜中了!\n");
            break;//猜中了就直接跳出循环
        }
    }
}

做完上面两步之后,接下来来做游戏的主体:

#include<stdio.h>
int main()
{
    int n;
    do
    {
        printf("猜数字游戏:>");
        menu();
        printf("请选择:>");
        scanf("%d",&n);
        switch(n)
            case 1:
                math();
                break;
            case 0:
                printf("您已退出游戏\n");
                break;
    }while(n)//这里用do···while()语句是为了能让程序更方便运行,不会在做出选择后就退出游戏
}

按照上面的代码来说逻辑和语法基本已经没有问题了,但是

猜数字游戏

 所以应该把这句语句放进主函数里

猜数字游戏

如此  srand  语句就只被调用了一次,就不会出现那种情况 ,但是我们所写出来的代码得到的随机数范围又太大了不好猜测,所以我们应该给它做出限制,让它的范围在1~100以内;

猜数字游戏

 觉得有用的兄弟们,点个赞,给个关注吧。

上一篇:python入门学习第三天,变量,ifelse语句


下一篇:UVA 1612 Guess