C语言随机数字

本文详细介绍了如何用C语言实现一个猜数字游戏,涉及菜单设计、随机数生成(使用rand()和time())、用户输入处理和游戏逻辑。通过srand()确保随机性,提供了1-100的随机数范围,并设置了10次猜测机会。
摘要由CSDN通过智能技术生成

猜数字游戏实现

电脑随机生成一个1-100之间的数,输入你所猜测的数字,如果猜小了,则告诉你猜小了;如果猜大了,则告诉你猜大了;如果猜对了,则恭喜你猜对了。

首先游戏应该有一个游戏菜单,最简单的功能应该包括开始和结束游戏。

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

然后在主函数中,我们可以用一个do while函数实现游戏循环玩下去,通过switch case语句的配合进行模式的选择,输入1时开始游戏,输入0时退出游戏。

int n = 0;
	do
	{
		menu();
		printf("请选择\n");
		scanf("%d",&n);
		switch (n)
		{
		case 1:
			printf("操作成功,开始游戏!\n");
			break;
		case 0:
			printf("操作成功,退出游戏!\n");
			break;
		default:
			printf("选择错误,重新输入!\n");
			break;
		}

	} while (n);

接着就是随机数的生成,在C语言中有一个rand()函数可以生成一个随机数。

void game()
{
	//生成随机数
	int ret = rand();

}

但是rand函数生成的是伪随机数。rand函数其原理是在使用前调用srand函数设置随机数生成器,srand()函数输入一个种子则会输出一个随机数,但是如果种子相同则输出的随机数也相同。

例如
 

srand(1);

int ret=rand();

printf("%d",ret);

输出结果为ret=41恒不变那么就遇到一个问题,想要输出一个随机数则需要一个随机数,陷入到一个无解的循环中。

其实不然,我们只需要输入一个不断变化的数就可以生成不断变化的随机数了。通过time函数可以生成一个时间戳,时间戳代表的含义是当前机器的时间与计算机起始时间的差值。

并且我们只需要设置一次srand函数后,每次rand函数调用srand函数都会生成一个真随机数。

srand((unsigned int)time(NULL));

由于只需要设置一次,所以只要在使用rand函数前使用一次就可以了,不用放入到循环中。因此我们可以选择将其放入主函数中。

int main()
{
	int n = 0;
	srand((unsigned int)time(NULL));
    return 0;
 }

rand函数生成随机数的范围是0-RAND_MAX(32767),题目要求我们生成1-100的随机数,那么我们只需要对rand生成的随机数%100,就可以得到0-99,那么

int ret = rand()%100+1;

就可以得到1-100的随机数了。

接下来就是随机数的判断了,我们也可以把判断这一部分写到game函数里面,简化主函数。

int guess,i=0;
while (i<10)
	{
		printf("请输入猜测的数字\n");
		scanf("%d", &guess);
		if (guess > ret)
		{
			system("cls");
			printf("%d", guess);
			printf("猜大了\n");
			printf("剩余机会%d\n", 9 - i);
			i++;
		}
		else if (guess < ret)
		{
			system("cls");
			printf("%d", guess);
			printf("猜小了\n");
			printf("剩余机会%d\n", 9 - i);
			i++;
		}
		else
		{
			system("cls");
			printf("%d", guess);
			printf("恭喜你猜对了!\n");
			printf("所用次数%d\n", i);
			break;
		}
	}
	if (i == 10)
	{
		system("cls");
		printf("正确数字是%d\n", ret);
		printf("次数用光了,请下次努力!\n");
	}

在这里我给了玩家10次猜测的机会,如果都没有猜对的话就会结束游戏,开始下一局。

可以通过switch case进行难度设计,比如练习模式不设置次数上限,简单模式给二十次机会等等,都可以根据自身的想法去开发。

system("cls");是清屏函数,可以让屏幕看着更整洁。

代码如下

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

void game ();
void menu ();

int main()
{
	int n = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择\n");
		scanf("%d",&n);
		switch (n)
		{
		case 1:
			printf("操作成功,开始游戏!\n");
			game();
			break;
		case 0:
			printf("操作成功,退出游戏!\n");
			break;
		default:
			printf("选择错误,重新输入!\n");
			break;
		}

	} while (n);

	return 0;
 }

运行结果如下

d5d36c58ac9048fcb0b4a58f8cadd838.png

 662c747296804927baa3b4a84017813b.png

 13b387b1c5da4f959c3c3c137deb8a57.png

 8b2286d598ba4ee787ecd67ed90e69bb.png

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值