【游戏】猜数字

目录

1.游戏描述

2.游戏设计


1.游戏描述

1.自动产生一个1-100之间的随机数

2.开始猜数字

-->猜对了,游戏结束

-->猜错了,告诉你猜大了还是猜小了,继续猜直到猜对了为止

3.游戏可以一直玩,除非退出游戏

2.游戏设计

第一步:先设计主菜单,也就是你刚开始黑框框内想看到的。进入菜单后,输入1的时候进行猜数字游戏,输入0的时候break,输入其他的时候需要再次打印菜单并且重新输入操作。初始代码如下:

void menu()
{
	printf("****************************n");
	printf("****************************n");
	printf("*****   1.开始游戏    ******n");
	printf("*****   0.退出游戏    ******n");
	printf("****************************n");
	printf("****************************n");
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择");
		scanf("%d", &input);
		switch (input)
		{
		case 1:printf("猜数字n");break;
		case 0:	printf("退出游戏n");break;
		default:printf("输入错误,请重新输入!n");break;
		}
	} while (input);
	getchar();
	getchar();
	return 0;
}

分析:当input等于1时,进入猜数字,然后跳出switch,do while循环为真则继续打印菜单;

当input等于0时,直接退出游戏,跳出switch,do while循环为假不执行;

当input为其他值时,重新输入,do while循环为真则继续打印菜单。

第二步:实现猜数字的过程记为game

1.需要生成一个随机数-->rand()   

调查发现int rand(void)-->表示rand无参返回为int类型

代码如下:

void game()
{
	int num=rand();//生成一个随机数,引用头文件stdlib.h
	//rand无参,返回类型为int
	printf("%dn", num);
}

当我们关闭程序,重新调试时我们会发现它的随机数都是一样的,如下图:

 这是为什么呢?-->rand函数返回了一个0-32767的一个数,在用rand之前还应该调用srand(需要引入stdlib.h)            调查发现void srand(unsigned int  )

因此我们尝试将代码修改为:

void game()
{
	srand(100);
	int num=rand();//生成一个随机数,引用头文件stdlib.h
	//rand无参,返回类型为int
	printf("%dn", num);
}

我们调试代码可以发现运行出来的随机数与之前不同,但是当我们一直执行猜数字便会发现一直都是365。当我们改变代码中的100,便可以发现365会变成其他数字,但一直执行猜数字也一直不变。

那我们如何让srand里的数字变起来呢?-->时间-时间戳(时间转化成一个数字)在网页搜索后可以了解到时间戳:就是当前时间相较于起始时间之间的差值换算成以秒为单位的数字

传入time函数(引入time.h),调查发现time函数返回的类型为time_t,而其也为int型,又因为srand需要unsigned int类型,所以我们把time函数强制转化,即代码修改如下:

void game()
{
	srand((unsigned int)time(NULL));//time函数需要引入time.h
	int num=rand();//生成一个随机数,引用头文件stdlib.h
	//rand无参,返回类型为int
	printf("%dn", num);
}

此时,代码运行如图:

我们可以发现这些随机值都离得很近,当我们快速执行1的时候会出现下面的情况(值相等)。但是我们一次猜数字的过程中,只需要设置一次随机数即可,因此我们不应该让srand紧在rand前面。怎么解决呢?-->将srand在一进入主函数就设置 。

那么我们怎么让这些随机数在1-100之间呢?-->让这个数%100的余数是0-99,所以加1范围就会变成1-100.

因此代码修改为int num=rand()%100+1;

2.猜数字

设置一个循环,输入要猜的数当小了的时候输出“猜小了”,继续输入一个数字;

当大了的时候输出“猜大了”,继续输入一个数字;

当等于的时候输出“恭喜你猜对了”并且跳出循环。

代码如下:

while (1)
	{
		printf("请猜数字n");
		scanf("%d", &guess);
		if (guess < num)
			printf("猜小了n");
		else if (guess>num)
			printf("猜大了n");
		else
		{
			printf("恭喜你,猜对了n");
			break;
		}
	}

我们的这个游戏设计到这里就结束啦!!!

整体代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("****************************n");
	printf("****************************n");
	printf("*****   1.开始游戏    ******n");
	printf("*****   0.退出游戏    ******n");
	printf("****************************n");
	printf("****************************n");
}
void game()
{
	int guess = 0;
	int num = rand() % 100 + 1;//生成一个随机数,引用头文件stdlib.h
	//rand无参,返回类型为int
	while (1)
	{
		printf("请猜数字n");
		scanf("%d", &guess);
		if (guess < num)
			printf("猜小了n");
		else if (guess>num)
			printf("猜大了n");
		else
		{
			printf("恭喜你,猜对了n");
			break;
		}
	}

}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//time函数需要引入time.h
	do
	{
		menu();
		printf("请选择");
		scanf("%d", &input);
		switch (input)
		{
		case 1:game();break;
		case 0:	printf("退出游戏n");break;
		default:printf("输入错误,请重新输入!n");break;
		}
	} while (input);
	getchar();
	getchar();
	return 0;
}

游戏试玩如下图:

今天的课程到这里就结束啦!!!!!

谢谢大家谢谢大家谢谢大家(重要的事说三遍!!!!)>_< 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>