今天给大家介绍一款小游戏,猜数游戏,规则很简单,电脑随机生成1~100直接的一个整数,由玩家进行猜测,猜的数比电脑生成的大了,电脑会告诉你猜大了,比生成的小了,会告诉你猜小了,猜对了的话,会恭喜你,猜对了。

首先,我们要写好程序的基本逻辑,让它可以先跑起来,我们写代码要一步一步的敲,不要上来就巴拉巴拉的敲,我之前学java时听过一句话叫:化繁为简,先死后活。意思是我们要把困难的题目给他化解成一块一块小的简单的,便于我们写出来,开始先让它可以跑起来(最开始时候先让代码死板一点,能跑就行),最后再统合变为活的(比如输入各种复杂参数,让代码可以变化无穷),自己需要的。

#include<stdio.h>
int main() {int input = 0;do {printf("这里是菜单函数\n");printf("请选择:>\n");scanf("%d", &input);switch (input) {case 0:printf("退出游戏,程序结束!\n");break;case 1:printf("这里是猜数字的游戏函数\n");break;default:printf("输入错误,请重新选择\n");break;}} while (input);return 0;
}

我们使用do-while循环和switch语句来构成代码的基本逻辑。

再接着,我们来完成菜单函数,这个非常简单,只需要用printf函数打印出一个好看的菜单就行。

void menu() {printf("*************************\n");printf("******** 1. play  *******\n");printf("******** 0. exit  *******\n");printf("*************************\n");
}

对应我们switch里的case语句,input输入的为0,退出游戏,输入为1,开始游戏,输入其他的就让他重新输入。

接着我们来完成猜数游戏的游戏函数

void game() {int n = rand() % 100 + 1;int x = 0;int i = 5;do {printf("请猜数字,你还有%d次机会\n", i);scanf("%d", &x);if (x < n) {printf("猜小了\n");i--;}else if (x > n) {printf("猜大了\n");i--;}else {printf("恭喜你,猜对了\n");break;}} while (i);
}

这里我们使用do-while循环来执行猜数逻辑,设定一个可以猜的次数i,我设置的是5,5次没有猜中就重新开始,大家可以根据自己的需求设置。

这里难的地方是生成随机数,我们重点讲解一下:我们可以使用rand函数来生成一个随机的数字,rand函数会返回一个范围在0到RAND_MAX(32767)之间的伪随机数(整数),如果我们直接这样写,那么每次游戏生成的随机数是一样的,在使用rand函数前要先使用一个叫srand的函数,去初始化随机数的生成器,srand函数的原型是:void srand(unsigned int seed);参数说明:unsigned seed:随机数产生器的初始值(种子值)。由百度所见,我们在使用srand时,需要给他设置一个参数seed,而且这个seed参数是要变化的才行,不然还是会产生一样的随机数。所以这时候,我们需要引入一个新的函数,叫time函数,因为时间就是在不断的变化,很符合我们的需求,我们设置一个时间戳为seed(时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数),time函数的参数我们设置为NULL即可,又因为参数seed为unsigned int类型,我们使用强制转换将time函数的返回值转为该类型。最后写出来的srand是这样的:

srand((unsigned int)time(NULL));

srand函数在整个程序中只需要调用一次即可,所以把他放在main函数里边的开头就行。

使用time函数需要引入头文件#include<time.h>,使用rand函数和srand函数需要引入头文件#include<stdlib.h>。

然后说一下为什么生成的rand值需要%100+1,因为上边说了rand函数会返回一个范围在0到32767的数字,我们对他%100后,会得到一个0到99的数字,此时+1,就可以得到一个1到100的数字了,大家可以根据自己的需求来设置猜数的大小,这样我们的猜数游戏就完成啦。

最后附上完整代码

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu() {printf("*************************\n");printf("******** 1. play  *******\n");printf("******** 0. exit  *******\n");printf("*************************\n");
}
void game() {int n = rand() % 100 + 1;int x = 0;int i = 5;do {printf("请猜数字,你还有%d次机会\n", i);scanf("%d", &x);if (x < n) {printf("猜小了\n");i--;}else if (x > n) {printf("猜大了\n");i--;}else {printf("恭喜你,猜对了\n");break;}} while (i);
}
int main() {int input = 0;srand((unsigned int)time(NULL));do {menu();printf("请选择:>\n");scanf("%d", &input);switch (input) {case 0:printf("退出游戏,程序结束!\n");break;case 1:game();break;default:printf("输入错误,请重新选择\n");break;}} while (input);return 0;
}

新人作者,上述文章如有错误,还请大佬指正。

猜数游戏(详细讲解)相关推荐

  1. Java猜数游戏怎么验证_Java实现猜数游戏

    利用Math.random()方法产生1~100的随机整数,利用JOptionPane.showInputDialog()方法产生一个输入对话框,用户可以输入所猜的数.若所猜的数比随机生成的数大,则显 ...

  2. 【Rust指南】配置加速Cargo下载、更新依赖库|利用随机数编写Rust猜数游戏

    文章目录   前言 一.Cargo配置问题与VSC的实用插件下载 1.解决Cargo拉取crates.io非常慢的问题 2.VSC自动管理Rust项目的实用插件 二.编写Rust 的猜数游戏 1.抓取 ...

  3. 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(1)

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第11章  综合案例设计与分析 例11.2  tkinter版猜数游戏 京东购买链接:https: ...

  4. 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(2)

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第11章  综合案例设计与分析 例11.2  tkinter版猜数游戏 京东购买链接:https: ...

  5. 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(3)

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第11章  综合案例设计与分析 例11.2  tkinter版猜数游戏 京东购买链接:https: ...

  6. python猜数游戏续_python猜数游戏续改编

    answer=456 n=input('Enteranumber:') correct=len([iforiinnifiinstr(answer)]) exact=len([afora,binzip( ...

  7. 用Python做一个猜数游戏(入门)

    用Python做一个猜数游戏(入门) 目录: 用Python做一个猜数游戏(入门) 第一阶段: 第二阶段: 前言: 各位大佬大家好,我是夕阳样桑,由于最近时间有点紧,所以先做一个小程序.感谢大家的支持 ...

  8. 教你用python制作猜数游戏

    大家好!我又回来了!今天我教大家怎样用python制作猜数游戏.在此之前我们先了解一下什么是python版猜数游戏. 了解 python版猜数游戏是指您先输入下限值与上限值,然后系统随机生成一个在此范 ...

  9. 「C++小游戏教程」猜数游戏

    0. 引言 本章主要讲解如何做一个简易的猜数游戏,分为用户猜数和系统猜数. 前置芝士: 「C++小游戏教程」基本技巧(1)--随机化 1. 用户猜数 系统想好一个在 [1,100][1,100][1, ...

最新文章

  1. elasticsearch查询
  2. 前端一HTML:十二:元素查找过程的详解
  3. python pandas空值与缺失值处理
  4. 【Linux】2.Linux source命令
  5. 工作之本地存储RAID5一硬盘离线恢复简要说明
  6. js面向对象-组合使用构造函数模式和原型模式(使用最广泛、认同度最高)
  7. C#正则表达式提取HTML中IMG标签的URL地址 .
  8. Spring Data JPA 从入门到精通~@Procedure 储存过程的查询方法
  9. 用单片机测量流体流速的_金属管转子流量计基本测量原理
  10. php分页代码 页数太多,php分页函数示例代码分享
  11. php study 直接显示代码_《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12
  12. dataframe修改数据_利用Python进行数据分析(语法篇)
  13. matplotlib数据可视化实战——折线图+散点图
  14. 20155207 实验五 网络编程与安全
  15. python能做什么项目-python适合什么开发
  16. CADD课程学习(7)-- 模拟靶点和小分子相互作用 (半柔性对接 AutoDock)
  17. 史上最详细解释接口自动化测试中cookie、session和token的区别【多测师_王sir】
  18. MATLAB图像分割系统设计
  19. 交易型系统设计的一些原则
  20. EM算法系列--原理

热门文章

  1. termux入门安装
  2. 【python爬虫专项(10)】去哪儿网景点数据采集
  3. 实现冒泡排序(c语言)
  4. 法国语言学校学两年可以过c1,半年从A2到 telc C1 Befriedigen 经验
  5. Linux系统时间不准问题分析
  6. Android系统intent大全
  7. 鼠标右键菜单栏太长如何减少
  8. totolink文件服务器,谁的WiFi覆盖广 实测两款TOTOLINK路由
  9. JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。
  10. jQuery实现拍打灰太狼小游戏