小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo。

这个小游戏的原题是“C primer plus 5版” 第8章编程题4。

一、题目描述

二、题目及思路分析

2.1 从题述来看,有如下几个关键点需要思考,以及这些关键点对应的解决思路如下:

2.1.1 关键点1.获取用户的输入

你要和计算机玩这个猜数游戏,那么,你得以某种方式告知计算机如何获取你的输入吧。比如计算机猜了一个数,你得告诉计算机猜大了还是猜小了。然后计算机再根据你的指示继续猜测。

2.1.2 关键点2.处理用户的异常输入

你和计算机玩游戏,计算机再等着你的指示,你却输入了一个莫名其妙的指示,那么计算机也要能处理你的瞎输入。

2.1.3 关键点3.二分搜索策略

二分搜索策略,是怎么个策略?

2.1.4 关键点4.你骗了计算机

题述中说,你如果没有骗计算机,计算机会很快猜出。但是你蛋疼,就是要骗人家,那么计算机该如何处理?

2.2 思路分析

针对2.1提出的几个关键点,我们来一一破解。

2.2.1 关键点1.获取用户的输入

思路:我们预先定义一个规则:

如果计算机猜大了,你输入“g”告诉它大了;

如果计算机猜小了,你输入“l”告诉它小了;

如果计算机猜对了,你输入“y”告诉它猜对了;

如果计算机被骗了,你输入“n”告诉它被骗了;

对于这种一次只接收1个字符的情况,getchar函数最好了。

2.2.2 关键点2.处理用户的异常输入

2.2.1中,我们定义了你应该输入的字符集。但是你可能会出于故意或者无意,输入一些定义之外的字符集,比如你输入了“gg”,或者你输入了“daf”等无意义的东西,那么你需要使用getchar函数清除掉这些垃圾数据。

2.2.3 关键点3.二分搜索策略

这个才是本题的重点。可以设置一个最高值100,一个最低值1,还有一个当前值。如果计算机猜测的数字大了,那么更新最高值为当前值,最低值不变,当前值=(最高值 + 最低值)/2;如果计算机猜测的数字小了,那么更新最低值为当前值,最高值不变,当前值=(最高值 + 最低值)/2。

2.2.4 关键点4.你骗了计算机

你骗了人家,那么计算机就要继续从50猜起,所以可以重置猜测的数为50.

3.代码

OS:Windows XP sp3

编译器:TDM-GCC 4.9.2 32-bit Release

根据上述分析,代码如下:

#include <stdio.h>
#include <ctype.h>void ClearBuff()
{int ch;while( (ch = getchar()) != '\n')continue;
}int main(void)
{int ch = 0, guess = 50, begin = 1, end = 100;printf("我猜,你的数字是: %d ,对吗?\n", guess); while ((ch = getchar()) != EOF){if( (ch <= ' ') || (ch == '\t') ){continue;}if(isalpha(ch)){if(isupper(ch)){ch = ch + 32;}}if( 'y' == ch ){puts("哈哈我猜对了!");ClearBuff();break; }switch(ch){case 'g':end = guess;guess = (begin + end) / 2;printf("我猜,你的数字是: %d ,对吗?\n", guess);ClearBuff();break;case 'l':begin = guess;guess = (begin + end) / 2;printf("我猜,你的数字是: %d ,对吗?\n", guess);ClearBuff();break;case 'n':puts("做人要诚信!");begin = 1;end = 100;guess = 50;printf("我猜,你的数字是: %d ,对吗?\n", guess);ClearBuff();break;default:puts("我看不懂你在说什么!");ClearBuff();break;}}puts("再见!");return 0;
}

4.运行结果

5.技术点

完成这道题,需要掌握的技术点其实就是getchar函数的使用。本题中,使用getchar函数,我们完成了3件事:

1)接收缓冲区中的字符;

2)丢弃到不需要的数据;

3)判断输入的结束。

6.算法点

二分搜索算法。“二分搜索”的思想在很多地方都会用到,比如在有序列表中二分查找一个数,二叉树中查找一个数等。

一个简单的猜拳小游戏(C语言实现)相关推荐

  1. 一个简单的猜拳小游戏

    import random#猜拳游戏开始 #0shitou 1bu 2jiandao number=int(input('please input your want to play numbers: ...

  2. HTML制作猜拳小游戏,利用Eclipse制作的一个简单UI猜拳小游戏

    玩家类: import java.util.*; public class Players { //玩家角色名 String userName="";--------------- ...

  3. 用python做一个简单的猜拳小游戏

    首先要对random这个模块有所了解,其次再使用if条件语句.下面我们来看下这几行代码的思路 利用random可以生成随机的数字,与玩家所输入的数字进行对比,在多个if条件语句的帮助下,从而做到对输赢 ...

  4. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  5. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

  6. python简单小游戏代码_一个简单的python小游戏---七彩同心圆

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...

  7. 用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便加强一下pygame库的学习. 玩法:每次点击鼠标时,会以鼠标 ...

  8. 用pygame做一个简单的python小游戏---生命游戏

    用pygame做一个简单的python小游戏-生命游戏 生命游戏(Game of Life) 生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授 ...

  9. python七彩同心圆_用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏---七彩同心圆 用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便 ...

最新文章

  1. java的scanner用法_Java Scanner用法详解
  2. 开学季,教你用Python画大学教室座位神分区图!网友直呼“中枪”
  3. 使用jQuery-UI来实现一个Ajax的自动完成功能(自动填充搜索框的下拉值)
  4. zip 文件下载函数封装
  5. PAT甲级1123 Is It a Complete AVL Tree (30分):[C++题解]建立平衡树、bfs,判完全二叉树
  6. android 设置默认铃声,Android系统修改默认铃声
  7. springSecurity源码分析——DelegatingFilterProxy类的作用
  8. Java系列(1) JavaEE架构
  9. ​insert带来的TiDB集群性能瓶颈排障
  10. Python3安装cx_Oracle连接oracle数据库实操总结
  11. 出现( linker command failed with exit code 1)错误总结
  12. bat脚本 rar压缩屏蔽某文件夹 不压缩某文件夹
  13. 如何提升设备管理效率和巡检效率?
  14. c2c网上商店管理与推广
  15. centos6.5 卸载adobeflash
  16. htc+one+m8+联通+android+5,HTC One M9和HTC M8哪个好
  17. Vue+Springboot项目练手(主要是后端)
  18. Python使用psutil的电脑资源监控软件
  19. java操作excel
  20. 联想服务器怎么用u盘安装系统安装win7系统教程,联想一体机如何安装win7_联想一体机怎么使用u盘重装win7...

热门文章

  1. 不透明度和填充的区别
  2. Matlab中filter函数用法
  3. 交易系统开发(十三)——QuickFIX源码分析
  4. Java面向对象(知识点整理)
  5. 新iPhone设计图这么丑?!你信吗?
  6. 基于迅为3568开发板的文件系统构建
  7. trimLeft()trimRight()
  8. c语言求解三角形的重心,三角形的重心怎么求
  9. 3dsmax批量导入、导出文件
  10. 点石互动--Zac 之:英文SEO论坛和博客推荐