当前位置:首页 » 《随便一记》 » 正文

猜数字小游戏---C语言

29 人参与  2023年05月01日 20:27  分类 : 《随便一记》  评论

点击全文阅读


目录

前言: 

猜数字游戏:

1.打印选项

2.玩家输入选项

3.根据玩家输入的值进行选择

4.重复游戏的实现

5.游戏game函数的实现

6.优化


❤博主CSDN:啊苏要学习

  ▶专栏分类:C语言◀

  C语言的学习,是为我们今后学习其它语言打好基础,C生万物!

  开始我们的C语言之旅吧!✈


前言: 

  学习完循环和分支语句后,我们可以用所学的知识,完成一个猜数字的小游戏,练练手。

猜数字游戏:

1.打印选项

  在屏幕上需要打印信息,让玩家知道,这是什么游戏,该怎么玩,以及玩家需要做什么。我们这里的做法是分装一个菜单函数。

#include <stdio.h>void menu(){    printf("这是一个猜数字游戏\n");    printf("请做出以下选择:> 1.play  0.exit\n");    printf("请选择:>");}int main(){    menu();    return 0;}

2.玩家输入选项

  我们需要让玩家输入一个数,这个数是个整数,所以我们就知道要创建一个整型变量配合使用scanf这个输入函数。

#include <stdio.h>void menu(){    printf("这是一个猜数字游戏\n");    printf("请做出以下选择:> 1.play  0.exit\n");    printf("请选择:>");}int main(){    int input = 0;//C语言创建变量要在代码块最前面定义    menu();    scanf("%d", &input);//打印菜单后,输入数字    return 0;}

3.根据玩家输入的值进行选择

  玩家可能输入0、1或其它非法值。怎么处理这种多分支并且可以处理有非法值的情况呢?脑子里一想,这时我们想到switch就能很好的满足我们的需求。

#include <stdio.h>void menu(){    printf("这是一个猜数字游戏\n");    printf("请做出以下选择:> 1.play  0.exit\n");    printf("请选择:>");}int main(){    int input = 0;    menu();    scanf("%d", &input);    switch(input)//根据输入值选择入口    {    //玩游戏    case 1:        game();        break;    //退出游戏    case 0:        printf("退出游戏\n");        break;    //重新输入    default:        printf("输入错误,请重新输入\n");        break;//最后加上break是个好习惯    }    return 0;}

  case 1的情况就是玩游戏,我们使用game()函数来实现玩游戏的过程。

4.重复游戏的实现

  对了,大家在玩游戏的时候,比如玩扫雷呀,三子棋小游戏的时候。玩得不过瘾可以再来一局,不过瘾再来一局,一直玩,直到不想玩了就退出。 这个逻辑怎么实现呢?首先,不过瘾再来一局,直到过瘾,听起来像什么,循环对吧。第二,过瘾了退出游戏,是不是相当于要跳出这个循环,也就是说要使判断条件为假。考虑到这两个点,有下面这种巧妙的做法:

#include <stdio.h>void menu(){    printf("这是一个猜数字游戏\n");    printf("请做出以下选择:> 1.play  0.exit\n");    printf("请选择:>");}int main(){    int input = 0;    //使用do while循环    do    {        menu();        scanf("%d", &input);        switch(input)        {        case 1:            game();            break;        case 0:            printf("退出游戏\n");            break;        default:            printf("输入错误,请重新输入\n");            break;        }    }while(input)//使用input控制循环    return 0;}

  do while循环的特点是先执行一次。先打印菜单,根据玩家输入的值进入相应的分支,最后判断还要不要再循环。使用input当do while判断条件的效果就是,当我们输入1或非法值后,判断条件仍为真,再次打印菜单让你选择。而当我们输入0选择退出游戏的时候,判断表达式刚好为假,退出。这个逻辑可以get到吧。 

5.游戏game函数的实现

  接下来就是实现game函数了,要做一个猜数字游戏。要有数字给我们猜吧,这个数字得具有随机的特性才好玩;猜的时候要跟有相应玩家互动,比如猜的数比随机数大,要有提示,猜小也一样,一直猜下去,直到猜对才停下来。猜对了游戏结束,选择再玩一把还是退出游戏

void game(){    //1.生成随机数    int rom = rand();    //2.一直猜数字,直到猜对,游戏结束    int guess = 0;    while(1)    {        printf("请猜数字:>");        scanf("%d", &guess);        if(guess > rom)        {             printf("猜大了\n");        }        else if(guess < rom)        {             printf("猜小了\n");        }        else        {             printf("恭喜,猜对了,随机数是%d\n", rom);             break;//猜对了,跳出循环以结束游戏        }    }    return 0;}

  生成随机数是使用rand()函数,用一个变量存放起来;创建另一个变量用来存放我们输入的值来和随机值进行比较;

6.优化

  这时候的你觉得应该实现完这个小游戏了,实际上这里面还有些问题在,我们需要进行优化。rand()生成随机数,如果不搭配srand()函数是不行的;rand()生成的随机数范围太大了,从0-32767,将范围缩小点才有乐趣,不然猜到头皮发麻。

srand是一个随机数起点的生成器,在需要使用随机数的时候,调用一次srand函数。
int main(){    int input = 0;    //srand()的参数要一个时刻会变的数    //时间是一直在变的,我们使用time函数获取系统时间    //time的参数要一个指针。我们传过去一个空指针NULL    //time返回值是time_t,是long(长整型)的一个重命名。    //我们强制转换成无符号int类型,因为srand要的是无符号整型当参数    srand((unsigned int)time(NULL));    //使用do while循环    do    {        menu();        scanf("%d", &input);        switch(input)        {        case 1:            game();            break;        case 0:            printf("退出游戏\n");            break;        default:            printf("输入错误,请重新输入\n");            break;        }    }while(input)//使用input控制循环    return 0;}
rand()%100+1; 对rand()生成的随机数取模上100,得到的结果是在0-99(余数)之间,加上1,值的范围就在1-100之间,可玩性就高了。 
void game(){    int rom = rand()%100+1;    int guess = 0;    while(1)    {        printf("请猜数字:>");        scanf("%d", &guess);        if(guess > rom)        {             printf("猜大了\n");        }        else if(guess < rom)        {             printf("猜小了\n");        }        else        {             printf("恭喜,猜对了,随机数是%d\n", rom);             break;//猜对了结束游戏        }    }    return 0;}

  补充:rand()和srand()函数的头文件是<stdlib.h>,time()函数的头文件是<time.h>函数。 

  这些优化的点一改,就可以玩啦~

  总结:相信读者可以从这篇文章中,可以感受到我们是在根据需求,需要什么就写什么。有个术语专门描述这种思路,TDD(test driven development)测试驱动开发,根据需要,敲出代码进行测试,这个过程就是在驱动我们进行开发

  希望读者从这篇博文中获取到的知识是:一个重复打印菜单选择玩游戏的的模块、rand()和srand()搭配time()生成随机数,以及巩固一下循环、选择语句。最后就是提升敲代码的能力。


结语:希望读者读完有所收获!在学C的路上,祝福我们能越来越C!✔

  读者对本文不理解的地方,或是发现文章在内容上有误等,请在下方评论区留言告诉博主哟~,也可以对博主提出一些文章改进的建议,感激不尽!最后的最后!

  ❤求点赞,求关注,你的点赞是我更新的动力,一起努力进步吧。


点击全文阅读


本文链接:http://zhangshiyu.com/post/60205.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1