【C语言】猜数字小游戏的一步一步实现1

简介: 【C语言】猜数字小游戏的一步一步实现

前言

通过前面的学习,我们可以制作一个简单C语言的小游戏——猜数字小游戏

游戏要求:

1.电脑自动生成1~100的随机数

2.玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束

一、 随机数⽣成 rand

首先还我们先打上

#include <stdio.h>
int main()
{
  return 0;
}

根据要求我们怎么让电脑生成随机数呢,这个时候我们要产生随机数,这时我们可以引用rand函数,这是C语言提供的,不认识,没关系我们了解一下:

int   rand (void);

那我们就测试一下rand函数,这里多调用几次,产生5个随机数:

#include <stdio.h>
#include <stdlib.h>
 int main()
 {
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  return 0;
 }

第一次运行:

第二次运行:

这里我们重复运行一次进行对比就可以看出来,两次打印的随机数一模一样,这问题大了,我们要的是每次生成不一样的数字,为什么会这样子呢❓

如果再深入了解一下,用就不难发现,rand函数生成的随机数是伪随机数 ,而这个伪随机数不是真的随机数,是通过某种算法生成的随机数,真正的随机数是无法预测下一个数是多少的,而rand随机数是对一个叫种子的基准值进行运算生成的随机数。之所以每次运行的随机数都是相同的,是因为rand函数生成随机数的默认种子是1。哎,读到这里,岂不是让每一次种子发生改变,那么每一次随机数就不会一模一样的?没错,的确如此!

二、srand

因此C语言又提供了一个函数srand,用来初始化随机数的生成器,srand模型如下:

void srand(unsigned int seed);

程序中在调⽤rand函数之前先调⽤srand函数,通过srand函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。

那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随机数,这就⽭盾了

三、 time

在程序中,我们通常使用程序运行的时间作为种子,因为时间是不断变化的。在C语言中,有一个函数叫做time,可以获取当前时间。time函数的原型如下:

1  time_t time (time_t* timer);

time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t类型本质上其实就是32位或者64位的整型类型。

time函数的参数timer如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。如果timerNULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳

time函数的时候需要包含头⽂件:time.h

如果只是让time函数返回时间戳,我们就可以这样写:

1  time(NULL);//调⽤time函数返回时间戳,这⾥没有接收返回值
• 1

话不多说,让我们上代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
 //使⽤time函数的返回值设置种⼦
 //因为srand的参数是unsigned int类型,我们将time函数的返回值强制类型转换
 
  srand((unsigned int)time(NULL));
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());

  return 0;
}

第一次运行:

第二次运行:

(注:截图只是当时程序运⾏的结果,你的运⾏结果不⼀定和这个⼀样,,(因为返回的时间不一样))

四 、设置随机数的范围

srand函数是不需要频繁调⽤的,⼀次运⾏的程序中调⽤⼀次就够了。

如果我们要⽣成0~99之间的随机数,⽅法如下:

1 rand() %100;//余数的范围是0~99

如果要⽣成1~100之间的随机数,⽅法如下:

rand()%100+1;//%100的余数是0~99,而0 ~  99的数字+1,范围是1~100

如果要⽣成100~200的随机数,⽅法如下:

100 + rand()%(200-100+1)
 //余数的范围是0~100,加100后就是100~200 所以如果要⽣成a~b的随机数,⽅法如下:

所以如果要⽣成a~b的随机数,⽅法如下:

a + rand()%(b-a+1)

五、猜数字游戏实现

5.1打印菜单

首先菜单一点是要打印的,因此我们可以使用do while循环先打印一次再判断:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
  do{
  printf("****  猜数字小游戏  ****\n");
    printf("******  1. play  ******\n");
    printf("******  0. exit  ******\n");
    printf("***********************\n");
    }while(0);
    return 0;
 }

当然我们也可以用函数对打印菜单进行封装:

void menu()
{
    printf("****  猜数字小游戏  ****\n");
    printf("******  1. play  ******\n");
    printf("******  0. exit  ******\n");
    printf("***********************\n");
}
int main()
{
    do 
    {
        menu();
    } while (0);
    return 0;
}

5.2选择

打印菜单后,我们接下来就是游戏玩,还是不玩,

void menu()
{
    printf("****  猜数字小游戏  ****\n");
    printf("******  1. play  ******\n");
    printf("******  0. exit  ******\n");
    printf("***********************\n");
}
int main()
{
    int input = 0;
    do 
    {
        menu();
        printf("请输入-->\n");
        scanf("%d", &input);//输入1 或 0
        switch (input)//对输入的值进行选择,因此用了switch语句
        {
            case 1:
                printf("猜数字小游戏启动!\n");
                break;
            case 0:
                printf("退出游戏!!!\n");
                break;
            default :
                printf("输入错误,请重新选择!!\n");

        }
    } while (input);//这里我们可以把 0 改为input,因为0只能循环一次,
    //input可以选择 1或者0来进行游戏的选择
    return 0;
}

【C语言】猜数字小游戏的一步一步实现2:https://developer.aliyun.com/article/1474631

相关文章
|
2天前
|
C语言
【C语言】猜数字小游戏的一步一步实现2
【C语言】猜数字小游戏的一步一步实现
|
2天前
|
程序员 C语言
【C语言实战项目】猜数字游戏
【C语言实战项目】猜数字游戏
31 0
【C语言实战项目】猜数字游戏
|
2天前
|
C语言
C语言之三子棋小游戏
C语言之三子棋小游戏
|
2天前
|
C语言
关于使用C语言编写一个简单的猜数字游戏
关于使用C语言编写一个简单的猜数字游戏
25 0
|
2天前
|
C语言
C语言之实现贪吃蛇小游戏篇(2)
C语言之实现贪吃蛇小游戏篇(2)
26 1
|
2天前
|
存储 小程序 编译器
C语言之三子棋小游戏的应用
C语言之三子棋小游戏的应用
|
2天前
|
算法 编译器 C语言
C语言猜数字小游戏(也包含python实现的用法)
本文基于VS2022、pycharm和前面的知识,写一个凭借分支与循环的小游戏,比如: 写一个猜数字游戏 游戏要求: 电脑自动生成1~100的随机数 玩家猜数字,猜数的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束 在pyhton中生成随机数是比较简单的,可以直接导入random的包,直接生成随机数,导致写猜数字小游戏变成了判读语句和循环语句嵌套就能写出来,所以我不做过多的介绍了,可以直接看后面的代码展示,想了解更多的python可看python的基础知识,这里面有我在学习python的过程中写的笔记
35 0
|
2天前
|
C语言
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
|
2天前
|
人工智能 机器人 测试技术
【C语言】C语言实现猜单词小游戏(源码+报告)【独一无二】
【C语言】C语言实现猜单词小游戏(源码+报告)【独一无二】
|
2天前
|
存储 定位技术 C语言
基于C语言实现扫雷小游戏
本文介绍了使用C语言实现扫雷小游戏的过程。扫雷是一款经典的单机游戏,玩家需要通过点击方格来揭示数字或地雷,最终清除所有非地雷方格。实现过程中,首先定义了游戏所需的数据结构,如游戏地图、玩家信息等。然后,实现了游戏的初始化、渲染、输入处理等核心功能。在游戏逻辑方面,处理了点击事件、数字计算和胜负判断等。通过不断优化和完善,最终完成了基于C语言的扫雷小游戏实现,为玩家提供了一种简单有趣的游戏体验。
28 0