当前位置: 首页 > news >正文

【C语言】寻找隐藏字母游戏

编程实现一个游戏程序,会将连续三个字母中的一个隐去,由玩家填写隐去的那个字母,如屏幕上显示A ? C,则玩家需要输入B;屏幕上显示?B C,则玩家需要输入A。记录玩家完成20次游戏的时间以及正确率。

🍂1.实现连续三个字母出现

如何能让三个字母出现呢?
三个连续的字母的特点是ASCII码值成比例
只要列出三个成比例的数字然后它们对应的是字母即可。
那怎么找到三个成比例的数字呢?
我们可以利用rand()函数生成随机值,让随机值模上3便可以生成0-2之间的数字,而让0对应着第一个字母,1对应着第二个字母,2对应着第三个字母。如果rand()%3结果为0则让第一个字母为?其他字母显示,让玩家猜出这个?字母,而当rand()%3结果为1,则让第二个字母为?,第一个和第三个字母显示。如果rand()%3结果为2,则让第三个字母为?第1个和第2个字母显示。
但是使用rand()生成的值却是一个不变的随机值,我们需要一个生成不断变化随机值,这时就需要time来生成一个随机种子了
srand((unsigned int)time(NULL))time的参数是NULL,返回值为unsigned int类型。
这样就可以生成随机值了。
那对应关系我们知道了,还需要让连续字母出现也需要用到rand
rand()%24+'A'就可以生成随机字母了然后再与0,1,2对应就可以了。

 position = rand()%3+'0';    // 随机隐藏的位置0,1,2character = rand()%24+'A';  // 随机出现的第一个字母 A-Xprintf("----- Round %d -----\n", i+1);if (position == '0')//0对应着第一个字母  {answer = character;printf("? %c %c\n", character+1, character+2);} else if (position == '1') //1对应着第2个字母{answer = character + 1;printf("%c ? %c\n", character, character+2);} else if (position == '2')//3对应着第3个字母 {answer = character + 2;printf("%c %c ?\n", character, character+1);}

🍃2.确定游戏时间与准确率

我们可以利用time_t类型来定义两个变量start,end。
用来记录开始时间和结束时间。
第一次使用time(NULL),可以进行计时,而第二次再使用time(NULL),计时便停止下来。
所以我们可以在游戏开始之前进行计时,当20把游戏结束后进行计时结束。
start=time(NULL)开始计时
end=time(NULL)停止计时

如何确定准确率呢,肯定需要知道答对还是没答对,定义一个count;
用来记录答对的次数,每次答对则进行++。
而正确率的计算就是正确的个数/比赛的次数。

🍀3.猜字母操作

这里我们玩家需要猜出?是什么字母,将要写的字母输入电脑中,然后进行比较
不过我们需要注意的是:输入这个操作是要循环20次,所以就要考虑scanf函数的空格缓冲区域
每次输入一个字符还需要enter一下,这时缓冲区相当于就会有两个字符,而下一次scanf就会把空格传给电脑,这样是不行的,
所以我们需要在每次输入后,都要清除一下缓冲区中的空格,用getchar()函数吸收空格。

printf("请输入正确字母:");scanf("%c", &guess);getchar();if (answer == guess){printf("对的\n");count++;}else{printf("错误的,正确的答案是%c\n",answer);}

也可以使用另一种方法,利用do…while清空缓冲区

 printf("Please enter the correct letter: ");guess = getchar();do {scanf("%c",&c);} while(c!='\n');if (answer == guess) {printf("Correct!\n");count++;} else {printf("Wrong! The correct letter is %c\n", answer);}

🍁4.完整代码


int main(void) {char character, position, answer, guess, c;int i, count=0;double duration;time_t start, end;srand((unsigned int) (time(0)));    // 随机种子start = time(NULL);    // 开始计时for (i=0; i<20; i++) {position = rand()%3+'0';    // 随机隐藏的位置0,1,2character = rand()%24+'A';  // 随机出现的第一个字母 A-Xprintf("----- Round %d -----\n", i+1);if (position == '0')  {answer = character;printf("? %c %c\n", character+1, character+2);} else if (position == '1') {answer = character + 1;printf("%c ? %c\n", character, character+2);} else if (position == '2') {answer = character + 2;printf("%c %c ?\n", character, character+1);}printf("Please enter the correct letter: ");guess = getchar();do {scanf("%c",&c);} while(c!='\n');if (answer == guess) {printf("Correct!\n");count++;} else {printf("Wrong! The correct letter is %c\n", answer);}} end = time(NULL);  // 停止计时duration = ((double)(end - start));printf("Win Ratio: %f %%\n", count*100/20.0);printf("Game Time: %f s\n", duration);return 0;
}
http://www.lryc.cn/news/22483.html

相关文章:

  • 【C++】list 相关接口的模拟实现
  • 快速找到外贸客户的9种方法(建议收藏)
  • TCP状态转换
  • 3500年里,印度被11个文明征服
  • Java编程问题top100---基础语法系列(一)
  • 【C#基础】C# 异常处理操作
  • 系统分析师---操作系统思维导图
  • Linux | Ubuntu20.04系统使用命令从移动硬盘/U盘拷贝文件到服务器上
  • 【经验总结】10年的嵌入式开发老手,到底是如何快速学习和使用RT-Thread的?
  • 一起Talk Android吧(第五百零九回:约束布局中的组功能一)
  • 2023安徽省“中银杯”职业技能大赛“网络安全” 项目比赛任务书
  • 观测云产品更新|新增用户访问监测自动化追踪;新增 CDN 质量分析;新增自定义查看器导航菜单等
  • 大数据技术生态全景一览
  • CI/CD | 深入研究Jenkins后,我挖掘出了找到了摆脱低效率低下的方法
  • 刷LeetCode
  • Spring 大白话系列:工厂
  • 喜讯!华秋电子荣获第六届“蓝点奖”十佳分销商奖
  • Linux概述
  • 中级嵌入式系统设计师2015下半年上午试题及答案解析
  • 华为OD机试模拟题 用 C++ 实现 - 删除指定目录(2023.Q1)
  • 【正点原子FPGA连载】第二十章AXI4接口之DDR读写实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 超出认知的数据压缩 用1-bit数据来表示32-bit的梯度 语音识别分布式机器学习 梯度压缩 论文精读
  • 深度剖析指针(上)——“C”
  • 学习 Python 之 Pygame 开发魂斗罗(六)
  • LeetCode题解:1238. 循环码排列,归纳法,详细注释
  • 全新后门文件Nev-3.exe分析
  • 线性回归系数解释
  • 22.2.27打卡 Codeforces Round #852 (Div. 2) A~D
  • 如何查看Spring Boot各版本的变化
  • 程序员是否要加入创业公司?