【C语言初阶】 猜数字游戏的简单实现

目录

 

猜数字游戏的实现要求

设计步骤

一、设计游戏菜单

二、随机数的产生

1、rand()

2、scrand()

3、使用rand()和srand()产生指定范围内的随机整数的方法“模除+加法”的方法

三、游戏部分的实现

四、main()函数

完整代码


 

猜数字游戏的实现要求

1.有一个游戏菜单,可供使用者选择是否要玩游戏;

2.可供使用者重复游玩;

3.程序每次产生的数字随机;

4.所生成的随机数在1-100;

5.在每一个使用者输入数字后可以做出判断并给出相应的提示;

设计步骤

一、设计游戏菜单

游戏菜单应有游戏名称;游戏选项;游戏注意事项等。设计代码如下


void mean()//创建函数,输出游戏菜单
{
	system("cls");
	printf("***********猜数字游戏**********\n");
	printf("*******************************\n");
	printf("******1.玩游戏 0.退出游戏******\n");
	printf("*******************************\n");
	printf("注意:所猜数字应位于1-100!!!\n");
}

system("cls"); 是为了实现在每一次游戏结束后实现清屏操作;需要引入头文件#include<stdlib.h>或#include<windows.h> 

二、随机数的产生

1、rand()

此数字游戏实现的最大难点之一就在产生1-100的随机数,这里我们引入一个rand()函数,在使用函数rand()需要引入头文件#include<stdlib.h>

rand()函数用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。rand()会返回一个范围在0到RAND_MAX(至少是32767)之间的伪随机数(整数)。在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同

rand()函数原型:int rand(void);
使用rand()函数产生1-100以内的随机整数:int number1 = rand() % 100+1;

	RAND_MAX;//搭配rand()使用,可产生0-32767的随机数;
	//由于rand()每次产生的随机数是固定的所以还需要搭配srand()使用,
	rand();
	int b = rand() % 100 + 1;//模100+1为了产生1-100的数

2、scrand()

由于rand()产生的是伪随机数,所以还需要引入srand()函数,srand()的头文件依旧是nclude<stdlib.h>   srand()函数原型为 void scrand (usigned int seed);

srand()用来设置rand()产生随机数时的随机数种子。参数seed是整数,通常可以利用time(0)或getpid(0)的返回值作为seed。

使用time时要引用头文件#include<time.h>

	srand((unsigned int)time(NULL));//unsigned int为srand()函数原型,这儿为强制类型转换;
	//time为一个时间戳,目的是为使srand()返回rand()内为一个随机值
	//srand()只需要使用一次就好,如果放入循环中,则每循环一次都会调用一次,循环过快的话,会产生相同的返回值

3、使用rand()和srand()产生指定范围内的随机整数的方法“模除+加法”的方法

因为,对于任意数,0<=rand()%(n-m+1)<=n-m

因此,0+m<=rand()%(n-m+1)+m<=n-m+m
因此,如要产生[m,n]范围内的随机数num,可用:

num=rand()%(n-m+1)+mint;
其中的rand()%(n-m+1)+m算是一个公式,记录一下方便以后查阅。
比如产生10~30的随机整数:

srand(time(0));
int a = rand() % (21)+10;

三、游戏部分的实现

随机数部分已经实现,则接下来需要解决怎样判断用户输入数是否为那个数,并给出相应回应。

实现代码如下

void game()
{
	int c = 1;
	int put = 0;
	RAND_MAX;//搭配rand()使用,可产生0-32767的随机数;
	//由于rand()每次产生的随机数是固定的所以还需要搭配srand()使用,
	rand();
	int b = rand() % 100 + 1;//模100+1为了产生1-100的数
	do {
		printf("请输入你猜的数字:>");
		scanf("%d", &put);
		if (put > b)
		{
			printf("猜大了\n");
		}
		if (put < b)
		{
			printf("猜小了\n");
		}
		if (put == b)
		{
			printf("恭喜你,猜对了!!!\n");
			 c = 0;//为了结束循环
		}
	}
	while (c);
	getchar();//为了吃掉所输入最后一个数字后面回车;
	getchar();//吃掉一个回车,防止清屏操作太快;
}

四、main()函数

该游戏所需要的函数都已实现,则接下来则需要把我们所需要的函数组合起来;

实现代码如下:

int main()
{
	int a = 0;
	srand((unsigned int)time(NULL));//unsigned int为srand()函数原型,这儿为强制类型转换;
	//time为一个时间戳,目的是为使srand()返回rand()内为一个随机值
	//srand()只需要使用一次就好,如果放入循环中,则每循环一次都会调用一次,循环过快的话,会产生相同的返回值;
	do {
		mean();
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default: printf("输入错误,请重新输入\n");
		}
	} while (a);//若a=0,则结束循环,退出游戏;
	return 0;

}

至此为止,猜数字游戏已经简单实现了。后附完整代码

完整代码

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


void mean()//创建函数,输出游戏菜单
{
	system("cls");
	printf("***********猜数字游戏**********\n");
	printf("*******************************\n");
	printf("******1.玩游戏 0.退出游戏******\n");
	printf("*******************************\n");
	printf("注意:所猜数字应位于1-100!!!\n");
}

void game()
{
	int c = 1;
	int put = 0;
	RAND_MAX;//搭配rand()使用,可产生0-32767的随机数;
	//由于rand()每次产生的随机数是固定的所以还需要搭配srand()使用,
	rand();
	int b = rand() % 100 + 1;//模100+1为了产生1-100的数
	do {
		printf("请输入你猜的数字:>");
		scanf("%d", &put);
		if (put > b)
		{
			printf("猜大了\n");
		}
		if (put < b)
		{
			printf("猜小了\n");
		}
		if (put == b)
		{
			printf("恭喜你,猜对了!!!\n");
			 c = 0;//为了结束循环
		}
	}
	while (c);
	getchar();//为了吃掉所输入最后一个数字后面回车;
	getchar();//吃掉一个回车,防止清屏操作太快;
}

int main()
{
	int a = 0;
	srand((unsigned int)time(NULL));//unsigned int为srand()函数原型,这儿为强制类型转换;
	//time为一个时间戳,目的是为使srand()返回rand()内为一个随机值
	//srand()只需要使用一次就好,如果放入循环中,则每循环一次都会调用一次,循环过快的话,会产生相同的返回值;
	do {
		mean();
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default: printf("输入错误,请重新输入\n");
		}
	} while (a);//若a=0,则结束循环,退出游戏;
	return 0;

}




                               

                                      

 

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇事问春风乄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值