猜数字小游戏代码及解析

目录

一.题目

二.分析

1.产生随机数

(一)rand()函数

(二)srand()函数

(三)time()函数

2.游戏主界面

3.游戏主体

4.代码实现

三.代码优化


一.题目

        生成100到200之间的数字,玩家进行猜数字,直到猜对才算成功

二.分析

1.产生随机数

(一)rand()函数

生成随机数需要用到rand函数,它属于库函数,因此我们需要加一个头文件,叫#include<stdlib.h>。然而rand函数生成的随机数是伪随机数,如图:

第一次运行:

第二次运行结果:

经过俩次运行产生的随机数都是一样的,这就是伪随机数,一旦第一次产生了随机数,以后不管运行多少次都是这个问题,这就涉及到了种子,因为rand()函数种子默认为0,所以产生的随机数每次都一样。改变种子就涉及到srand函数

(二)srand()函数

srand函数形式如下:

srand(unsigned int seed)

使用rand函数的前提就是srand函数里面的种子是随机的,当种子随机那么rand函数产生的就是真正的随机数,想要种子随机,那又涉及到time函数了

(三)time()函数

time()函数对应的头文件是#include<time.h>,当time函数的参数是一个空指针,也就是time(NULL)时它会返回一个时间戳,也就是当前程序运行时间与1970年1月1日0分0秒的差值

2.游戏主界面

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

3.游戏主体

void game()
{
	int r = rand() % 101 + 100;
	int guess = 0;
	while (1)
	{
		printf("请输入数字:\n");
		scanf("%d", &guess);
		if (guess > r)
		{
			printf("猜大了\n");
		}
		else if (guess < r)
		{
			printf("猜小了:\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}

4.代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("************************\n");
	printf("******** 1. paly *******\n");
	printf("*********0. exit *******\n");
	printf("************************\n");
}
void game()
{
	int r = rand() % 101 + 100;
	int guess = 0;
	while (1)
	{
		printf("请输入数字:\n");
		scanf("%d", &guess);
		if (guess > r)
		{
			printf("猜大了\n");
		}
		else if (guess < r)
		{
			printf("猜小了:\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("选择错误,请重新选择:\n");
			break;
		}
	} while (input);
	return 0;
}

运行结果:

三.代码优化

加入次数限制

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("************************\n");
	printf("******** 1. paly *******\n");
	printf("*********0. exit *******\n");
	printf("************************\n");
}
void game()
{
	int r = rand() % 101 + 100;
	int guess = 0,count=5;
	while (count)
	{
		printf("请输入数字:\n");
		printf("你还有%d次机会", count);
		scanf("%d", &guess);
		if (guess > r)
		{
			printf("猜大了\n");
		}
		else if (guess < r)
		{
			printf("猜小了:\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
		count--;
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("选择错误,请重新选择:\n");
			break;
		}
	} while (input);
	return 0;
}

运行结果:

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值