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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【C语⾔程序设计】—最近超⽕的⼩游戏—【数字炸弹】!
✍准备⼯作和建议
⼀、程序的原理
在动⼿编程之前,得先跟⼤家说⼀下这个程序是⼲什么的。

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

游戏的原理是这样:
每⼀轮电脑从 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");
else
printf ("太棒了,你猜到了这个神秘数字 !!\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++不易,此路应携⼿前⾏。

如果你也想学编程,可以来我的
还有免费的(源码,零基础教程,项⽬实战教学视频)!
涉及:游戏开发、课程设计、常⽤软件开发、编程基础知识、⿊客等等...
快来和志同道合的⼩伙伴们⼀起学编程吧!
✍改进⽅案
现在这个游戏还是很基础很简单的,但是可以有以下的改进⽅案:
❀增加⼀个记录步数的计数器,在你猜对的时候输出:“太棒了,你⽤**步猜到了这个神秘数字!”
❀⽬前的程序只进⾏⼀轮就结束了,如果玩家不过瘾,还想继续下⼀轮怎么办呢?可以加⼊⼀个问题:“你还想继续玩吗?”,等待⽤户输⼊数字来回答。

定义⼀个布尔值
continue(continue 表⽰“继续”)来存储⽤户输⼊的回答,⽐如 continue 的默认值是 1,就是⽤户默认是继续玩下⼀轮的;但如果⽤户输⼊ 0,那么程序停⽌,游戏结束。

❀增加⼀个模式:双⼈模式。

可以你出题我来猜。

但是我希望你能够在程序⼀开始就让⽤户选择是玩哪⼀种模式,是经典的⼈机对战,还是⼈⼈对战。

如果是双⼈模式的⼈⼈对战,那么就不是⽤ srand 和 rand 来产⽣神秘数字了,⽽是让玩家⼀通过 scanf 来输⼊这个数字。

❀设置⼏个难度级别,让玩家选择:初级(1-100 中的⼀个数),中级(1-1000 中的⼀个数),⾼级(1-10000 中的⼀个数)。

如果你这样设计,就需要改写 MAX 值了,⽽此时MAX 就不能再是⼀个 const 变量了,必须要把 MAX 前⾯的 const 去掉,MIN 的还能保留。

❀你也可以⾃⼰增设难度,想出更多好玩的点⼦来丰富这个游戏。

通过完善和改进这个⼩游戏,你会学到更多。

相关文档
最新文档