✍  准备工作和建议

一、程序的原理

在动手编程之前,得先跟大家说一下这个程序是干什么的。

我们可以称呼这个游戏为《数字炸弹》。

游戏的原理是这样:

每一轮电脑从 1 到 100 中随机抽一个整数。

电脑请求你猜这个数字,因此你要输入一个 1 到 100 之间的整数。

电脑将你输入的数和它抽取的数进行比较,并告知你的数比它的数大了还是小了。

然后它会再次让你输入数字,并告诉你比较的结果。

一直到你猜到这个数为止,一轮结束。

游戏的目的,当然就是用最少的次数猜到这个“神秘”数字。虽然没有绚丽的图形界面,但是或多或少,这都是你的第一个游戏了,应该值得骄傲。

下面演示了一轮的样式,你要编程来实现它:

这个数字是什么?50

猜小了!

这个数字是什么?75

猜小了!

这个数字是什么?85

猜大了!

这个数字是什么?80

猜大了!

这个数字是什么?78

猜小了!

这个数字是什么?79

太棒了,你猜到了这个神秘数字!!

二、随机抽取一个数

但大家要问了:“如何随机地抽取一个数呢?不知道怎么办啊,臣妾做不到啊。”

诚然,我们还没学习如何来产生一个随机数。让亲爱的电脑兄来做这个是不简单的:它很会做运算,但是要它随机选择一个数,它还不知道怎么做呢。

事实上,为了“尝试”得到一个随机数,我们不得不让电脑来做一些复杂的运算。好吧,归根结底还是做运算。

我们有两个解决方案:

✎  请用户通过 scanf 函数输入这个神秘数字,那么就需要两个玩家咯。一个选数字,一个猜数字。

✎  孤注一掷地让电脑来为我们自动产生一个随机数。好处是:只需要一个玩家,可以自娱自乐。缺点是:需要学习该怎么做...

我们来学习用第二种方案编写这个游戏,当然你也可以之后自己编写第一种方案的代码。

为了生成一个随机数,我们要用到 rand() 函数(rand 是英语 random 的缩写,表示“随机的”)。

顾名思义,这个函数能为我们生成随机数。但是我们还想要这个随机数是在 1 到 100 的整数范围内(如果没有限定范围,那会很复杂)。

我们会用到以下的形式:

srand(time(NULL));

mysteryNumber = (rand() % (MAX - MIN +1)) + MIN;

第一行(srand 函数)用于初始化随机数的生成器。srand 其实是 seed random 的缩写。seed 在英语中是“种子”的意思。

srand 函数只需要在 rand 函数前面调用一次就够了,也只能调用一次,之后你想要调用 rand 函数几次都无所谓,但是每个程序中不能用两次 srand 函数,切记。

上面代码格式中的 MAX 和 MIN 是常量或 const 类型的变量。MAX 是 Maximum 的缩写,表示“最大”。MIN 是 Minimum 的缩写,表示“最小”。顾名思义,MAX 和 MIN 分别是你规定的范围的最大值和最小值。

建议在程序的一开始定义这两个 const 类型的变量:

const int MAX =100, MIN =1;

三、引入的库

为了程序能够顺利运行,我们需要引入三个库:

stdio.h

stdlib.h

time.h

我们以前的课说过库的作用。库里面提供一些定义好的函数,比如 time.h里面就有我们的 time() 函数,stdlib 中有 rand 和 srand 函数。

好啦,我不继续透露了。我们已经说明了游戏的原理,给出了一轮游戏的运行例子,也给出了主要的随机数生成代码,该轮到你来完成游戏的代码了。加油,相信你可以的!

✍  我的代码

这个游戏的代码可以有不同的版本,你完全可以自己发挥。

#include <stdio.h>#include <stdlib.h>#include <time.h>int main (int argc, char** argv){int mysteryNumber = 0, guessNumber = 0;const int MAX = 100, MIN = 1;// 生成随机数srand(time(NULL));mysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;/* 程序的循环部分, 如果用户没猜中数字,就一直进行循环 */do{// 请求用户输入所猜数字printf("这个数字是什么 ? ");scanf("%d", &guessNumber);// 比较用户输入的数字和神秘数字if (mysteryNumber > guessNumber)printf("猜小了 !\n\n");else if (mysteryNumber < guessNumber)printf("猜大了 !\n\n");elseprintf ("太棒了,你猜到了这个神秘数字 !!\n\n");} while (guessNumber != mysteryNumber);return 0;}

程序的解释(从上到下的顺序):

1.预处理指令:就是开头的那三行,以 # 开始。include 是英语“包含,引入”的意思,所以表示引入什么库。

2.变量:这个游戏中,不需要太多变量,只有一个用于记录用户输入的数字的变量 guessNumber,和一个电脑随机抽取的数字 mysteryNumber。guess 表示“猜”,mystery 表示“神秘”,number 表示“数字”。我们也定义了两个常量(const 变量,其实叫只读变量比较准确)MAX 和 MIN,值分别是 100 和 1。这样定义的好处是,如果你后面要改这两个数值,会很方便,直接改这一行的两个值就好了。如果没有用 MAX 和 MIN 而是在程序里每一个地方写 100 和 1 的话,那如果以后要改数值,工作量就大了。

3.随机数:srand 和 rand 那两行,用于生成在 1 和 100 之间的一个随机数,值赋给 mysteryNumber。

4.循环:我选择用 do...while 循环。理论上一个 while 循环也可以做到,但我觉得这里用 do...while 可能更合逻辑。为什么呢?还记得 do...while 循环的特点吗?就是循环体里的指令至少会执行一次,不像 while 循环可能一次也不执行。这里我们至少要让用户输入一次数字,不可能用户一次也不输入就猜到了数字。

5.在每一次进入循环体里运行时,我们都请求用户输入一个数字,并且把这个数字的值赋给 guessNumber 变量,接下来就比较 guessNumber 和 mysteryNumber(需要猜的数字)的大小:

● mysteryNumber 大于 guessNumber,那么输出“猜小了”,继续循环;

● mysteryNumber 小于 guessNumber,那么输出“猜大了”,继续循环;

● mysteryNumber 等于 guessNumber,也就是 else 语句的情况,就说明我们猜对了,输出“太棒了,你猜到了这个神秘数字!”,结束循环。

6.循环也需要一个条件,我们给出的条件是:只要猜的数字和神秘数字不一样,循环就继续。


学C/C++不易,此路应携手前行。

如果你也想学编程,可以来我的C语言/C++编程学习基地,【点击进入】!

还有免费的(源码,零基础教程,项目实战教学视频)!

涉及:游戏开发、课程设计、常用软件开发、编程基础知识、黑客等等...

快来和志同道合的小伙伴们一起学编程吧!

✍  改进方案

现在这个游戏还是很基础很简单的,但是可以有以下的改进方案:

 ❀ 增加一个记录步数的计数器,在你猜对的时候输出:“太棒了,你用**步猜到了这个神秘数字!”

 目前的程序只进行一轮就结束了,如果玩家不过瘾,还想继续下一轮怎么办呢?可以加入一个问题:“你还想继续玩吗?”,等待用户输入数字来回答。定义一个布尔值 continue(continue 表示“继续”)来存储用户输入的回答,比如 continue 的默认值是 1,就是用户默认是继续玩下一轮的;但如果用户输入 0,那么程序停止,游戏结束。

 增加一个模式:双人模式。可以你出题我来猜。但是我希望你能够在程序一开始就让用户选择是玩哪一种模式,是经典的人机对战,还是人人对战。如果是双人模式的人人对战,那么就不是用 srand 和 rand 来产生神秘数字了,而是让玩家一通过 scanf 来输入这个数字。

 设置几个难度级别,让玩家选择:初级(1-100 中的一个数),中级(1-1000 中的一个数),高级(1-10000 中的一个数)。如果你这样设计,就需要改写 MAX 值了,而此时 MAX 就不能再是一个 const 变量了,必须要把 MAX 前面的 const 去掉,MIN 的还能保留。

 你也可以自己增设难度,想出更多好玩的点子来丰富这个游戏。通过完善和改进这个小游戏,你会学到更多。

【C语言程序设计】—最近超火的小游戏—【数字炸弹】!相关推荐

  1. Python小游戏--数字“炸弹“

    今天是自学python的第七天,检验学习成果: 数字炸弹游戏规则:在一个数字范围内,设定一个数字作为炸弹,猜中这个炸弹游戏结束. (根据每一次猜测的数字,缩小数字范围), 我的思路: 1:电脑随机生成 ...

  2. 一个简单的小游戏——“数字炸弹”的实现

    作为一名C语言的初学者,目前也没有能力开发出逻辑或功能较为复杂的游戏,在生活中的一次聚会玩到了一个名为"数字炸弹"的游戏,因为其逻辑简单,没有比较难以实现的部分,所以就尝试将其通过 ...

  3. 经典小游戏——数字炸弹

    在日常同学室友聚会时,不乏玩些小游戏来增加娱乐性.由于数字炸弹游戏有趣又简单,很多年轻人都玩过,在一些综艺节目里,也能看到它的身影.那怎么用Python实现呢? 数字炸弹游戏规则: 在一个数字范围内, ...

  4. IDEA小游戏数字炸弹

    import java.util.Random; import java.util.Scanner; public class NumberGame {public static void main( ...

  5. linux 剪刀石头布c语言,C语言实现最简单的剪刀石头布小游戏示例

    本文实例讲述了C语言实现最简单的剪刀石头布小游戏.分享给大家供大家参考,具体如下: #include #include #include /*************\ * 剪刀 石头 布 * * 最 ...

  6. C语言简单的键盘玩扫雷小游戏(完结)

    1:这次我们会将前面的代码进行整合,和整理,最终使我们的程序可以有效的运行起来. [1]初始化函数. void GameInit() {     //随机数种子     srand((unsigned ...

  7. C语言编写的坦克大战exe小游戏

    C语言编写的坦克大战exe小游戏! (含有部分C++函数,不过不需要知道实现细节,主要用于键盘读取等) 适合初学者学习的坦克大战代码,无图片,游戏全部功能画面显示全部由 printf 打印的哦! C+ ...

  8. 大一C语言课程设计之推箱子小游戏

    大一C语言课程设计之推箱子小游戏 先看一下效果 因为技术原因,开发说明没有加进去 按任意键以后 )] 同时响起来 你笑起来真好看的bgm 胜利界面会弹出一个弹出框 私信我或者加我qq:65245534 ...

  9. 基于c语言Easyx库的捕鱼达人小游戏

    基于c语言Easyx库的捕鱼达人小游戏(一) 文章目录 基于c语言Easyx库的捕鱼达人小游戏(一) 主菜单 游戏实现 捕鱼计分 下一阶段 主菜单 (写在前面的话:使用EASY-X库一定要命名为.cp ...

最新文章

  1. mirna富集分析_2020年的3+分ceRNA分析长啥样?
  2. Ab工具压力测试.及相应查看web服务排查问题
  3. MySQL -- Lock wait timeout exceeded; try restarting transaction参数控制
  4. api zabbix 拓扑图 获取_zabbix网络拓扑图配置-Maps(示例代码)
  5. flask数据库sqlalchemy查询
  6. VS Newtonsoft的引用问题
  7. 麦子学院6.1 神经网络算法(Nerual Networks)(上) 学习笔记
  8. Linux进程突然挂死,小玩意:如何让linux上挂死的进程重启?
  9. 数领科技|Solidworks软件这些年来的变化你都知道吗?
  10. eds能谱图分析实例_热场发射扫描电子显微镜与能谱分析仪
  11. sql中别名as,不写,以及使用双引号总结
  12. 【JZOJ B组】【NOIP2013模拟】Heaven Cow与God Bull
  13. EPOCH、INTERATION、BATCH_SIZE的区别
  14. IO 操作 (二进制流文件上传下载)
  15. 海量数据搜索、存储、查询、排序算法
  16. ON_NOTIFY用法
  17. Python 列表元组拆分为多个列表
  18. 用php完成下拉菜单,最新的8个实现下拉菜单功能的总结
  19. 大学计算机在线作业答案,上海交通大学《计算机》在线作业二参考答案
  20. 使用git强行切换分支

热门文章

  1. 58同城私有化:错过移动红利,吃流量老本,如何挽回崩塌的形象?
  2. C语言:打印平行四边形图案
  3. 2017java开发新技术
  4. 计算机程序设计工程师技术水平证书 java 考试试卷_关于程序设计工程师技术水平证书(JAVA).doc...
  5. win10网络显示依赖服务器无法启动,Win10专业版遇到“依赖服务或组无法启动”怎么办?...
  6. Numpy库的介绍及使用
  7. 什么是3D偏差分析?浩辰3D偏差分析应用技巧
  8. 转载:自动化测试金字塔与反模式
  9. this 引用逸出
  10. Java多线程 发布private对象逸出的演示