C语言编一个数字益智小游戏

程序功能及运行情况

设计的程序是一个数字益智游戏,旨在培养小朋友玩家的数学思维,提高玩家的数学能力。游戏共设有四个不同的小游戏,分别是一位数四则运算、两位数四则运算、找最值游戏、排序游戏。程序能实现产生随机题目,并能检验玩家的作答是否正确。为了小朋友能感受到游戏的乐趣,特意设置了得分系统,答对不同题目有不同的加分,并会根据总得分划分不同「段位」,呈现给玩家。另外,程序还运用了更加充满活力的设计,让玩家爱上该游戏。

程序运行截图
主菜单

E5C5F5A3-0450-7554-D6F5-A1DB5B1D8C05.png

37AE29AA-96AF-5D4F-C469-F6FAEC1BA6F4.png

运算游戏

583232A8-C674-6679-4F4D-1BA3F2F91C71.png

5A4A3928-B8C1-2250-E32C-413DAE59FEEA.png

找最值游戏

8500FAEE-072F-9937-81C0-C51B8C08B012.png

排序游戏

EEA946EF-4C0F-C605-8AA5-C513EC037842.png

得分统计

9DFDA81C-5A86-6F2E-2D21-1B68477DF982.png

代码部分
头文件区域
#include<stdio.h>  
#include<string.h>  
#include<stdlib.h>  
#include<time.h>  
#include<math.h>  
int score0 = 0;
int u, z;
启动界面及主菜单
int main()                                     //主函数游戏说明  
{
    int menu();
    char o;
    printf("\n\n");
    printf("\t=  =  =  =  =  =  =  =   =  =  =  =  =  =  =  =\n");
    printf("\t=            数 字 益 智 小 游 戏             =\n");
    printf("\t=                                             =\n");
    printf("\t=     欢迎游玩该数字益智小游戏,游戏共设有    =\n");
    printf("\t=     四个小游戏,其中『算』小游戏各设有四    =\n");
    printf("\t=     个关卡。当你挑战难度越高的小游戏,并    =\n");
    printf("\t=     挑战成功,你将获得更高的得分奖励,最    =\n");
    printf("\t=     终将根据你的总得分划分你的游戏段位。    =\n");
    printf("\t=                                             =\n");
    printf("\t=                                             =\n");
    printf("\t=      *   *   *   *   *   *   *   *   *      =\n");
    printf("\t=      *          游  戏  段  位       *      =\n");
    printf("\t=      *  『青铜』 ---   5 分 以 下    *      =\n");
    printf("\t=      *  『白银』 ---   5 分 - 10 分  *      =\n");
    printf("\t=      *  『黄金』 ---  10 分 - 15 分  *      =\n");
    printf("\t=      *  『铂金』 ---  15 分 - 20 分  *      =\n");
    printf("\t=      *  『钻石』 ---  20 分 - 25 分  *      =\n");
    printf("\t=      *  『星耀』 ---  25 分 - 30 分  *      =\n");
    printf("\t=      *  『王者』 ---  30 分 以 上    *      =\n");
    printf("\t=      *   *   *   *   *   *   *   *   *      =\n");
    printf("\t=                                             =\n");
    printf("\t=               作  者 : Cowjiang            =\n");
    printf("\t=                                             =\n");
    printf("\t=  =  =  =  =  =  =  =   =  =  =  =  =  =  =  =\n\n");
    printf("\t             按回车键即可开始游戏");
    scanf_s("%c", &o, 1);
    if (o == '\n')                                 //输入回车开始游戏  
    {
        system("cls");
        menu();
    }
    else
        exit(0);
}

int menu()                                   //游戏主菜单函数  
{
    void one_arithmetic();
    void two_arithmetic();
    void comparation();
    void maxmin();
    int score();
    int scores();
    int scorep();
    int o;
    system("color 30");
    printf("\n\n");
    printf("\t                   **                      \n");
    printf("\t              *          *                 \n");
    printf("\t          *    主  菜  单     *            \n");
    printf("\t     *                             *       \n");
    printf("\t*  *  *  *  *  *  *   *  *  *  *  *  *  *  *   \n");
    printf("\t       *                            *        \n");
    printf("\t       *    1.『 算 』一位数运算    *        \n");
    printf("\t       *    2.『 算 』两位数运算    *        \n");
    printf("\t       *    3.『 找 』夹缝找最值    *        \n");
    printf("\t       *    4.『 排 』排序比大小    *        \n");
    printf("\t       *    5. 我 的 目 前 得 分    *        \n");
    printf("\t       *    6. 退 出 益 智 游 戏    *        \n");
    printf("\t       *                            *        \n");
    printf("\t       *   *   *  *  *  *  *   *    *      \n\n");
    printf("\t             请输入序号选择:");
    scanf_s("%d", &o);
    if (o == 1)
    {
        one_arithmetic();
    }
    else if (o == 2)
    {
        two_arithmetic();
    }
    else if (o == 3)
    {
        maxmin();
    }
    else if (o == 4)
    {
        comparation();
    }
    else if (o == 5)
    {
        scorep();
    }
    else if (o == 6)
    {
        printf("\n\t\t= = = = = = = = = = = = = = = = =\n");
        printf("\t\t=                               =\n");
        printf("\t\t=         感谢你的游玩!        =\n");
        printf("\t\t=                               =\n");
        printf("\t\t= = = = = = = = = = = = = = = = =\n");
        exit(0);
    }
    else
    {
        printf("\n\t   你输入的数字序号有误噢,请重新选择!\n");
        system("pause");
        system("cls");
        menu();
    }
}
得分统计
int scorep()                            //查看当前得分  
{
    system("color F4");
    z = score0;
    system("cls");
    printf("\n\n");
    printf("\t\t            *                   \n");
    printf("\t\t           * *                  \n");
    printf("\t\t          *   *                 \n");
    printf("\t\t*  *  *  *     *  *  *  *       \n");
    printf("\t\t    *   当前得分:  *           \n");
    printf("\t\t       *  %2d分  *              \n", z);
    printf("\t\t      *    * *    *             \n");
    printf("\t\t     *  *       *  *            \n");
    if (z <= 5)
    {
        printf("\t\t    **   [青 铜]   **           \n");
        printf("\t\t   *                 *          \n");
    }
    else if (z > 5 && z <= 10)
    {
        printf("\t\t    **   [白 银]   **           \n");
        printf("\t\t   *                 *          \n");
    }
    else if (z > 10 && z <= 15)
    {
        printf("\t\t    **   [黄 金]   **           \n");
        printf("\t\t   *                 *          \n");
    }
    else if (z > 15 && z <= 20)
    {
        printf("\t\t    **   [铂 金]   **           \n");
        printf("\t\t   *                 *          \n");
    }
    else if (z > 20 && z <= 25)
    {
        printf("\t\t    **   [钻 石]   **           \n");
        printf("\t\t   *                 *          \n");
    }
    else if (z > 25 && z <= 30)
    {
        printf("\t\t    **   [星 耀]   **           \n");
        printf("\t\t   *                 *          \n");
    }
    else if (z > 30)
    {
        printf("\t\t    **   [王 者]   **           \n");
        printf("\t\t   *                 *          \n");
    }

    printf("\n\n\t    继续游戏请输入1,退出游戏请输入2 :");
    scanf_s("%d", &u);
    if (u == 1)                                //返回主菜单  
    {
        system("cls");
        menu();
    }
    else if (u == 2)                         //退出游戏  
    {
        printf("\n\t\t= = = = = = = = = = = = = = = = =\n");
        printf("\t\t=                               =\n");
        printf("\t\t=         感谢你的游玩!        =\n");
        printf("\t\t=                               =\n");
        printf("\t\t= = = = = = = = = = = = = = = = =\n");
        exit(0);
    }
    else
    {
        printf("\n\t   你输入的数字序号有误噢,返回主菜单!\n");
        menu();
    }
}

int score()                            //加分函数  
{
    score0++;
    return score0;
}

int scores()                           //减分函数  
{
    score0--;
    return score0;
}
一位数运算
void one_arithmetic()                  //一位数运算  
{
    int p, a, b, c, d, f, g, h, l, m;
    float e;
    srand(time(NULL));
    a = rand() % 10;
    b = rand() % 10;
    g = rand() % 10;
    h = rand() % 10;
    system("color E0");
    system("cls");
    printf("\n\n\t\t *  *  *  *   *  *  *  * \n");    //一位数运算主菜单  
    printf("\t\t *                     * \n");
    printf("\t\t *  1. [第一关] 加 法  * \n");
    printf("\t\t *  2. [第二关] 减 法  * \n");
    printf("\t\t *  3. [第三关] 乘 法  * \n");
    printf("\t\t *  4. [第四关] 除 法  * \n");
    printf("\t\t *  5. [进阶]混合运算  * \n");
    printf("\t\t *  6. [返 回] 主菜单  * \n");
    printf("\t\t *                     * \n");
    printf("\t\t *  *  *  *   *  *  *  * \n");
    printf("\t\t          * * *         \n");
    printf("\t\t          * * *         \n");
    printf("\t\t       *  * * *  *      \n");
    printf("\t\t          * * *         \n");
    printf("\t\t            *           \n");
    printf("\t\t请输入数字序号选择挑战关卡:");
    scanf_s("%d", &p);
    while (p == 1)                          //一位数加法  
    {
        system("cls");
        printf("\n\t%d + %d = ", a, b);
        scanf_s("%d", &c);
        if (c == a + b)
        {
            system("color AE");
            printf("\n太棒了!挑战成功,加 1 分!\n\n");
            score();
            system("pause");
        }
        else if (c != a + b)
        {
            system("color 4E");
            printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
            system("pause");
        }
        one_arithmetic();

    }
    while (p == 2)                                   //一位数减法  
    {
        system("cls");
        if (a > b)                      //控制大数减小数  
        {
            printf("\n\t%d - %d = ", a, b);
            scanf_s("%d", &c);
            if (c == a - b)
            {
                system("color AE");
                printf("\n太棒了!挑战成功,加 1 分!\n\n");
                score();
                system("pause");
            }
            else if (c != a - b)
            {
                system("color 4E");
                printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
                system("pause");
            }
            one_arithmetic();
        }
        else if (a < b)
        {
            system("cls");
            printf("\n\t%d - %d = ", b, a);
            scanf_s("%d", &c);
            if (c == b - a)
            {
                system("color AE");
                printf("\n太棒了!挑战成功,加 1 分!\n\n");
                score();
                system("pause");
            }
            else if (c != b - a)
            {
                system("color 4E");
                printf("\n\t太可惜了!挑战失败,不要灰心噢!\n\n");
                system("pause");
            }
            one_arithmetic();
        }
    }
    while (p == 3)      //一位数乘法  
    {
        system("cls");
        printf("\n\t%d * %d = ", a, b);
        scanf_s("%d", &c);
        if (c == a * b)
        {
            system("color AE");
            printf("\n太棒了!挑战成功,加 1 分!\n\n");
            score();
            system("pause");
        }
        else if (c != a * b)
        {
            system("color 4E");
            printf("\n\t\t太可惜了!挑战失败,不要灰心噢!\n\n");
            system("pause");
        }
        one_arithmetic();
    }
    while (p == 4)             //一位数除法  
    {
        system("cls");
        b = rand() % (9) + 1;                                    //防止被除数为0  
        printf("\n\t(四舍五入保留整数)%d除以%d等于", a, b);
        scanf_s("%f", &e);
        f = b / 2;                                           //四舍五入  
        if (a % b <= f)
        {
            d = (int)(e);
            if (d == a / b)
            {
                system("color AE");
                printf("\n太棒了!挑战成功,加 1 分!\n\n");
                score();
                system("pause");
            }
            else if (d != a / b)
            {
                system("color 4E");
                printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
                system("pause");
            }
        }
        if (a % b > f)
        {
            d = (int)(e - 0.5);
            if (d == a / b)
            {
                system("color AE");
                printf("\n太棒了!挑战成功,加 1 分!\n\n");
                score();
                system("pause");
            }
            else if (d != a / b)
            {
                system("color 4E");
                printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
                system("pause");
            }
        }
        one_arithmetic();
    }
    while (p == 5)                          //一位数混合运算  
    {
        system("cls");
        printf("\n\t%d + %d * ( %d - %d ) = ", a, b, g, h);
        scanf_s("%d", &l);
        m = a + b * (g - h);
        if (l == m)
        {
            system("color AE");
            printf("\n太棒了!挑战成功,加 2 分!\n\n");
            score();
            score();
            system("pause");
        }
        else if (l != m)
        {
            system("color 4E");
            printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
            system("pause");
        }
        one_arithmetic();
    }
    while (p == 6)
    {
        system("cls");
        menu();
    }
    while (p < 1 || p > 6)
    {
        system("color 4E");
        printf("\n\t\t输入数字序号有误噢,请重新输入!\n\n");
        system("pause");
        one_arithmetic();
    }
}
两位数运算
void two_arithmetic()                     //两位数运算  
{
    int p, a, b, c, d, f, g, h, l, m;
    float e;
    srand(time(NULL));
    a = rand() % (90) + 10;
    b = rand() % (90) + 10;
    g = rand() % (90) + 10;
    h = rand() % (90) + 10;
    system("color B0");
    system("cls");
    printf("\n\n\t\t *  *  *  *   *  *  *  * \n");     //两位数运算主菜单  
    printf("\t\t *                     * \n");
    printf("\t\t *  1. [第一关] 加 法  * \n");
    printf("\t\t *  2. [第二关] 减 法  * \n");
    printf("\t\t *  3. [第三关] 乘 法  * \n");
    printf("\t\t *  4. [第四关] 除 法  * \n");
    printf("\t\t *  5. [进阶]混合运算  * \n");
    printf("\t\t *  6. [返 回] 主菜单  * \n");
    printf("\t\t *                     * \n");
    printf("\t\t *  *  *  *   *  *  *  * \n");
    printf("\t\t          * * *         \n");
    printf("\t\t          * * *         \n");
    printf("\t\t       *  * * *  *      \n");
    printf("\t\t          * * *         \n");
    printf("\t\t            *           \n");
    printf("\t\t请输入数字序号选择挑战关卡:");
    scanf_s("%d", &p);
    while (p == 1)                      //两位数加法  
    {
        system("cls");
        printf("\n\t%d + %d = ", a, b);
        scanf_s("%d", &c);
        if (c == a + b)
        {
            system("color AE");
            printf("\n太棒了!挑战成功,加 1 分!\n\n");
            score();
            system("pause");
        }
        else if (c != a + b)
        {
            system("color 4B");
            printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
            system("pause");
        }
        two_arithmetic();
    }
    while (p == 2)            //两位数减法  
    {
        if (a > b)             //控制大数减小数  
        {
            system("cls");
            printf("\n\t%d - %d = ", a, b);
            scanf_s("%d", &c);
            if (c == a - b)
            {
                system("color AE");
                printf("\n太棒了!挑战成功,加 1 分!\n\n");
                score();
                system("pause");
            }
            else if (c != a - b)
            {
                system("color 4B");
                printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
                system("pause");
            }
            two_arithmetic();
        }
        else if (a < b)
        {
            system("cls");
            printf("\n\t%d - %d = ", b, a);
            scanf_s("%d", &c);
            if (c == b - a)
            {
                system("color AE");
                printf("\n太棒了!挑战成功,加 1 分!\n\n");
                score();
                system("pause");
            }
            else if (c != b - a)
            {
                system("color 4B");
                printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
                system("pause");
            }
            two_arithmetic();
        }
    }
    while (p == 3)                                     //两位数乘法  
    {
        system("cls");
        printf("\n\t%d * %d = ", a, b);
        scanf_s("%d", &c);
        if (c == a * b)
        {
            system("color AE");
            printf("\n太棒了!挑战成功,加 1 分!\n\n");
            score();
            system("pause");
        }
        else if (c != a * b)
        {
            system("color 4B");
            printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
            system("pause");
        }
        two_arithmetic();
    }
    while (p == 4)                                          //两位数除法  
    {
        b = rand() % (9) + 1;                             //防止被除数为0  
        system("cls");
        printf("\n\t(四舍五入保留整数)%d除以%d等于", a, b);
        scanf_s("%f", &e);
        f = b / 2;                                    //四舍五入  
        if (a % b <= f)
        {
            d = (int)(e);
            if (d == a / b)
            {
                system("color AE");
                printf("\n太棒了!挑战成功,加 1 分!\n\n");
                score();
                system("pause");
            }
            else if (d != a / b)
            {
                system("color 4B");
                printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
                system("pause");
            }
        }
        if (a % b > f)
        {
            d = (int)(e - 0.5);
            if (d == a / b)
            {
                system("color AE");
                printf("\n太棒了!挑战成功,加 1 分!\n\n");
                score();
                system("pause");
            }
            else if (d != a / b)
            {
                system("color 4B");
                printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
                system("pause");
            }
        }
        two_arithmetic();
    }
    while (p == 5)               //两位数混合运算  
    {
        system("cls");
        printf("\n\t%d + %d * ( %d - %d ) = ", a, b, g, h);
        scanf_s("%d", &l);
        m = a + b * (g - h);
        if (l == m)
        {
            system("color AE");
            printf("\n太棒了!挑战成功,加 2 分!\n\n");
            score();
            score();
            system("pause");
        }
        else if (l != m)
        {
            system("color 4B");
            printf("\n太可惜了!挑战失败,不要灰心噢!\n\n");
            system("pause");
        }
        one_arithmetic();
    }
    while (p == 6)
    {
        system("cls");
        menu();
    }
    while (p < 1 || p > 6)
    {
        system("color 4B");
        printf("\n\t\t输入数字序号有误噢,请重新输入!\n\n");
        system("pause");
        two_arithmetic();
    }
}
排序游戏
void comparation()                            //排序游戏  
{
    int a[5], b[5];
    int i, j, n, p, q;
    srand(time(NULL));
    for (i = 0; i < 5; i++)
        a[i] = rand() % 10;
    system("cls");
    system("color 9F");
    printf("\n\n\t*  *  *  *  *  *  *  *  *  *  *  *  *  *\n");       //排序游戏规则  
    printf("\t*             游 戏 规 则              *\n");
    printf("\t*   开始游戏后将会显示随机五个整数,   *\n");
    printf("\t*   请根据提示从小到大依次输入排序后   *\n");
    printf("\t*   的五个整数,若排序正确即可获得 3   *\n");
    printf("\t*   分奖励。加油噢,你能行!           *\n");
    printf("\t*  *  *  *  *  *  *  *  *  *  *  *  *  *\n");
    printf("\t                   * * *          \n");
    printf("\t                   * * *          \n");
    printf("\t                *  * * *  *       \n");
    printf("\t                   * * *          \n");
    printf("\t                     *            \n");
    printf("\t         输入数字 0 即可开始游戏:");
    scanf_s("%d", &p);
    if (p == 0)                                                                
        printf("\n\n\t*  *  *  *  *  *  *  *  *  *  *  *  *  *\n");
        printf("\t*                                      *\n");
        printf("\t* ");
        for (i = 0; i < 5; i++)
            printf("   %d   ", a[i]);
        for (j = 0; j < 4; j++)                      //将数组从小到大排列  
        {
            for (i = 0; i < 4 - j; i++)
            {
                if (a[i] > a[i + 1])
                {
                    n = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = n;
                }
            }
        }
        printf("  *\n");
        printf("\t*                                      *\n");
        printf("\t*  *  *  *  *  *  *  *  *  *  *  *  *  *\n\n");
        printf("接下来,请从小到大输入排序后的五个整数(用空格隔开):");
        for (i = 0; i < 5; i++)
            scanf_s("%d", &b[i]);
        for (i = 0; i < 5; i++)                          //验证回答正确与否  
        {
            if (a[i] == b[i])
                continue;
            else
            {
                system("color 49");
                printf("\n\t太可惜了,就差一点就成功了!再挑战一次吧!\n\n");
                system("pause");
                comparation();
            }

        }
        system("color AF");
        printf("\n哇你太棒啦,挑战成功!获得 3 分奖励!\n\n");
        score();
        score();
        score();
        system("pause");
        system("color 0F");
        printf("\n\n想挑战别的游戏吗?\n\n");
        printf("1. 挑战其它游戏   ");
        printf("   2. 继续挑战排序游戏   ");
        printf("   3. 查看当前得分\n\n");
        printf("回复数字序号选择一项吧:");
        scanf_s("%d", &q);
        if (q == 2)
        {
            system("cls");
            comparation();
        }
        else if (q == 3)
            scorep();
        else
        {
            system("cls");
            menu();
        }

    }
    else               //退出排序游戏?  
    {
        system("color F0");
        printf("\n\n想玩别的游戏吗?\n\n");
        printf("1. 挑战其它游戏   ");
        printf("   2. 继续当前游戏\n\n");
        printf("回复数字序号选择一项吧:");
        scanf_s("%d", &q);
        if (q == 2)
            comparation();
        else
        {
            system("cls");
            menu();
        }
    }
}
找最值游戏
void maxmin()
{
    int i, j, n, p, q, max, min, maxx, minn;
    int a[5];
    srand(time(NULL));
    system("color DF");
    system("cls");
    printf("\n\n\t*  *  *  *  *  *  *  *  *  *  *  *  *  *\n");       //找最值游戏规则  
    printf("\t*             游 戏 规 则              *\n");
    printf("\t*   开始游戏后将会显示随机五个整数,   *\n");
    printf("\t*   请分别找出五个整数的最大值和最小   *\n");
    printf("\t*   值,若回答正确即可获得 2 分奖励。  *\n");
    printf("\t*   加油噢,你能行!                   *\n");
    printf("\t*  *  *  *  *  *  *  *  *  *  *  *  *  *\n");
    printf("\t                   * * *          \n");
    printf("\t                   * * *          \n");
    printf("\t                *  * * *  *       \n");
    printf("\t                   * * *          \n");
    printf("\t                     *            \n");
    printf("\t         输入数字 0 即可开始游戏:");
    scanf_s("%d", &p);
    if (p == 0)
    {
        for (i = 0; i < 5; i++)
            a[i] = rand() % 10;
        printf("\n\n\t*  *  *  *  *  *  *  *  *  *  *  *  *  *\n");
        printf("\t*                                      *\n");
        printf("\t* ");
        for (i = 0; i < 5; i++)
            printf("   %d   ", a[i]);
        printf("  *\n");
        printf("\t*                                      *\n");
        printf("\t*  *  *  *  *  *  *  *  *  *  *  *  *  *\n\n");
        printf("接下来,请找出最大值:");
        scanf_s("%d", &maxx);
        printf("\n然后请找出最小值:");
        scanf_s("%d", &minn);
        max = a[4];
        min = a[1];
        for (i = 0; i < 5; i++)
        {
            if (a[i] > max)
                max = a[i];
            if (a[i] < min)
                min = a[i];
        }
        if (maxx == max && minn == min)               //验证回答正确与否  
        {
            system("color AF");
            printf("\n哇你太棒啦!获得奖励 2 分!\n\n");
            score();
            score();
            system("pause");
            system("color 0F");
            printf("\n\n想挑战别的游戏吗?\n\n");
            printf("1. 挑战其它游戏   ");
            printf("   2. 继续挑战找最值游戏   ");
            printf("   3. 查看当前得分\n\n");
            printf("回复数字序号选择一项吧:");
            scanf_s("%d", &q);
            if (q == 2)
            {
                system("cls");
                maxmin();
            }
            else if (q == 3)
                scorep();
            else
            {
                system("cls");
                menu();
            }
        }
        else
        {
            system("color 4F");
            printf("\n有点小可惜,再挑战一次吧!\n\n");
            system("pause");
            maxmin();
        }
    }
    else             //退出找最值游戏?  
    {
        system("color F0");
        printf("\n\n想玩别的游戏吗?\n\n");
        printf("1. 挑战其它游戏   ");
        printf("   2. 回到当前游戏\n\n");
        printf("回复数字序号选择一项吧:");
        scanf_s("%d", &q);
        if (q == 2)
            maxmin();
        else
        {
            system("cls");
            menu();
        }
    }
}
 
收藏 (0)
评论列表
正在载入评论列表...
我是有底线的