详解猜数字游戏—分支与循环应用实例

前言

        很多同学在学习C语言过程中都会产生一个疑惑,课程听了,代码自己也跟着敲过几遍了,但还是感觉脑袋轻轻的,闭上眼一股脑就忘干净了,根本不知道该如何检验自己是否掌没掌握。同学如果确实是有这种症状,就请跟着我的思路学一下猜数字游戏,学完后试着按照自己的思路自己实践一下,或许能帮你打消一知半解的这种焦虑。另外,如果说你真能自己写出来,那么就表示你对分支与循环这章的内容有个八到九成的理解了。


猜数字游戏

游戏介绍

        猜数字游戏的规则是电脑从数字1~100之间自动生成一个随机数后,玩家通过键盘输入对该数字进行猜测,如果猜对则游戏胜利,如果猜错电脑会给用户以反馈,即猜大了或者猜小了,玩家再以电脑提示为基准再次进行猜测,直到得出正确答案。

游戏设计思路

1.搭建游戏基本框架;

2.生成1~100(包括边界)之间的随机数;

3.将用户输入的数字与随机生成的数字进行比较,并及时反馈给玩家;


一 搭建游戏框架(菜单)
(i)何为游戏框架

       音乐、动画、图片、运行程序等共同组成游戏功能的结构被称为游戏框架。在我们打开任意一款游戏时首先看到的是一个菜单界面,在界面上能看到游戏CG以及游戏设置以及开始结束等选项,同时也能听到响起的音乐,这些都是组成游戏框架的一部分,在进入游戏后运行一系列程序也都是游戏的框架。可以说,游戏的基本框架决定着游戏的玩法以及游戏的风格等。

(ii)如何搭建游戏框架

        该过程主要体现在主函数内部的运行逻辑,主要分为两步。第一步,按照一般游戏逻辑我们首先在屏幕上打印菜单,供玩家选择开始或者退出,这一步比较简单,此处直接以代码形式给大家提供参考,不详细展开说明。

void menu()
{
    printf("********************************\n");
	printf("*********** 1.play *************\n");
	printf("*********** 0.exit *************\n");
	printf("********************************\n");
}

        第二步,玩家选择结束后,对选择结果进行指定操作,即进入游戏或退出。首先我们可以先设一个变量select用于存储玩家输入的信息,并匹配到对应的操作。这时候我们又会出现另外一个问题,就是如何将玩家输入的信息与对应的程序或语句相匹配。分支语句中的switch语句可以将整形常量值为基准执行特定case值底下的语句。因此我们可以用switch语句来对应不同的操作,用代码实现如下所示。

int main() 
{	
	menu();

    int select = 0;
	printf("请选择:>");
	scanf("%d", &select);

	switch (select)
	{
	case 1:
		printf("已进入游戏\n");
		game();
		break;
	case 0:
		printf("已退出游戏\n");
		break;
	default:
		printf("输入错误,请输入0或1\n");
	}
}

至此,我们的游戏框架已经基本搭建完毕,随时准备开始游戏!


二 游戏程序的实现
(a)如何生成1~100之间的随机数(重点)

        要想实现“猜数字”就必须要有随机数,生成随机数就比较麻烦,下面我们逐一讲解生成随机数所需要的函数及其使用方法;

1.rand()函数

        rand()函数是C语言标准库中提供用于生成伪随机数的函数,其返回值为int类型,rand函数被包括在stdlib.h头文件内。标准形式如 int rand(void);需要注意的是:rand函数所生成的随机数是通过算法计算出来的,并不是真正的随机数,这种随机数被称为伪随机数。伪随机数的值由种子控制,如果想要得到不同的就必须时刻改变种子的值,以达到近似随机。有关rand函数的具体信息请自行查看下面网址rand - C++ Reference (cplusplus.com)

         rand函数返回值的范围是0~RAND_MAX(32767)​​​​​​

        如果想要获得1~100之间的随机数就要将rand()%100+1,接着将处理后的返回值赋值给ret即可

拓展:如果想要获得a~b之间的随机数,可以用rand()%(b-a+1)+a 进行变换。

2.srand()函数

        前面说到rand()函数生成的随机数是伪随机的,且随机数的值由种子来决定,种子不同,生成的随机数就不同,所以时刻改变种子的初始值就成了问题。C语言库函数就提供了srand()函数来初始化种子的值,其函数形式为 void srand (unsigned int seed) 被包含在头文件stdlib.h中;其中种子值为unsigned int类型的数据,当未明确输入种子值时,种子默认为1。因此通过改变种子的初始值,就能得到不同的伪随机值,使用起来就这样        srand(2)        srand(100)其中种子值分别被初始化为2和100,当用rand函数生成随机数时二者出现的数字都是不一样的。至此,我们问题就转变为如何获得时刻变化的种子。

3.time()函数

        time函数是C语言获取当前时间的函数。我们知道,时间是时刻变化的,因此将时间包装为种子,这样就能得到时刻得到变化的种子。time函数的表示形式为time_t time(time_t* timer),同时该函数使用时需要包含头文件time.h。另外,time函数会返回一个time_t类型的时间戳,(时间戳是指当前时间与1970年1月1日之间秒数的差值),而参数表示指向类型为 time_t 的对象的指针,用来存储 timer 的值。在该游戏中,不需要存储timer的值,只需要time函数返回一个时刻变化的值来改变种子的初始值即可,因此在参数中输入NULL即可。需要注意,因为time函数的返回值类型是time_t类型的数据,而srand函数需要的参数是unsigned int类型的数据,因此在使用time函数获得种子时应强制类型转换为unsigned int类型。

获取随机值

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

int ret = rand()%100 + 1;//获取1~100之间的随机值

(b)建立判断模型

     运用if语句将用户输入的数字与生成的随机数进行对比,对比后再给用户反馈。代码形式如下:

while(count)
{
    scanf("%d",&input);//获取用户的输入
    count--;//count代表游戏的机会

    if(input > ret)
    {
        printf("猜大了,请重新输入:>\n");
    }
    else if(input < ret)
    {
        printf("猜小了,请重新输入:>\n");
    }
    else
    {
        printf("恭喜你猜对了,随机数是:>%d\n",ret);
        break;
    }
}

至此,游戏函数介绍完毕,接着直接看一遍游戏函数全貌。

void main()
{
    srand((unsigned int)time(NULL));
    int ret = rand()%100 + 1;
    int count = 8;//初始化游戏机会
    
    while(count)
    {
        scanf("%d",&input);
        count--;
        if(count == 0) //用于判断游戏机会
            printf("很遗憾,游戏机会已用尽\n");
        if(input > ret)
        {    
            printf("猜大了,请重新输入:>\n");
        }
        else if(input < ret)
        {
            printf("猜小了,请重新输入:>\n");
        }
        else
        {
            printf("恭喜你猜对了,随机数是:>%d\n",ret);
            break;
        }
    }
}

结语

        以上就是猜数字游戏的所有内容了,希望对大家有用,当然这也只是最基础的版本,你也可以根据需求自行调整。如果你觉得本文对你还有点用处,希望能留下小小的赞。

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Excel函数是Excel软件中的一种功能,它可以根据用户的需求对数据进行处理和计算。下面是一些Excel函数的应用实例: 1. 求和函数(SUM): SUM函数可以用于对一列或多列数据进行求和。例如,如果有一个销售数据表格,其中包含每天的销售额,我们可以使用SUM函数计算出总销售额。 2. 平均值函数(AVERAGE): AVERAGE函数可以计算出一列或多列数据的平均值。比如,如果有一个学生成绩表格,我们可以使用AVERAGE函数计算出学生们的平均分。 3. 最大值函数(MAX)和最小值函数(MIN): MAX函数可以用于寻找一列或多列数据中的最大值,而MIN函数可以用于寻找最小值。例如,如果有一个存储商品价格的表格,我们可以使用MAX函数找到最贵的商品价格,或使用MIN函数找到最便宜的商品价格。 4. 统计函数(COUNT和COUNTIF): COUNT函数可以用于计算一列或多列数据中的非空单元格数量,而COUNTIF函数可以根据条件统计符合条件的单元格数量。比如,如果有一个学生考试成绩表格,我们可以使用COUNT函数计算出参加考试的学生人数,或使用COUNTIF函数计算及格的学生人数。 5. 文本函数(CONCATENATE和LEFT/RIGHT/MID): CONCATENATE函数可以将多个单元格中的文本合并在一起,而LEFT/RIGHT/MID函数可以从一个单元格中提取部分文本。例如,如果有一个包含名字和姓氏的列,我们可以使用CONCATENATE函数将它们合并成一个完整的姓名。 这些只是Excel函数的一小部分应用实例,Excel函数非常丰富多样,用户可以根据不同的需求选择合适的函数进行数据处理和计算。 ### 回答2: Excel函数是一种非常常用和强大的工具,可以帮助我们进行数据分析、数据处理和数据展示等工作。下面我们以一个实例来详细说明Excel函数的应用。 假设我们有一份销售数据表格,包含了产品名称、销售数量和销售额等信息。我们希望通过Excel函数来计算每个产品的平均销售额和总销售额。 首先,在一个单元格中输入函数"=SUMPRODUCT(销售数量,销售额)",这个函数可以将销售数量和销售额相乘,并求和得到总销售额。 然后,我们可以使用"=AVERAGE(销售额)"函数来计算所有销售额的平均值,这个函数可以快速求解平均值。 接下来,如果我们想要知道每个产品的平均销售额,我们可以使用"=AVERAGEIF(产品名称, A2, 销售额)"函数。其中,产品名称是一个列范围,A2是我们想要计算平均值的产品名称,在销售额列中寻找这个产品名称,并计算其平均销售额。 除了上述函数,Excel还提供了许多其他有用的函数。比如,"SUM"函数可以计算一个范围内的数值的总和;"COUNT"函数可以计算一个范围内的数值的数量;"MAX"和"MIN"函数可以分别计算一个范围内的最大值和最小值;"IF"函数可以根据条件进行判断并返回相应的值等等。 总的来说,Excel函数的应用非常广泛,可以帮助我们高效地处理和分析数据。通过合理地使用这些函数,我们可以轻松地完成各种数据处理任务,并得到我们想要的结果。 ### 回答3: Excel函数是Excel软件中非常重要的功能,它可以帮助用户进行各种数据分析和计算。下面我将通过一个实例来详细解释Excel函数的应用。 假设我们要在一个Excel表格中计算某个班级学生的平均分数。我们已经在表格的A列中输入了学生姓名,B列中输入了学生的分数。首先,我们可以使用SUM函数来计算学生的总分,即在C2单元格中输入“=SUM(B2:B11)”,其中B2:B11表示在B列2行到11行的单元格范围。然后,我们可以使用COUNT函数来统计学生的人数,即在C3单元格中输入“=COUNT(B2:B11)”。接着,我们可以使用AVERAGE函数来计算学生的平均分数,即在C4单元格中输入“=AVERAGE(B2:B11)”。这样,我们就可以得到班级学生的平均分数。 除了上述函数外,在Excel中还有许多其他函数可以应用到不同的数据分析和计算中。比如,我们可以使用IF函数来进行条件判断和计算,使用VLOOKUP函数来进行查找和匹配,使用MAX和MIN函数来找出最大值和最小值,使用COUNTIF和SUMIF函数来进行条件计数和条件求和等等。这些函数的应用可以极大地简化我们的工作,提高工作效率。 总之,Excel函数是Excel软件中非常强大和有用的功能。通过学习和应用各种函数,我们可以轻松地进行各种数据分析和计算,从而更好地理解和利用数据。希望上述的解释对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值