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~100以内猜数字游戏

一、猜数字的实现思路

?难点:随机数的产生和循环语句、分支语句的运用

二、随机数的产生

? ? ? ? 2.1 函数 int rand(void):生成一个随机的整数,范围为0~RAND_MAX(具体指看编译器)不需要 ??????????????????????????????????????参数,函数返回类型为整型

函数的具体简介:

?

?????????但这样产生的随机数在每次执行代码时产生的随机数一致。这样每次所猜数字的值都一样,那这个游戏就没有趣味性了。例:

? ? ? ? ?根据我们的需求,我们需要的随机数需要完全随机,没有规律可言,这里我们就可以将随机数与时间结合起来,时间是在不断改变的,这里就产生了时间戳的概念。怎样才能将时间和产生的随机数结合起来呢?

? ? ? ? 查看?rand()函数的用法,在调用 rand()函数之前可以调用 srand()来?生成随机数的生成器。

? ? ? ? 2.2 函数 void srand(unsigned int seed):该函数没有返回值,传参的时候需要传一个无符号的整形。?函数作用是设置一个随机开始的起点,如果每次运用该函数都需要进行传参,那么每需要一个随机数就要传一个数字,这样就不方便。例:


int main()
{
	srand(999);
	int ret = rand();
	printf("%d\n", ret);
	return 0;
}

? ? ? ? 所以我们需要传一个值,这个值会不断地变化,这样就可以联想到时间是不断地改变。

????????时间戳:每一个时间相对应计算机起始时间的差值,单位是秒,只要时间改变,对应的时间戳就在改变。可以通俗地理解为每一个时间对应一个不同的数值。

? ? ? ? 2.3 生成时间戳:需要用到 time_t time( time_t *timer ) 函数

time_t time( time_t *timer )函数:函数的返回值就是时间戳,其类型是,返回的就是时间戳,需? ? ??????????????????????????????????????????????????????要传参的是一个指针,如果不需要用参数的时候可以传一个空? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 指针NULL

time_t:是C语言规定的一种类型,是一个long long的整型

? ? ? ? ?我们在对srand传参的时候需要传一个无符号的整型,所以需要对time的返回值进行强制类型转换。产生随机数的代码为:

#include<time.h>
#include<stdlib.h>
int main()
{
	srand((unsigned int)time(NULL));
	int i= 0;
	for (i = 1; i <= 10; i++)
	{
		int ret = rand();
		printf("第%d个随机值为:%d\n",i, ret);
	}
	return 0;
}

?随机数:

三、游戏代码思路

????????1.打印游戏菜单界面

????????2选择是否玩游戏,选择是否不符合选项

????????3.猜数字,与生成的随机数进行比较

????????4.游戏结束,再次选择是否玩游戏

代码:

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

void menu()
{
	printf("*************************\n");
	printf("******* 0.退出游戏 ******\n");
	printf("******* 1.开始游戏 ******\n");
	printf("*************************\n");
}

void game()
{
	int n = 0;
	int ret = rand()%100+1;
	while (1)
	{
		printf("请猜数字>:");
		scanf("%d", &n);
		if (n > ret)
		{
			printf("猜大了\n");
		}
		else if (n < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了!!!\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
			case 0:
				printf("退出游戏\n");
				break;
			case 1:
				game();
				break;
			default:
				printf("选择错误,请重新选择\n");
				break;
		}

	} while (input);
	return 0;
}

四、带有关机惩罚的猜数字游戏

? ? ? ? 若猜数字5次以后还没有猜中,将进入惩罚。

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

void menu()
{
	printf("*************************\n");
	printf("******* 0.退出游戏 ******\n");
	printf("******* 1.开始游戏 ******\n");
	printf("*************************\n");
}

void game()
{
	int n = 0;
	int i = 5;
	int ret = rand()%100+1;
	while (i)
	{
		printf("请猜数字>:");
		scanf("%d", &n);
		i--;                                    //用来调整while()中真假
		if (n > ret && 0 != i)
		{
			printf("猜大了,你还有%d次机会\n",i);
		}
		else if (n < ret && 0 != i)
		{
			printf("猜小了,你还有%d次机会\n", i);
		}
		else if(n==ret)
		{
			printf("恭喜你,猜对了!!!\n");
			break;
		}
		if (i == 0)
		{
			char arr[20] = { 0 };
			printf("5次机会已经用完,你的电脑将在30秒后关机,输入“我是猪”后取消关机\n");
			system("shutdown -s -t 30");
			while (1)
			{
				scanf("%s", arr);
				if (strcmp(arr, "我是猪") == 0)
				{
					system("shutdown -a");
					break;
				}
				else
				{
					printf("回答错误\n");
				}
			}
		}
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
			case 0:
				printf("退出游戏\n");
				break;
			case 1:
				game();
				break;
			default:
				printf("选择错误,请重新选择\n");
				break;
		}

	} while (input);
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:37:15  更:2022-07-04 22:37:39 
 
开发: 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/12 11:11:16-

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