IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【小白系列】C语言 猜数字游戏 -> 正文阅读

[C++知识库]【小白系列】C语言 猜数字游戏

目录

1.前言

2.编写思路

3.代码实现

3.1菜单代码

3.2游戏代码

3.2-1 rand函数

3.2-2 srand 函数

3.2-3 time函数

4.注意事项

5.完整的猜数字游戏代码展示

6.结语



1.前言

?猜数字游戏游戏是一个简单有趣的游戏,相信大家在现实也会有一起玩过。通过一些简单的C语言代码,就能实现这个游戏。赶紧来看看吧!

2.编写思路

?首先作为一个小游戏,点开程序的时候就应该先玩一次,完成一次游戏后可以再选择玩或者不玩。那么由此我们想到了do while 循环作为起始语句。

其次需要一个菜单来提示玩家进行继续或结束游戏的提示,我们选择用简单的函数来实现。

接着玩家会不断地进行猜数字,程序需要告诉玩家猜大了还是猜小了。

最后玩家猜中数字,根据菜单来决定是否进行下一次游戏。

3.代码实现

?根据编写思路,我们可以简单构造出一个大体框架。

#include <stdio.h>
int main()
{
	int input = 0;
	do
	{
        //编写一个菜单函数
		nemu();
		printf("请选择:>");
		scanf("%d", &input);
        //根据玩家选择是否需要继续游戏
		switch (input)
		{
		case 1:
			printf("开始游戏\n");
			game();
			break;
		case 0:
			printf("游戏结束");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
    return 0;
}

接下来就是game函数的编写与nemu函数的编写,来充实我们游戏的主体内容。

3.1菜单代码

nemu函数起到一个提示玩家选择的作用,用printf即可实现,由于不需要返回值,所以nemu的类型是void。具体如下

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

3.2游戏代码

进入game函数后,我们需要程序生成一个随机数。然后玩家再去猜这个随机数。

那么程序如何实现每一次都生成一个完全随机的数字呢?

3.2-1 rand函数

rand函数需要引用<stdlib.h>才可以使用,功能随机生成一个数。那么这个数的范围是多少呢?答案是(0~32767)。我们的游戏不可能需要玩家猜那么大的数字!于是在使用rand函数后应该模上一个数,来圈定随机数的范围。

void game()
{
	//随机数命名为num  
	int num = 0;
	printf("请在0~100之间猜一个数字\n");
	num = rand() % 100 + 1;
	//此时num的范围在0~100
	while (1)
	{
        //玩家猜的数字k
		int k = 0;
		scanf("%d", &k);
		if (k < num)
			printf("猜小了\n");
		else if (k > num)
			printf("猜大了\n");
		else if(k = num)
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

用while即可实现之前我们所说的循环猜数字的功能,合理用break来打破循环,若不达到条件,则不会执行break语句,从而可以一直循环。while(1)这么写还是十分常见且实用的!

但是也存在一个问题,仔细调试的小伙伴们会发现,虽然程序中每次的随机数不同,但是再次打开程序,与上一次打开程序时,程序生成的随机数是相同的。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?那么这个猜数字小游戏在玩过一次后,就已经失去了随机性和趣味性。那么我们该怎么解决这个问题呢?我们不妨先去了解一下rand函数!!

?

?看得懂最好,看不懂也没关系。

总的来说rand函数使用之前,需要先调用srand函数来重置随机生成数起点。这样就能保证每一次打开程序所生成的随机数真正随机。

3.2-2 srand 函数

?*由于文章是面向小白,所有srand函数不会过多介绍。*

调用srand函数需要引用头文件<stdlib.h>功能重置随机生成数起点。需要注意的是srand()括号内需要一个unsigned int 类型的数值。如果括号内我们设置成常量。那么每次生成随机数的起点都会相同,同样达不到完全随机的效果。

void game()
{
    srand(1);
	//随机数命名为num  
	int num = 0;
	printf("请在0~100之间猜一个数字\n");
	num = rand() % 100 + 1;
	//此时num的范围在0~100
	while (1)
	{
        //玩家猜的数字k
		int k = 0;
		scanf("%d", &k);
		if (k < num)
			printf("猜小了\n");
		else if (k > num)
			printf("猜大了\n");
		else if(k = num)
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

所以我们需要一个每时每刻都在变化的一个变量,来放到srand的括号里,保持rand函数每一次的起点都不一样,才能真正达到完全随机的效果。

3.2-3 time函数

time函数,也叫时间戳 ,需要引用头文件<time.h>。这里介绍一下什么是时间戳:我们现实每一个时间与系统初始时间的差值叫做时间戳。时间戳是一串数字,一串无时无刻都在变的数字,这串数字可以转化成现实中的时间。知道这些,我们的问题也就能解决了!

void game()
{
srand((unsigned int)time(NULL));

	//随机数命名为num  
	int num = 0;
	printf("请在0~100之间猜一个数字\n");
	num = rand() % 100 + 1;
	//此时num的范围在0~100
	while (1)
	{
		int k = 0;
		scanf("%d", &k);
		if (k < num)
			printf("猜小了\n");
		else if (k > num)
			printf("猜大了\n");
		else if(k = num)
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

time()函数的返回类型是time_t,之前有提到srand()括号内需要一个unsigned int类型的变量,于是我们在time()前面加上(unsigned int)来强制转换数据类型。

另外time()括号里需要一个指针变量。但是我们不需要这个指针变量,只需要他生成的随机数,所以time()括号内可以放NULL空指针。

这样,rand()函数就可以真正的做到完全随机!game函数的功能也完全齐全!

4.注意事项

?srand函数只需要调用一次,如果每次使用rand函数前都调用srand函数,在循环足够快的情况下,还是有可能出现与srand()括号内放常量的那种重复情况!!!

5.完整的猜数字游戏代码展示

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


void nemu()
{
	printf("***********************************\n");
	printf("***********   1.play   ************\n");
	printf("***********   0.exit   ************\n");
	printf("***********************************\n");
}
void game()
{
srand((unsigned int)time(NULL));

	//随机数命名为num  
	int num = 0;
	printf("请在0~100之间猜一个数字\n");
	num = rand() % 100 + 1;
	//此时num的范围在0~100
	while (1)
	{
		int k = 0;
		scanf("%d", &k);
		if (k < num)
			printf("猜小了\n");
		else if (k > num)
			printf("猜大了\n");
		else if(k = num)
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	do
	{
		nemu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("开始游戏\n");
			game();
			break;
		case 0:
			printf("游戏结束");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
    return 0;
}

6.结语

?此次示例代码仅写出猜数字游戏的核心功能,且引用的各种函数讲解也不是很透彻。希望有兴趣的小伙伴可以继续完善游戏代码,写出属于自己的功能更完备的猜数字游戏!!

最后还是请大家多多支持,点赞,关注,收藏!!!

https://cplusplus.com/reference/? ps:这个是查阅rand函数时博主使用的网站,可以收藏一下哦!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:33:07  更:2022-09-30 00:34:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 5:59:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码