看看你的运气如何之猜数字游戏——C语言实现

游戏整体框架

        首先我们需要制作一个建议菜单:

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

        接着我们来思考游戏是怎么运行的,游戏开始或退出需要用户输入指令,我们可以使用switch语句,用户玩完一把游戏之后,我们可以让菜单再次出现,再次输入指令是否继续,这里使用do while 循环语句。

int main()
{
	srand((unsigned int)time(NULL));
	printf("欢迎来到猜数字游戏\n所猜数字的范围从 1 到 100\n");
	int input;
	do
	{
		menu();
		printf("请输入数字指令--->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			printf("现在您可以选择退出游戏或继续游玩\n");
			break;
		case 0:
			printf("退出游戏,欢迎您下次游玩。\n");
			break;
		default:
			printf("没有该指令,请重新输入--->\n");
			break;
		}
	} while (input);
	return 0;
}

        最后就是自由发挥了,这里我写了用户可以自行选择猜数数字的代码。如果用户输入的数字超过游戏范围,我这里会进行提醒操作。

随机数的生成

        这个游戏的精华就是随机数的生成了,下面我来介绍三个函数:

rand


rand是用来生成随机数的,头文件是stdlib.h
上面也有代码例子介绍如何使用。

rand()%100

%是取余,rand随机数生成的范围是:0~RAND_MAX(这个大小是由编译器决定的,大多数编译器时32767) %100就是生成0到99的数字,游戏里我设置时1到100的范围,就是说我们需要+1,这样就是生成1~100的随机数了。

int num = rand() % 100 + 1;//生成1到100的随机数

但是rand有一个缺陷:


       就是它并不是生成真正的随机数,也就是说这个数字并不随机,rand生成随机数时依赖相应的算法的,其中rand是以随机数种子为基准值来生产随机数的,所以只要种子是变化的,每次随机数就会不一样,这就需要下面两个函数的加持了。

srand


srand头文件也是stdlib.h
srand函数是来初始化随机数种子的,出现在调用rand 之前都会先调用srand,srand函数中的参数seed就是来设置随机数的种子的,所以只要让种子变化就可以实现随机了。如何让种子变化,请看time函数。

time

在程序中程序运行时间是变化的,因此我们考虑将程序运行的时间作为种子

time函数的头文件为time.h

代码实现

#define _CRT_SECURE_NO_WARNINGS 1

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

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

void game()
{
	int num = rand() % 100 + 1;//生成1到100的随机数
	int n = 0;
	
	printf("您可设置猜数的数字,请您输入猜数的次数--->");
	int cs = 0;
	do
	{
		scanf("%d", &cs);
		if (cs <= 0)
		{
			printf("我想您肯定在开玩笑,能重新输入一下猜数次数吗?\n请您输入猜数次数--->");
		}
	} while (cs <= 0);//确保用户输入的输入次数合法
	 
	int count = cs;
	printf("请您输入您心中所想的数字吧--->");
	while (count)
	{
		do
		{
			scanf("%d", &n);
			if (n <= 0 || n >= 100)
			{
				printf("输入数字有误,请您重新输入--->");
			}

		} while (n <= 0 && n > 100);// 确保用户输入正确的数字
		if (n > num)
		{
			printf("数字猜大了\n");
		}
		else if (n < num)
		{
			printf("数字猜小了\n");
		}
		else
		{
			printf("恭喜您猜对了,获得游戏胜利!!!\n");
			break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("真正的数字是 %d\n虽然游戏失败了,但您也要保持一颗快乐的心哦!\n欢迎您下次挑战.\n",num);
	}
}

int main()
{
	srand((unsigned int)time(NULL));
	printf("欢迎来到猜数字游戏\n所猜数字的范围从 1 到 100\n");
	int input;
	do
	{
		menu();
		printf("请输入数字指令--->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			printf("现在您可以选择退出游戏或继续游玩\n");
			break;
		case 0:
			printf("退出游戏,欢迎您下次游玩。\n");
			break;
		default:
			printf("没有该指令,请重新输入--->\n");
			break;
		}
	} while (input);
	return 0;
}
  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值