C语言中使用循环实现简易的猜数字游戏

学了循环之后,我们就可以结合前面的知识写一个简单的猜数字小游戏,来检验自己的学习成果。

一、目的

通过循环结构实现游戏入口开始、继续游戏或退出的选择,并让每一局的数字都不一样,猜中则退出循环,回到游戏入口。

二、思考

1、代码的模块化

2、游戏的功能的实现

3、功能的丰富(比如加上惩罚机制)

4、游戏画面的简洁

三、游戏的实现

1、主程序的构建

我们可以先忽略游戏的入口和游戏过程的代码,先写一个大致的思路,如下:

首先创建一个变量来接收用户是否游戏的输入值,既然是游戏,那么至少执行一次循环,所以可以用do_while结构,当用户输入1时游戏开始,输入2时游戏结束,输入别的值时提示输入错误并重新输入。

srand函数可以根据参数生成一个“种子”,而time函数可以返回某一时间减去“计算机的起始时间”(第一台计算机诞生的时间)的值,这样我们就可以根据时间来生成随时都在变化的“种子”至于这个“种子”有什么用,下面讲游戏过程时有。使用这两个函数时分别要包含<stdlib.h>和<time.h>。

2、游戏入口的实现

游戏入口我们可以输出一些比较醒目的内容,来提示玩家。比如: 

3、 游戏过程的实现

首先,在每一局游戏,我们都要生成一个随机数,这时就要用到rand函数,rand函数能基于一个叫“种子”的数计算生成一个伪随机值,不过,如果直接使用,编译器会默认“种子”为1,那么每一次生成的数都是一样的,这时我们就要给他一个参数,来改变每一次生成的数,这时,上面的srand函数就派上用场了,将srand函数的返回值作为参数,这样,rand函数每一次生成的数就不一样了。使用srand函数时要包含<stdlib.h>。

不过,还有一个问题,rand函数生成的是0-32767(不同编译器中可能有所不同)的值,如何实现我们想要的范围呢?这时候取模运算符就该上场了,众所周知,一个数%另一个数得到的结果是余数,而这个余数一定不会大于后面那个数,如果我们想要(int)0-100的范围,只需要rand%101就行了。如果是100-200,也同理,在前面加上100即可。

然后,我们只需要用循环和选择结构来根据玩家输入的值输出对应的提示即可:

至此,我们就写好了一个 简易的猜数字小游戏。

四、画面的简洁和游戏功能的丰富

1、画面的简洁

写好了游戏之后,运行时,通常会有一长串画面,此时,我们就可以用system函数来实现在某些结点清屏,比如在游戏结束时,在猜错数字时......用法为system("cls"),即输入cls的指令,让画面清屏。使用时包含<stdlib.h>

2、游戏功能的丰富

【1】次数限制

当我们给小伙伴玩时,只要朋友一直猜,总能猜中,为了增加游戏难度,可以加上次数限制,比如创建一个变量,来记录猜数字的次数,当猜错5次时,提示游戏失败,并退出游戏,回到游戏入口。

【2】惩罚机制

如果觉得游戏太单调了,那我们可以加入惩罚机制,比如,在一定次数内没有猜中,就让玩家的电脑关机(给别人玩时最好提前提示,让朋友保存好工作或游戏内容)。用上述的system函数即可实现这个功能:关机:system("shutdown -s -t t");第二个t代表预定关机的时间,单位为秒,假如朋友输入“我是猪”,那么就取消关机:system("shutdown -a");   。

在这里我们又遇到一个问题,如何比较朋友的输入跟我们预设的内容是否一致呢?我们可以先创建一个(char)数组arr来接收朋友输入的内容,用strcmp函数来判断两串字符是否相同:stcmp(arr,"我是猪"),返回值为0则相同。在使用时需要包含<string.h>

以下是有惩罚机制,简洁画面的一个大致代码:

猜数字游戏更新版:精简了显示画面,减少猜数字次数,增加游戏难度 · 13ebf85 · DSag/c_study - Gitee.com

以上内容为我学习后的总结,如有错误,敬请谅解,欢迎指出我的错误,帮助我进步!!! 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值