【趣学】C语言猜数字游戏

目录

一、前言

二、从游戏初始界面开始

三、游戏实现

①rand函数

②srand函数

③时间戳

④time函数


一、前言

学习的过程有时候会有些许枯燥,但换一种方式学习也算是一种有趣的事情,呀哈,写个代码玩玩,

[操作度:易

[涉及知识有:函数调用+循环结构do.while()+选择判断分支+switch语句

游戏大概就是这个样子,简简易易猜数字游戏^-^

[游戏设计需求:

 1.电脑随机生产一个数字(1~100)
 2.玩家猜数字
    猜大了,电脑提示猜大了,猜小了,电脑提示猜小了
 3.游戏可以一直玩,并且可以玩很多次,玩完之后可选择继续玩

以下为飞机游戏全部的代码,大家可以直接拷贝运行:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{   
	printf("*********************\n");
	printf("****  猜数字游戏 ****\n");
	printf("****-------------****\n");
	printf("****   1.play    ****\n");
	printf("****   0.exit    ****\n");
	printf("*********************\n");
}
//猜数字游戏的实现
void game()
{
	int guess = 0;
	//1.生成一个随机数
	int ret = 0;
	ret = rand()%100+1;
	//2.猜数字
	printf("现在来猜数字:>\n");
	while (1)
	{
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了哟,hhhhhhhhhh\n");
		}
		else if (guess > ret)
		{
			printf("大了大了,再想想再想想~\n");
		}
		else
		{
			printf("恭喜你,猜对了,棒极了!!\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请选择:->\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("好耶!!我出一个数字,你来猜\n");
			game();
			break;
		case 0:
			printf("已退出游戏,咱们下次再玩吧~\n");
			break;
		default:
			printf("请输入1或0,1开始游戏,0退出游戏\n");
			break;
		}
	} while (input);
	return 0;
}

如果想要更了解清楚的,让我们一起继续看下去吧~ 说不定会有更厉害的同学将游戏改进,期待~对于俺,将我了解的一些东西用自己的语言复述一遍,也是一件有意思的事情


二、从游戏初始界面开始

一款游戏是可以玩很多次的,没玩够继续玩,所以主函数中出现循环,游戏进入之后会出现一个菜单,我们可以选择玩,也可以选择退出,菜单至少出现一次,用do.while()语句perfect

int main()
{
	do
	{
		menu();
		
	} while ();
	return 0;
}

menu函数:

void menu()
{   
	printf("*********************\n");
	printf("****  猜数字游戏 ****\n");
	printf("****-------------****\n");
	printf("****   1.play    ****\n");
	printf("****   0.exit    ****\n");
	printf("*********************\n");
}

菜单有了,接下来解决输入的问题,输入1,开始游戏,输入0,退出游戏(这里不能真正的做到退出游戏,准确的说是程序结束),输入的不是1,也不是0,是其他的数怎么办?12、13、14、15……好家伙,这么多情况,嘿嘿,那用switch语句好了,多分支,所以我们的主函数变成了这样:

int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请选择:->\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("好耶!!我出一个数字,你来猜\n");
			game();
			break;
		case 0:
			printf("已退出游戏,咱们下次再玩吧~\n");
			break;
		default:
			printf("请输入1或0,1开始游戏,0退出游戏\n");
			break;
		}
	} while (input);
	return 0;
}

 在这里,其实有个很小Q的点,1代表玩游戏,0代表退出游戏,input是输入的数,当input为非0的时候,循环继续,当input为0的时候,循环才会终止,也就是说,只要我们输入0的时候,程序就彻底的结束了,即退出游戏,输入其他的非0数,游戏还可以玩,输入如果还不是1的话,菜单也会在打印一次,提示正确输入,输入1才可以开始游戏。

如果假设输入非0的数字代表退出游戏,如:1是play  , 2是exit  ,那输入2的时候,程序并不会结束,要想实现退出游戏就变得麻烦了,可以去试一下,


三、游戏实现

模块化程序,自己写的方便,有思路,易于找问题,后续修改,别人看也更方便

最重要的灵魂,游戏实现部分用的也是一个函数

//猜数字游戏的实现
void game()
{
	int guess = 0;
	//1.生成一个随机数
	int ret = 0;
	ret = rand()%100+1;
	//2.猜数字
	printf("现在来猜数字:>\n");
	while (1)
	{
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了哟,hhhhhhhhhh\n");
		}
		else if (guess > ret)
		{
			printf("大了大了,再想想再想想~\n");
		}
		else
		{
			printf("恭喜你,猜对了,棒极了!!\n");
			break;
		}
	}
}

那怎样电脑生成一个随机数?

不急,慢慢来~

①rand函数

C语言中提供了一个生成随机数的函数——rand()函数

在cplusplus官网上查到的rand这个库函数的介绍

 像各大网站,一般都是英文,后台挂个翻译器,慢慢习惯,就阔以理解了

rand函数:

效果是返回一个随机值,类型是int ,头文件是<stdlib.h> ,随机值的范围是0~RAND_MAX ,

RAND_MAX 相当于十进制的32767

rand() % 100

任何数 %100 得到的数是0~99之间的数,

rand() % 100 + 1 之后,

得到的数是0~100之间的数,也就是我们想要需要的随机数范围

rand函数使用的经典例子:

 用法:

在调用rand函数之前  调用srand函数  效果是生成随机数生成器


②srand函数

简单介绍一下,

srand函数需要的是一个整型 ,(unsigned int)

如果传给srand函数的数是同一个数,那么rand函数生成的随机数是相同的, 

给srand函数传100,运行如下:

给srand函数传200,运行如下: 

 

 总结:

如果rand函数想要返回一个随机值,需要传给srand函数的也是一个随机值,一个一直在变化的数,

问题来了,我们想要一个随机值,需要一个随机值,即用一个随机值产生一个随机值,啊这这这……

难不倒咱,

电脑上的时间是不是一直在变化的呀? yep ,

这里引用  时间戳


③时间戳

C语言提供了一个函数time,返回一个时间戳


④time函数

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

time函数的头文件是<time.h>


改进:

将srand函数放在主函数,因为整个程序中只需要调用一次srand函数,

这样可以使随机数更随机 


每天进步一点点

趁着春节,快和家里人一起玩这个小游戏吧~

好玩好玩,体验一下不一样的游戏,

 今天的博客就到这告一段落了,

求赞,求转发,求关注~

猜你喜欢

转载自blog.csdn.net/weixin_60777483/article/details/122783818
今日推荐