猜数游戏(详细讲解)
今天给大家介绍一款小游戏,猜数游戏,规则很简单,电脑随机生成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;
}
新人作者,上述文章如有错误,还请大佬指正。
猜数游戏(详细讲解)相关推荐
- Java猜数游戏怎么验证_Java实现猜数游戏
利用Math.random()方法产生1~100的随机整数,利用JOptionPane.showInputDialog()方法产生一个输入对话框,用户可以输入所猜的数.若所猜的数比随机生成的数大,则显 ...
- 【Rust指南】配置加速Cargo下载、更新依赖库|利用随机数编写Rust猜数游戏
文章目录 前言 一.Cargo配置问题与VSC的实用插件下载 1.解决Cargo拉取crates.io非常慢的问题 2.VSC自动管理Rust项目的实用插件 二.编写Rust 的猜数游戏 1.抓取 ...
- 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(1)
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第11章 综合案例设计与分析 例11.2 tkinter版猜数游戏 京东购买链接:https: ...
- 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(2)
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第11章 综合案例设计与分析 例11.2 tkinter版猜数游戏 京东购买链接:https: ...
- 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(3)
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第11章 综合案例设计与分析 例11.2 tkinter版猜数游戏 京东购买链接:https: ...
- python猜数游戏续_python猜数游戏续改编
answer=456 n=input('Enteranumber:') correct=len([iforiinnifiinstr(answer)]) exact=len([afora,binzip( ...
- 用Python做一个猜数游戏(入门)
用Python做一个猜数游戏(入门) 目录: 用Python做一个猜数游戏(入门) 第一阶段: 第二阶段: 前言: 各位大佬大家好,我是夕阳样桑,由于最近时间有点紧,所以先做一个小程序.感谢大家的支持 ...
- 教你用python制作猜数游戏
大家好!我又回来了!今天我教大家怎样用python制作猜数游戏.在此之前我们先了解一下什么是python版猜数游戏. 了解 python版猜数游戏是指您先输入下限值与上限值,然后系统随机生成一个在此范 ...
- 「C++小游戏教程」猜数游戏
0. 引言 本章主要讲解如何做一个简易的猜数游戏,分为用户猜数和系统猜数. 前置芝士: 「C++小游戏教程」基本技巧(1)--随机化 1. 用户猜数 系统想好一个在 [1,100][1,100][1, ...
最新文章
- elasticsearch查询
- 前端一HTML:十二:元素查找过程的详解
- python pandas空值与缺失值处理
- 【Linux】2.Linux source命令
- 工作之本地存储RAID5一硬盘离线恢复简要说明
- js面向对象-组合使用构造函数模式和原型模式(使用最广泛、认同度最高)
- C#正则表达式提取HTML中IMG标签的URL地址 .
- Spring Data JPA 从入门到精通~@Procedure 储存过程的查询方法
- 用单片机测量流体流速的_金属管转子流量计基本测量原理
- php分页代码 页数太多,php分页函数示例代码分享
- php study 直接显示代码_《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12
- dataframe修改数据_利用Python进行数据分析(语法篇)
- matplotlib数据可视化实战——折线图+散点图
- 20155207 实验五 网络编程与安全
- python能做什么项目-python适合什么开发
- CADD课程学习(7)-- 模拟靶点和小分子相互作用 (半柔性对接 AutoDock)
- 史上最详细解释接口自动化测试中cookie、session和token的区别【多测师_王sir】
- MATLAB图像分割系统设计
- 交易型系统设计的一些原则
- EM算法系列--原理