猜数字游戏

本文介绍了如何在C语言中使用rand和srand生成随机数,解决默认种子带来的问题,并加入time函数以实现随机种子。通过菜单和游戏循环,作者展示了如何编写一个猜数字游戏,并探讨了如何添加次数和时间限制功能。
摘要由CSDN通过智能技术生成

前言:

挺好玩的一个小游戏,把循环学完了就可以写了,挺好玩的,写这个可以适当的锻炼一下的自己写代码的能力,对自己的提升也是一个不错的选择。

前序:

写之前科普认识一下等会要用到的三个东西

rand():

C语⾔提供了⼀个函数叫 rand,可以随机生成一个数字

头文件

rand()函数的使用需要一个头文件stdlib.h

函数的输出格式如下:

(1)直接输出型

printf("%d",rand());

(2)间接输出型

int a=rand();

printf("%d",a);

这两种都是可以输出rand函数的

输出如下

输出弊端

但是,这个函数的不好i的地方是,不管多少此输入,随机出来的数都是相同的,如下

第一次输出

第二次输出

我们可以很明显的看出,两次输出的数字都是一样的,之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。 这样写出来的猜数字肯定没有意思,我们要写一个可以变化的随机数字的猜数字游戏出来,如果要让数字随机,那么我们只需要改变一下种子数就行了,这时我们引进第二个函数srand()。

输出范围:

若是要生成一个0-99之间的数字,则可以再rand()后面加上%100,即

rand()%100;    //余数范围0-99

若是想生成0-100只需要加1即可:rand()%100+1;     //余数范围0-100;

那么同理,100-200则可以写成:100+rand()%(200-100+1)//余数的范围是0~100,加100后就是100~200

若是想输出⽣成a~b的随机数,则写成

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

srand():

srand()可以初始化随机数的生成器

原型

而srand()的原型是

void srand (unsigned int seed);

原理

程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随 机数,这就⽭盾了。

这个时候我们可以使用time函数来对seed进行随机,也就是随着时间的变化,使得种子发生变化

time():

time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的 差值,单位是秒。

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

函数原型:

time_t time (time_t* timer);

头文件:

使用这个函数需要包含一个time.h的头文件来使用

若是只使用时间戳的话可以直接这样写:

time(NULL);

我们可以看到,多运行几次,结果就不相同了

三个函数介绍完成,那么我们可以开始编写游戏了

主体:

首先,这个游戏我们分成三个部分,游戏肯定是有菜单的,所以我们首先创建一个菜单

(1)菜单 menu():

我们利用menu函数创建一个精美的菜单:

里面的装饰可以自己进行调整,没必要一定要按照这个格式来

menu的函数格式一般都是里面只放printf()【我目前学的就是这个,有其他的话可以补充一下(或者等我学到再说吧)】

(2)游戏 game():

创建完了菜单就该进入游戏了吧,这里我们使用一个game函数来编写一个游戏界面:

实验原理:

首先,我们先用整形定义一个随机数,用于我们后边要进行的猜的一个数字;

接着再定义一个我们输入的数字,利用if对这两个数字进行对比,提示玩家这个数是大了,还是小了,让玩家继续猜,直到猜到为止,当然这里面要插入一个while语句进行循环,不然就会发现,你只输入了一次就停止了游戏。

代码截图:

到此,我们就将游戏界面做完了

主函数部分:

最后我们再进行主函数部分的编写,就可以完成这个小游戏的编写了

实验原理:

定义一个整形,使用switch语句对游戏菜单进行选择,并且使用do-while语句进行一次强制的进入菜单界面,利用时间戳生成一个随机数字,玩家通过输入数字进入游戏,利用do-while循环可进行多次游戏。

代码截图:

到这里就可以已经完成了这个小游戏了,但是,我们还可以改进一下

改进:

(1)次数限制

我们可以进行次数的限制,在结束的时候告诉玩家正确答案,也就是在game()函数部分进行一个改进

如图:

(2)时间限制

好消息,我还没学会,等我学会再说吧

又一个好消息,去ai找了一下发现还是可以写一下的

在game函数部分进行一个改进,但是我发现,我插进去的时候报错了,找不到错误,把代码给你们,你们自己试一下吧

在C语言中,可以通过使用计时器来对游戏进行时长限制。一种常见的方式是使用C语言标准库中的`time.h`头文件来获取当前时间,并在游戏开始时记录下时间。然后在游戏进行过程中不断获取当前时间,并计算与开始时间的时间差,从而判断是否超过了预设的时长限制。

以下是一个简单示例,演示了如何在C语言中限制游戏时长:

```c
#include <stdio.h>
#include <time.h>

int main() {
    time_t startTime, currentTime;
    int gameDuration = 60; // 游戏时长限制,假设为60秒

    time(&startTime); // 记录游戏开始时间

    // 游戏循环
    while (1) {
        // ... 游戏逻辑处理 ...

        // 获取当前时间
        time(&currentTime);

        // 计算游戏已进行的时间
        double elapsedTime = difftime(currentTime, startTime);

        // 检查游戏时长是否超过限制
        if (elapsedTime >= gameDuration) {
            printf("游戏时间已用尽!\n");
            break;
        }

        // ... 其他游戏逻辑 ...

        // 一定要在游戏主循环中增加一些睡眠来避免过分占用处理器
    }

    return 0;
}
```

在上面的示例中,我们使用`time`函数来获取当前时间,并使用`difftime`函数计算游戏进行的时间。然后在游戏循环中检查了游戏进行的时间是否已经超过了预设的时长限制,如果超过了就退出游戏。

需要注意的是,这只是一个简单的示例,并不包含游戏逻辑的实际代码。实际的游戏逻辑可能更加复杂,需要根据具体情况来结合时长限制的检查。

猜数字代码:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
    printf("*****************\n");
    printf("***1.进入游戏***\n");
    printf("***0.退出游戏***\n");
    printf("*****************\n");
}
//创建一个精美的简易菜单
void game()
{
    int a = rand() % 100 + 1;
    int b = 0;
    int d = 5;
    while (d)
    {
        printf("你还有%d次机会\n", d);
        printf("请输入数字:>"); 
        scanf("%d",&b);
        if (a > b)
            printf("猜小了\n");
        else if (a < b)
            printf("猜大了\n");
        else
        {
            printf("猜对了\n");
            break;
        }
        d--;
        if (d == 0)
            printf("正确的数字是%d", a);
    }
    //游戏进行部分
}
int main()
{
    int c = 0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
            printf("请选择:>");
        scanf("%d",&c);
        switch (c)
        {
        case 1:
            game();
        case 2:
            printf("游戏结束\n");
            break;
        default:
            printf("输入错误,请重新输入:\n");
            break;
        }
    } while (c);
    return 0;
}//主函数部分

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值