文章目录

  • 初级版本
  • 中级版本
  • 高级版本
  • 总结

初级版本

什么是幸运数字游戏呢?就是说在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到9while (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 10void 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语言实现找幸运数字游戏,很有趣的喔相关推荐

  1. 1到100猜数字游戏规则c语言,[C语言课程设计猜数字游戏1.doc

    [C语言课程设计猜数字游戏1 课 程 设 计 报 告 课程名称 C语言程序设计报告 课题名称 猜数字游戏 专 业 电气工程及其自动化 班 级 1104 学 号 33 姓 名 张腾 指导教师 黄晓宇 丁 ...

  2. C语言习题:猜数字游戏(C语言随机数)

    C语言习题:猜数字游戏(C语言随机数) 需要了解C语言随机数的生成方法: 在C语言中比较常用的随机函数是 rand 函数,它可以随机的产生 0 ~ rand_max 的随机数,定义类型不同最大值也不同 ...

  3. c语言课程设计猜数字游戏报告,C语言课程设计-猜数字游戏报告.doc

    C语言课程设计-猜数字游戏报告 摘要 该软件在Windows系统上为玩家提供猜数字游戏的基本功能,游戏用户可以选择开始游.排行榜查看.帮助等主要功能.当用户选择开始游戏时,系统会提示用户排行榜上猜数字 ...

  4. c语言课程设计猜数字游戏报告,C语言课程设计猜数字游戏报告

    C语言课程设计猜数字游戏报告 C 语言课程设计----猜数字1摘 要该 软 件 在 Windows 系 统 上 为 玩 家 提 供 猜 数 字 游 戏的 基 本 功 能 , 游 戏 用 户 可 以 选 ...

  5. 第七课511遇见易语言大漠找色FindCloer游戏外挂实例

    第七课511遇见易语言大漠找色FindCloer游戏外挂实例 主要是讲解透明图的制作和适用范围 和找图函数的使用 没什么可说的 小知识:阿莫综合工具制作透明图的流程 大漠综合工具 载入图片后 放大 选 ...

  6. c语言编写一个猜数字游戏编写

    1.C语言实现猜数字游戏: #define _CRT_SECURE_NO_WARNINGS//猜数字游戏: // 1.由电脑自动生成一个随机数字 // 2.猜数字#include <stdio. ...

  7. 猜数字小c语言游戏课程任务书,C语言课程设计猜数字游戏姚成.doc

    课 程 设 计 报 告 课程名称 C语言程序设计报告 课题名称 猜数字游戏 专 业 电气工程及其自动化 班 级 1104 学 号 23 姓 名 姚成 指导教师 黄晓宇 丁敬忠 谭小兰 2012年 6月 ...

  8. c语言实现通讯录_C语言实现双人猜数字游戏

    点击上方"学士科技",选择"设为星标" 资讯.技术干货第一时间送达! C语言合集(基础.进阶.高级)通通有,点我点我      C语言实例 01.C语言编写简单 ...

  9. 如何用c语言实现【猜数字游戏】

    万里寻山历百艰而, 一朝见井纵九死以何辞. 不吃学习的苦,  就要吃生活的苦. 目录 ⌚一.前言 ⏰二.游戏逻辑 ⏳三.思维导图 ☎️四.游戏过程 ✒️ 五.代码分析 ⛳1.生成随机数的方法​ ⛳2. ...

最新文章

  1. 学python需要安装什么软件-学武汉Python培训课程需要安装什么软件?分享这10款...
  2. Oracle存储过程和存储函数创建
  3. 【问链-EOS公开课】第八课 EOS 数据库与持久化 API(一)
  4. 如何在CDN边缘节点执行你的JavaScript?
  5. 李彦宏:百度智能汽车预计2023年和大家见面
  6. Tomcat学习总结(13)—— Tomcat常用参数配置说明
  7. Atitit.并发编程原理与概论 attilax总结
  8. 洛谷P1005 矩阵取数游戏
  9. 中国气象数据(站点)
  10. 文本去重:sim哈希算法
  11. PHP爬虫最全总结1
  12. mysql多对多表设计_数据库怎么设计多对多的数据表
  13. 【无人机 学习笔记 2】无人机导航制导与控制
  14. 云计算供应商在合同谈判时可能拒绝的三个事项以及要求
  15. 骨传导耳机哪个好、骨传导耳机最新品牌推荐
  16. 【Python问题解决】---- ERROR: Could not install packages due to an OSError: [WinError 2] 系统找不到指定的文件。
  17. 解决viewer.js预览PDF文件 无法展示PDF水印的问题
  18. 微信朋友圈里,微信群里的早报新闻简报都是哪里来的呢?
  19. 常用的http状态码 状态码大全 常见的状态码
  20. TongWeb7微服务适配方案

热门文章

  1. 看懂平安的科技转型,等于看懂中国未来二十年的走向
  2. Visual C++全能速查宝典
  3. F1-F12按了没反应解决方法
  4. photoshop第十三章:制作人生特定时期场合效果
  5. dnf服务器未响应win7,win7系统dnf经常未响应的解决方法
  6. k8s_day06_03
  7. 流动性因子(Liquidity Factor)——投资组合分析(EAP.portfolio_analysis)
  8. html 搜索框输入法闪退,惊喜!我终于找到了一款真正不闪退的第三方输入法!...
  9. struts2 web应用框架的简单搭建步骤
  10. 英语学习打卡day7