c语言-(猜数字游戏)

目录

一. 游戏规则

二. 知识储备

三. 代码实现

3.1 代码理解

3.2 rand函数srand函数理解

一. 游戏规则

       电脑会随机生成1-100范围内一个数,这个数对玩家是不可知的,玩家需要做的是猜一下数字是多大,并在键盘上输入所猜想的数字,电脑会根据玩家输入的数字给出以下提示:

a> 如果猜大了,电脑会提醒猜大了,继续猜
b> 如果猜小了,电脑会提醒猜小了,继续猜
c>如果猜对了,恭喜你,猜对了,结束游戏                                                                                 

成功猜对数字,即玩完一把游戏后,程序不会结束,可以选择继续玩,或者退出游戏。

二. 知识储备

       这个小游戏的实现,需要大家掌握while,do while循环语句,if else多分支语句,switch选择语句,以及函数的调用。此外,在下文中我还会对代码中用到的rand函数和srand函数进行简单讲解。

三. 代码实现

3.1 代码理解

       对于这个小游戏,在开始玩时首先会进入游戏菜单,因此要先在屏幕上打印出游戏菜单。下面是打印菜单的函数。

//游戏菜单
void menu()
{
	printf("**************************\n");
	printf("**********1.play**********\n");
	printf("**********0.exit**********\n");
	printf("**************************\n");
}

根据游戏菜单,选择1开始游戏或者选择0退出游戏,通过switch选择语句来实现。因为一局游戏在结束之后并不会退出程序,所以需要通过循环语句来对整个过程进行循环,直到玩家输入0退出游戏为止。

do
	{
		//打印游戏菜单
		menu();
		
		printf("请选择:>");
		scanf("%d", &i);
		switch (i)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			break;
		}
	} while (i);

当玩家输入1时,开始游戏,电脑会生成一个对玩家不可见的随机数,通过rand以及srand函数来实现,玩家则将自己所猜的数字通过键盘输入到电脑,电脑会根据玩家输入的数字给与提示,直到玩家猜对结果。玩完一局后,屏幕上会继续显示游戏菜单,由玩家选择继续下一把游戏或者退出游戏。

//游戏主体
void game()
{
	int n = 0;
	int num = rand() % 100 + 1;//生成一个1-100范围内的随机数
	printf("请在键盘上输入您所猜的数字:>");
	while (1)
	{
		scanf("%d", &n);
		if (n > num)
			printf("猜大了,继续猜。\n");
		else if (n < num)
			printf("猜小了,继续猜。\n");
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}

3.2 rand函数srand函数理解

       在游戏中,电脑生成随机数是由rand函数和srand函数共同实现的,调用这两个函数需要包含头文件<stdlib.h>。在c语言中,rand函数可以用来产生随机数,但并不是真正意义上的随机数。它是返回介于 0 和 RAND_ MAX 之间的伪随机整数。这个数字是由一个算法生成的,该算法每次调用它时都返回一个显然不相关的数字序列。该算法是使用一个种子来生成序列,当计算机正常开机后,这个种子的值是固定的,因此产生的伪随机整数也是固定的,除非你为了改变这个值破坏了系统。为了初始化的值不同,C语言提供了srand函数。下面用代码展示单独rand函数生成的随机数:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int main()
{
	int i = 0;
	int random_num = 0;
	for (i = 0;i < 5;i++)
	{
		random_num = rand() % 100 + 1;//生成1-100的随机数
		printf("%d ", random_num);
	}

	return 0;
}

经过在vs编译器上的多次运行,发现rand函数每一次生成的随机数都相同 ,因此要配合srand函数一起使用。

int rand( void );
void srand( unsigned int seed );

       rand函数每次调用前都会查询是否调用过srand(seed),是否给seed设定了一个值,如果没有,种子的值就默认为1,直接用 1 来初始化种子,那生成的随机数每次就会重复,为了防止生成的随机数重复,一般使用时间戳作为时间种子,采用系统时间来初始化,使用time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数。time函数需要包含头文件<time.h>

       如果我们两次调用srand函数设置随机数种子之间的时间间隔不超过1s,这会导致我们重置随机数种子,从而等价于使用了一个固定的随机数种子。那么这两次调用最后生成的随机数就是相同的。所以,一定不要将srand写在生成随机数的循环中。

下面是猜数字游戏的完整代码。

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

//猜数字游戏
//1.电脑会随机生成一个数
//2.猜数字
//a> 猜大了,提醒猜大了,继续猜
//b> 猜小了,提醒猜小了,继续猜
//c> 猜对了,恭喜你,猜对了,结束游戏
//3.玩完一把不过瘾可以继续玩,不用退出程序

//游戏菜单
void menu()
{
	printf("**************************\n");
	printf("**********1.play**********\n");
	printf("**********0.exit**********\n");
	printf("**************************\n");
}

//游戏主体
void game()
{
	int n = 0;
	int num = rand() % 100 + 1;//生成一个1-100范围内的随机数
	printf("请在键盘上输入您所猜的数字:>");
	while (1)
	{
		scanf("%d", &n);
		if (n > num)
			printf("猜大了,继续猜。\n");
		else if (n < num)
			printf("猜小了,继续猜。\n");
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}

int main()
{
	int i = 0;
	srand((unsigned)time(NULL));
	do
	{
		//打印游戏菜单
		menu();
		
		printf("请选择:>");
		scanf("%d", &i);
		switch (i)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			break;
		}
	} while (i);
	
	return 0;
}



 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值