声明:因本人为非科班转码,个人水平有限,博客中难免有不准确之处,如有读者发现,本人恳请大家积极指出,本人也想知道自己的错误在哪里。欢迎大家一起指正,共同进步。

  • 联系方式:3146367553@qq

想直接看源代码的小可爱可以直接跳转至3.源代码。


目录

1.程序功能大致描述

2.代码编写思路分析

2.1 整体框架分析

2.2 重难点分析(1-100的随机数如何生成)

2.3 相关细节与两种模式

3. 源代码与截图


1.程序功能大致描述

由系统生成1-100的随机数(整型),由玩家在键盘上进行猜测,玩家无论猜大猜小电脑都会告知你,如果猜对了会恭喜你。同时,玩家可以在玩游戏的中途退出游戏。个人设置了简单和困难两种模式可以选择。


2.代码编写思路分析

2.1 整体框架分析

①首先,我们可以联系一下以前打过的小游戏(不是小游戏也可以),我们是不是进入游戏会有一个开始游戏和退出游戏的选项?点击屏幕其他部分是不是没有反应?因此,我们可以设立一个主菜单函数,打印游戏界面(因为界面可能不止见到一次)。同时,我们站在玩家的角度想一想,我们是不是有很大概率猜对了一把还想猜测的欲望,直到自己不想打就退出游戏?因此,游戏刚开始的选择是否游戏其实很符合循环。另外,用户第一次进游戏肯定得选择,小可爱,你说是不是?

 因此,在选择是否开始游戏就是一个do-while循环,同时循环条件可以为1(退出游戏可以break)。

②我们不难分析,退出游戏只需要一两个语句就可以。而开始游戏是一个较为复杂的代码,同时用户可以开始游戏很多次(只要他还想玩),那么,为了避免重复造轮子,我们应该把游戏设定成一个函数。

2.2 重难点分析(1-100的随机数如何生成)

其实,重点呼之欲出,就是我们怎么让电脑生成一个1-100的随机数呢?首先,如果有一个随机数x,那么x % 101就是1-100(余数范围为1-100)。接下来,就是随机数的问题了。

经查阅,有rand函数可以生成随机数。

我们查阅发现,rand头文件为stdlib.h,值得注意的是,调用rand函数我们需要在这之前生成srand随机数生成器。

而srand函数用法为srand(unsigned int),即括号内为无符号整型。但是,一旦括号内确定,随机数也随之确定。如此一来,小游戏数字便固定了。因此,括号内必须为随机数?但是,怎么可能让随机数生成随机数?这时,我们可以换一个思路,在括号内的只要是一个变化的数字就可以了。那么,我们在进行游戏的时候,什么是变化的呢?没错,是时间!

 经查阅,正好有一个time函数,该函数返回一个从当前时间点到计算机起始时间之间的差值(随着时间的变化,差值在变)。因此随机数生成器可以写成srand((unsigned int)time(NULL))。同时,经试验我发现,随机数生成器得和rand函数分开,也就是srand生成器在主函数,rand函数生成值赋值在game函数是正确做法。

2.3 相关细节与两种模式

①首先,我们在玩这个游戏肯定不喜欢一直见到游戏主界面,如此清屏函数就派上大用场了。

即system("cls"), 头文件为windows.h。

②我设计的模式有两种,一种为简单模式,可以看到自己之前的猜数字记录;另外一种为困难模式,看不到自己的猜数字记录。

③每猜测5次,电脑会询问是否终止游戏从而退出。(会有因为特殊原因突然不想玩或者不能玩的游戏客户)。


3. 源代码与截图

讲了这么多,还是代码最重要,需要的小伙伴自行复制哈。

源代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

void menu()
{
    printf("****************\n");
    printf("****************\n");
    printf("欢迎进入猜数字游戏界面\n");
    printf("1:开始游戏\n");
    printf("0:退出游戏\n");
    printf("****************\n");
    printf("****************\n");
}
void game1() //简单模式(可以看到自己猜测记录)
{
    int guess = 0;
    int x = rand() % 101;//存放随机数, 取余101余数为1-100
    int count = 0;
    while (1)
    {
        printf("请输入您猜测的数字:");
        scanf("%d", &guess);
        count++;
        if (guess == x)
        {
            system("cls");
            printf("恭喜您,猜对了\n");
            printf("将重新回到游戏界面\n");
            break;
        }
        else if (guess > x)
        {           
            if (0 == count % 5)
            {
                printf("是否终止游戏?\n");
                char input = 'A';
                getchar();//清理缓冲区回车键
                scanf("%c", &input);
                if ('Y' == input)
                {
                   break;
                }
            }
            printf("不好意思,您猜测的数字大了\n");
        }
        else
        {
           if (0 == count % 5)
            {
                printf("是否终止游戏?\n");
                char input = 'A';
                getchar();//清理缓冲区回车键
                scanf("%c", &input);
                if ('Y' == input)
                {
                   break;
                }
            }
            printf("不好意思,您猜测的数字小了\n");
        }
    }
}

void game2() //困难模式(不能看到自己猜测记录)
{
    int guess = 0;
    int x = rand() % 101;//存放随机数, 取余101余数为1-100
    int count = 0;
    while (1)
    {
        printf("请输入您猜测的数字:");
        scanf("%d", &guess);
        count++;
        if (guess == x)
        {
            system("cls");
            printf("恭喜您,猜对了\n");
            printf("将重新回到游戏界面\n");
            break;
        }
        else if (guess > x)
        {           
            system("cls");
            if (0 == count % 5)
            {
                printf("是否终止游戏?\n");
                char input = 'A';
                getchar();//清理缓冲区回车键
                scanf("%c", &input);
                if ('Y' == input)
                {
                   break;
                }
            }
            printf("不好意思,您猜测的数字大了\n");
        }
        else
        {
           system("cls");
           if (0 == count % 5)
            {
                printf("是否终止游戏?\n");
                char input = 'A';
                getchar();//清理缓冲区回车键
                scanf("%c", &input);
                if ('Y' == input)
                {
                   break;
                }
            }
            printf("不好意思,您猜测的数字小了\n");
        }
    }
}

int main()
{
    int choose = 0;
    srand((unsigned int) time(NULL));
    do
    {
        
        menu();
        scanf("%d", &choose);
        if (1 == choose)
        {
            system("cls");
            printf("开始猜数字\n");
            int choose2 = 0;
            printf("请选择模式:1.简单模式  2.困难模式\n");
            getchar();
            scanf("%d", &choose2);
            while(1)
            {
                if (1 == choose2)
                {
                    game1();
                    break;
                }
                else if (2 == choose2)
                {
                    game2();
                    break;
                }
                else
                {
                    printf("您的选择有误,请重新输入\n");
                }
            }
        }
        else if (0 == choose)
        {
            system("cls");
            printf("退出游戏\n");
            break;
        }
        else
        {
            system("cls");
            printf("您的输入有误,请重新输入\n");
        }
    } while (1);

    return 0;
}

运行截图:

 

创作不易,小可爱们,动动你们的小手点个赞再走呗。

 

 

 

更多推荐

手把手带你学会猜数字游戏代码编写