IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言写猜数游戏 -> 正文阅读

[C++知识库]C语言写猜数游戏

C语言写猜数游戏

这篇文章是给学完并学懂了C语言的分支(选择和循环)结构的朋友看的。

要做一个游戏或者程序先要想好有那些要求,以下是我认为一个猜数游戏必带的要求:?

  1. 自定义猜数范围的起点和终点以及机会次数。
  2. 生成一个随机数。
  3. 如果输入猜入的数和生成的随机数相等,就提示猜对了并退出主函数,如果输入猜的数比生成的随机数大,就提示猜大了,如果输入猜的数比生成的随机数小,就提示猜小了,没猜对一次就减一次机会。
  4. 如果机会为0了,就提示没有机会了并输出随机数。

自定义猜数范围的起点和终点以及机会次数

先来写自定义猜数范围的起点和终点以及机会次数,代码如下:

int start,end,opportunity;//范围起点 范围终点 机会次数
printf("请输入猜数游戏的范围的起点:");
scanf("%d",&start);
printf("请输入猜数游戏的范围的终点:");
scanf("%d",&end);
printf("请输入猜数游戏的机会次数:");
scanf("%d",&opportunity);

生成一个随机数

生成一个随机数可以用srand()函数和rand()函数,srand()函数作用大致是每次运行生成的随机数都不同。rand()函数作用是生成并返回一个随机数。代码如下:

int random;//随机数
srand((unsigned)time(NULL));//每次运行生成的随机数都不同
random=rand();//默认随机数的范围是0~32767

那么如何生成我们输入的起点和终点那个范围呢,代码如下:

int random;//随机数
srand((unsigned)time(NULL));//每次运行生成的随机数都不同
random=rand()%(end-start)+end;//生成的随机数余(end-start)的结果就是一个不大于(end-start)的数,最后加上start之后就得到了一个不小于start并且不大于end的数,就可以控制范围了

srand()函数

srand()函数是随机数发生器的初始化函数,函数原型为:void srand(unsigned seed);,所在头文件为:#include <stdlib.h>。

它会初始化并提供一个随机种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数,比如:srand(1);,直接使用1来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用time函数来获得系统时间,它的返回值为从00:00:00GMT,January1,1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即:srand((unsigned)time(&t));,还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned)time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的数据。

其实计算机并不能产生真正的随机数,而是已经编写好的一些无规则排列的数字存储在电脑里,把这些数字划分为若干相等的N份,并为每份加上一个编号用srand()函数获取这个编号,然后rand()就按顺序获取这些数字,当srand()的参数值固定的时候,rand()获得的数也是固定的,所以一般srand的参数用time(NULL),因为系统的时间一直在变,所以rand()获得的数,也就一直在变,相当于是随机数了。只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。如果想在一个程序中生成随机数序列,需要至多在生成随机数之前设置一次随机种子。 即:只需在主程序开始处调用srand((unsigned)time(NULL)); 后面直接用rand就可以了。不要在for等循环放置srand((unsigned)time(NULL));

rand()函数

rand()函数作用是生成并返回一个随机数,函数原型为:int rand(void);,所在头文件为:#include <stdlib.h>。

rand()函数每次调用前都会查询是否调用过srand(seed),是否给seed设定了一个值,如果有那么它会自动调用srand(seed)一次来初始化它的起始值。若之前没有调用srand(seed),那么系统会自动给seed赋初始值,即srand(1)自动调用它一次。

总结以上代码

目前为止,我们做了自定义猜数范围的起点和终点以及机会次数、生成一个随机数,目前全部代码如下:

#include <stdio.h>
#include <stdlib.h>//srand()函数和rand()函数头文件
#include <time.h》>//time()函数的头文件
int main()
{
    int start,end,opportunity,random;//范围起点 范围终点 机会次数 随机数
    srand((unsigned)time(NULL));//每次运行生成的随机数都不同
    printf("请输入猜数游戏的范围的起点:");
    scanf("%d",&start);
    printf("请输入猜数游戏的范围的终点:");
    scanf("%d",&end);
    printf("请输入猜数游戏的机会次数:");
    scanf("%d",&opportunity);
    random=rand()%(end-start)+start;//生成的随机数余(end-start)的结果就是一个不大于(end-start)的数,最后加上start之后就得到了一个不小于start并且不大于end的数,就可以控制范围了
    return 0;
}

比较输入的数与随机数的大小来做相应的事

如果输入猜入的数和生成的随机数相等,就提示猜对了并退出主函数,如果输入猜的数比生成的随机数大,就提示猜大了,如果输入猜的数比生成的随机数小,就提示猜小了,没猜对一次就减一次机会,代码如下:

while(opportunity--)//只要没有猜对一次,机会就少一次
{
    scanf("%d",&guess);//输入需要猜的数
    if(guess==random)//当猜的数和随机数相等,说明猜对了
    {
        printf("猜对了!\n");//提示猜对了
        return 0;//直接退出函数
    }
    else if(guess>random)//当猜的数比随机数大
        printf("猜大了!剩余机会次数为%d次\n",opportunity);//提示猜大了和剩余机会次数
    else if(guess<random)//当猜的数比随机数小
        printf("猜小了!剩余机会次数为%d次\n",opportunity);//提示猜小了和剩余机会次数
}
printf("没有机会了,正确答案是%d",random);//没有退出函数就说明机会用完了并且没有猜对,就提示没有机会了并揭晓答案

总结以上代码

#include <stdio.h>
#include <stdlib.h>//srand()函数和rand()函数头文件
#include <time.h>//time()函数的头文件
int main()
{
    int start,end,opportunity,random,guess;//范围起点 范围终点 机会次数 随机数 猜的数
    srand((unsigned)time(NULL));//每次运行生成的随机数都不同
    printf("请输入猜数游戏的范围的起点:");
    scanf("%d",&start);
    printf("请输入猜数游戏的范围的终点:");
    scanf("%d",&end);
    printf("请输入猜数游戏的机会次数:");
    scanf("%d",&opportunity);
    random=rand()%(end-start)+start;//生成的随机数余(end-start)的结果就是一个不大于(end-start)的数,最后加上start之后就得到了一个不小于start并且不大于end的数,就可以控制范围了
    printf("请在%d到%d之内猜数字,你有%d次机会:\n",start,end,opportunity);
    while(opportunity--)//只要没有猜对一次,机会就少一次
    {
        scanf("%d",&guess);//输入需要猜的数
        if(guess==random)//当猜的数和随机数相等,说明猜对了
        {
            printf("猜对了!\n");//提示猜对了
            return 0;//直接退出函数
        }
        else if(guess>random)//当猜的数比随机数大
            printf("猜大了!剩余机会次数为%d次\n",opportunity);//提示猜大了和剩余机会次数
        else if(guess<random)//当猜的数比随机数小
            printf("猜小了!剩余机会次数为%d次\n",opportunity);//提示猜小了和剩余机会次数
    }
    printf("没有机会了,正确答案是%d",random);//没有退出函数就说明机会用完了并且没有猜对,就提示没有机会了并揭晓答案
    return 0;
}

测试代码

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:33:43  更:2021-09-09 11:33:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:48:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码