详解猜数字小游戏

前言: 经历了前段时间的学习,我已经对C语言有了大概的了解,C语言的基础知识我也掌握了一些,现在将学到的知识应用起来,完成了这个集分支、循环语句,函数的知识为一体的猜数字小游戏,现特意将所思所想分享给大家,希望对大家带来一些帮助。

目录

1. 游戏的简单框架

2. 游戏执行的主体

3. 执行游戏及完整代码展示


4af5b7f9eead4a83857454e27ff28c99.jpeg

这里特意将帅气的赤井和睿智的柯南献给大  家,希望大家可以和他们一样NB!!!

1. 游戏的简单框架

猜数字游戏的主框架是放在main函数内的登录游戏的部分,我们为了能够多次玩游戏,应该要使该部分置于循环语句中,而这里又有一个妙处,那就是运用do while循环语句。根据该语句的特性,先执行再判断,那么最妙的地方就在判断部分。

我们可以先设计一个登录界面,这里设计一个menu()函数来完成这项功能。界面能够在游戏开始前显示当输入的值为1时,进入游戏;当输入的值为0时,退出游戏。

代码表示为:

0fd9e421cadc4b96bb8e8037e9ce0d62.png

 接下来玩家就要选择是否进入游戏了,而这个选择的值则可以体现出循环判断部分的妙处,那就是将输入的选择值直接作为循环的判断条件.这样做是因为输入值选择是否进入游戏时有三种情况:

(1) 输入1,进入游戏

(2) 输入0,退出游戏

(3) 输入其他值,显示输入错误,重新输入

显然,在do while语句中的判断条件中,只有出现情况(2)时才会终止循环(0为假),不再游戏。而情况(1)和(3)会使循环继续进行,这样就能够很好地满足多次游戏的需求。

考虑完这些后要考虑的就是输入选择值后会产生哪些状态。那我们要用if else语句吗?其实,在这里使用分支语句switch又起到了一个简化的作用,可以简便而快速的执行输入值后的状态.

根据以上分析,可以得到这个游戏主体的代码:dd9c78cda9084b56bbb6fd30e1f70875.png

 这个代码中,我们还未理解的无非就是输入1后游戏执行的函数了,接下来我会将该函数执行的主体具体分析一下。

2. 游戏执行的主体

对于这个猜数字游戏而言,最重要的就是main函数内调用的game()函数了,它会单独执行游戏过程,使达到玩猜数字游戏的效果。

我们要想编写好这个游戏执行的程序,就应该了解猜数字游戏的基本思路:

(1) 电脑产生一个随机值(这里为了方便完成猜数字游戏的过程,特将随机值定在1~100内)

(2) 玩家输入想猜的数字

(3) 如果猜错了,电脑要给玩家提示,使玩家持续地猜,直至猜对为止

(4) 电脑的提示与判断(猜大了就显示猜大了,猜小了显示猜小了,猜对了显示猜对了)

根据这四条基本思路,我们就可以开始着手编写代码了。而完成这四条思路最大的障碍无非是第一条中产生1~100中的随机数了,这也是我要具体分析的地方。

随机数的产生:

C语言中有一个库函数rand()是专门用来产生随机数的,而使用rand()之前要先使用另一个库函数srand(),它是用来设置随机数种子的,其参数为无符号整型(unsigned int),而什么作为参数时会产生最随机的数呢,当然是时间了。所以这里我们可以运用一个库函数time(),而他的参数可以放个空指针(NULL),这样就可以准备好要产生一个随机数了。3e7837af6414444ebbdc00d4d6979394.png

 然后就是rand()函数的应用了9693384b7f5b49428d3efbdb57666fde.png

 由rand()函数的相关说明也可以知道,其产生随机数范围较大,而这并不满足我们的要求,因此就要采取相关措施来缩小到我们需要值的范围。

699de65c5d1b499c8276868554d293d1.png

 上图就很好地介绍了缩值的方法,所以要产生一个1~100的随机数,进行以下两步就好了。

f5cafaeecbb84459b8e14487f7bf0493.png

注:  rand()函数与srand()函数的使用需要引用头文件<stdlib.h>

其他步骤按照游戏的基本思路应该不难写出相关代码,这里就不一一赘述了,不知道了可以直接见下面完整的代码,自己好好分析一下,这样执行游戏的函数就编写完成了。

                                          放张图让各位放松下哈,别嫌弃哟

9c76d6cbfb0440dfb3a46b7615483f21.jpeg

3. 执行游戏及完整代码展示

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>//猜数字小游戏(系统产生1~100的随机数)
#include <time.h>
#include <stdlib.h>
void menu()
{
    printf("*****welcome******\n");
    printf("******1.play******\n");
    printf("******0.exit******\n");
    printf("******************\n");
}
void game()
{
    int guess = 0;
    srand((unsigned)time(NULL));
    int i = rand() % 100 + 1;//产生一个1~100的随机数
    while (1)
    {
        printf("请猜数:>");
        scanf("%d", &guess);
        if (guess > i)
        {
            printf("猜大了\n");
        }
        else if (guess < i)
        {
            printf("猜小了\n");
        }
        else
        {
            printf("猜对了\n");
            break;
        }
    }
}
int main()
{
    menu();
    int input = 0;
    do
    {
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("输入错误,请重新输入\n");
            break;
        }
    } while (input);
    return 0;
}

df0fe42e04f043fb921fb57ba414bef2.png

9bb5fbefbb894f14af848f7dd1fba181.jpeg

这次的分享到这里就结束了,如有错误和需要改进的地方,还望多多指正,再见了各位,好好期待我下次更优秀的文章哟。

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值