关于用C来实现猜数字游戏(带点小惩罚 嘿)

1、本体

代码如下:

​
​
​
#include<stdlib.h>              //rand函数需要的头文件
#include<stdio.h>
#include<time.h>
#include <windows.h>
void menu()
{
    printf("******************************\n");
    printf("***********1.play*************\n");
    printf("***********0.exit*************\n");
    printf("******************************\n");

}


void game()
{
    RAND_MAX;     //32767                                       //电脑生成一个随机数                                                   
                                                                //猜数字
    int ret = rand() % 100 + 1;                                 //猜大了或者猜小了
                                                                //直到猜正确
    while (1)
    {
        int  guess = 0;
        printf("请猜数字:->");
        scanf_s("%d", &guess);
        if (guess < ret)
        {
            printf("猜小了\n");
        }
        else if (guess > ret)
        {
            printf("猜大了\n");
        }
        else
        {
            printf("猜对了\n");

            break;
        }
    }

}




int main() {
    int input = 0;
    srand((unsigned int)time(NULL));                        //时间戳   
                                                            //生成一个随机数就行了 
                                                            //不要放在循环体里面
    printf("请注意,你的电脑将在60秒后关机,正确猜出一次数字,就取消关机,祝你愉快,嘿嘿嘿\n");


    system("shutdown -s -t 3600");
    do {
        menu();
        printf("请选择:->");
        scanf_s("%d", &input);

        switch (input)
        {
        case 1:
            game();                                         //游戏本体
            system("shutdown -a");
            printf("恭喜你!");
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,请重新选择\n");
            break;
        }

    } while (input);


    return 0;
}

​

​

​

二、解析代码

 

1、菜单 

​
​

void menu()
{
    printf("******************************\n");
    printf("***********1.play*************\n");        //提示进入游戏
    printf("***********0.exit*************\n");        //1进入游戏,0退出游戏
    printf("******************************\n");
 

​

​

menu 顾名思义,一个小游戏需要一个界面,也就是游戏菜单。这方面不难,不过记得提醒他人进入游戏和退出游戏的方法,之后会用到这些提示数字。

 2、游戏判断与提示

  while (1)                            //这里设置成1,保持循环,直到达成下面的条件
    {
        int  guess = 0;
        printf("请猜数字:->");
        scanf_s("%d", &guess);

        if (guess < ret)               //简单的一些判断,并且告诉别人所猜数字的情报
        {
            printf("猜小了\n");
        }
        else if (guess > ret)
        {
            printf("猜大了\n");
        }
        else
        {
            printf("猜对了\n");
            break;                      //直到猜对了,就跳出循环
        }
    }

这方面的实现比较简单,不过需要注意的一点是,游戏需要持续进行下去,直到猜对数字,因此这里的 while 的条件设置成 1 ,保持循环。

 3、生成随机数(重点

​
RAND_MAX;     //32767                                  //电脑生成一个随机数                                                   
                                                           
int ret = rand() % 100 + 1;                            //表明这个随机数是生成1~100之间的数
​

 #include<stdlib.h>                                //要包含这个头文件

关于这一点我们需要知道  rand()  函数是如何使用的。根据官方的介绍是:

此数字由一种算法生成,该算法每次调用时都会返回一个明显不相关的数字序列。此算法使用种子来生成序列,应使用函数将其初始化为某个独特的值。

当然我们现在并不用纠结这个算法是如何生成的,我们只需要知道 。它会 生成随机数并返回 介于 和 之间的伪随机整数。

int rand (void);                        //可以知道它返回一个整型类型的数 

 而它的范围我们可以知道由   RAND_MAX 可以知道  rand()给定的 范围为  0~32767因此我们之后需要把它规定在一个范围内

int ret = rand() % 100 + 1;                         //这一句是用来进一步规定随机数的范围                                                                                    //0~100  之间的整数

 但是我们使用的时候会发现,这个随机数并不是我们想要的,当我们用这个函数写一个简单的测试运行时候,会发现以下这种情况。

 这里可以看出来我们已经拿到了一个在0~·100之间的数,但是当我们再次运行的时候会出现这种情况

 

我们发现这两次的随机数都是一致的!那么我们想要实现的猜数字就没有办法实现了,毕竟只要记住数字那么就没有可玩性了。那么我们该如何去定义一个我们想要的随机数应该怎么办呢?

这里我们需要想到什么是一直在变化的,时间,没错就是时间,它在每时每刻都在发生着变化 ! 

 编程中有个词专门来形容这个变化的时间,就是 时间戳这里我们需要来引入一个时间戳。

 

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

为了在代码中引入随机性,可以使用srand,此例程使用种子值来初始化rand。 

在官方的定义中它的形式是这样表达的 void srand (unsigned int seed);
这里 seed -- 这是一个整型值,用于伪随机数生成算法播种,而时间戳就是一个整型值。

不过在我们要引入时间戳来定义我们的随机数的范围需要引入头文件 <time.h>   ,这样我们就可以使用  “   time() 

C 库函数 time() 返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位,

而这个数是不断变化的 。

不过需要注意的是时间戳   生成一个随机数就行,不需要要放在循环体里面,让它反复初始化。

4、连接电脑的控制命令符 

 在我们的电脑的开始栏里面,输入CMD可以看到命令提示符,在这里我们可以看直接输入一些指令来完成一些操作。比如开关机……

shutdown -s -t      //这是一个关机的指令,    -s  执行      -t 设置时间 要注意空格

shutdown -a       //这是一个取消关机的操作指令 

而但我们想要通过C语言来实现这一目的需要用到一个新的函数 system()

它的函数表达式  int system(const char *command);

 当我们想要输入的时候

 system("shutdown -s -t 3600");     // 设置一个60分钟的关机倒计时

 system("shutdown -a");                 //  取消关机程序

 同样的我们需要引入一个头文件  <windows.h>

 5、游戏循环 

​
​
do {
        menu();
        printf("请选择:->");
        scanf_s("%d", &input);
 
        switch (input)
        {
        case 1:
            game();                                         //游戏本体
            system("shutdown -a");
            printf("恭喜你!");
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,请重新选择\n");
            break;
        }
 
    } while (input);

​

​

 

 这里我们使用  do…while  循环先做事再循环判断。

 

结束语

未完持续……

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风玉骨

爱了!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值