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到10中找到缺少的数字
比如:1、2、3、4、6、7、8、9、10 缺少的是5
那么我们怎么创建呢?
我们要在一组数字中找到缺少的数字,并且要找很多次才能结束,而不是找一次就够了。所以我们创建两个数组,一个完整数字的初始数组(如1到10),一个目标数组,然后创建10以内的随机值。如果数组的下标等于随机值,我们就不往目标数组里面放,否则就往目标数组里面放数字。
总的来说就是复制数组时跳过一个数组的元素,然后打印目标数组元素就会缺少一个数字了。
但是怎么产生随机值呢?如果不了解的朋友阔以看看我这篇文章:猜数字游戏,里面有讲解哈。
代码如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include <time.h>
#include <stdio.h>
#define MAX 10   //定义程序启动一次就玩10组

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int a[9] = { 0 };
	double tmp = 0;
	srand((unsigned long)time(NULL));  //时间戳(种子)
	int stage = 0;
	int y = 0;
	for (stage = 0; stage < MAX; stage++)  //控制玩10次
	{
		int i = 0, j = 0;
		int x = rand() % 10;  //控制随机值产生范围1到9
		while (i < 10)
		{
			if (x != i)
			{
				a[j] = arr[i];  //如果下标不等于随机值,就往a数组里面复制
				j++;   //放完之后,自增1为下次放做准备
			}
			i++;
		}
		printf("请找出下面缺少的数字:\n");
		for (i = 0; i < 9; i++)
		{
			printf("%d ", a[i]);
		}
		printf("\n\n");
		do     //控制找到正确的为止,否则一直找
		{
			scanf("%d", &y);
			if (arr[x] != y)
			{
				printf("找错了,请重新输入:");
			}
		} while (arr[x] != y);
	}
		return 0;
}

图片分析:
在这里插入图片描述
程序运行结果如下:
在这里插入图片描述

中级版本

问题来了,我们找出缺少的数字不难,但是怎么区分快慢呢?我们玩游戏玩多了肯定有熟练嘛
有的人第一次用了50秒才全部找出来了,第二次用20秒就找出来。速度明显提升很快嘛,那怎么样才能看到进步呢?不错,就是看用的时间长短。
我们阔以用clock函数来统计我们用的时间。
用法如下:

C库函数clock()
头文件#include <time.h>
声明clock_t clock(void)
功能求处理器调用某个进程所花费的时间
描述C 库函数 clock_t clock(void) 返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。为了获取 CPU 所使用的秒数,您需要除以 CLOCKS_PER_SEC。
返回值该函数返回自程序启动起,处理器时钟所使用的时间。如果失败,则返回 -1 值。在 32 位系统中,CLOCKS_PER_SEC 等于 1000000,该函数大约每 72 分钟会返回相同的值

还有我们用到了clock_t 这样的类型,其实种类型是头文件 time.h 中已经定义了,其实就是unsigned类型,所以我们只需要设两个clock_t 变量就阔以了。

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX 10   //定义程序启动一次就玩10
int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int a[9] = { 0 };
	double tmp = 0;
	clock_t start = 0, end = 0;
	srand((unsigned long)time(NULL));
	int stage = 0;
	int y = 0;
	start = clock();     //设置程序运行到这里用的时间
	for (stage = 0; stage < MAX; stage++)
	{
		int i = 0, j = 0;
		int x = rand() % 10;
		while (i < 10)
		{
			if (x != i)
			{
				a[j] = arr[i];
				j++;
			}
			i++;
		}
		printf("请找出下面缺少的数字:\n");
		for (i = 0; i < 9; i++)
		{
			printf("%d ", a[i]);
		}
		
		printf("\n");
	do
	{
	    scanf("%d", &y);
		if (arr[x] != y)
		{
			printf("找错了,请重新输入:");
		}
	} while (arr[x] != y);

}
	end = clock();  //设置程序运行到这里用的时间
    tmp = (end - start)/CLOCKS_PER_SEC;   //用游戏运行完后的时间减去开始的时间就是玩游戏的时间
	printf("用的时间为:%.1f秒\n", tmp);
	if (tmp > 35.0)
	{
		printf("反应太慢了\n");
	}
	else if (tmp > 30.0)
	{
		printf("反应有点慢呀\n");
	}
	else if (tmp > 20.0)
	{
		printf("反应还阔以\n");
	}
	else
	{
		printf("反应太快了吧\n");
	}
	return 0;
}

图片解析如下:
在这里插入图片描述
程序运行结果:
在这里插入图片描述

高级版本

我们玩游戏过程似乎发现有个问题,那就是数字1到10是有顺序的,我们玩多了找的就越来越快,对我们训练提升不大。所以我们想办法把1到10的数字打乱一下,令我们的难度增大一点
那怎么实现呢?思路如下:
我们前面已经实现了抽调一个数字的数字,我们把数字的元素打乱重新排列
从a[0] ~ a[8]中随机选择一个元素和a[8]进行交换
从a[0] ~ a[7]中随机选择一个元素和a[7]进行交换
从a[0] ~ a[6]中随机选择一个元素和a[6]进行交换
从a[0] ~ a[5]中随机选择一个元素和a[5]进行交换
·····
图片解析:
在这里插入图片描述

我们通过产生随机值下标 j 和a[i] 进行交换,如果碰巧i 等于 j 那就不交换。
过程代码如下:

		for (i = 8; i >= 0; i--)
		{
			int j = rand() % (i + 1);   //产生小于或者等于i的随机值
			if (j != i)  //不相等才交换
			{
				int tmp = a[j];
				a[j] = a[i];
				a[i] = tmp;
			}
		}

而且我们还要玩很多把,所以再建立一个菜单让我们选择还玩不玩。
最后再把我们的函数封装成一个模块就阔以了。
最终代码如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX 10

void menu()
{
	printf("***********************************\n");
	printf("****     1.玩幸运数字游戏  ********\n");
	printf("****     0.退出游戏        ********\n");
	printf("***********************************\n");

}

void fun(int x)
{
	if (x > 55.0)
	{
		printf("反应太慢了\n");
	}
	else if (x > 50.0)
	{
		printf("反应有点慢呀\n");
	}
	else if (x > 40.0)
	{
		printf("反应还阔以\n");
	}
	else
	{
		printf("反应太快了吧\n");
	}
}
void Game()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int a[9] = { 0 };
	double tmp = 0;
	clock_t start = 0, end = 0;
	srand((unsigned long)time(NULL));
	int stage = 0;
	int y = 0;
	start = clock();
	for (stage = 0; stage < MAX; stage++)
	{
		int i = 0, j = 0;
		int x = rand() % 10;
		while (i < 10)
		{
			if (x != i)
			{
				a[j] = arr[i];
				j++;
			}
			i++;
		}
		for (i = 8; i >= 0; i--)
		{
			int j = rand() % (i + 1);
			if (j != i)
			{
				int tmp = a[j];
				a[j] = a[i];
				a[i] = tmp;
			}
		}
		printf("请找出下面缺少的数字:\n");
		for (i = 0; i < 9; i++)
		{
			printf("%d ", a[i]);
		}

		printf("\n");
		do
		{
			scanf("%d", &y);
			if (arr[x] != y)
			{
				printf("找错了,请重新输入:");
			}
		} while (arr[x] != y);

	}
	end = clock();
	tmp = (end - start) / CLOCKS_PER_SEC;
	printf("用的时间为:%.1f秒\n", tmp);
	fun(tmp);
}

int main()
{
	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;
}

游戏游戏结果:
在这里插入图片描述

总结

这就是幸运数字游戏的一步步演变了,我们做游戏过程中运用了很多的库函数,让我们学习到了很多新的东西,大家还要什么想法或者改进的地方欢迎在评论区探讨哦。

在这里插入图片描述

都看到这里了,来点个赞咯。

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

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