屏蔽右键网站,wordpress 分类目录 页面,快速学习网站制作,重庆设计公司网站文章目录 前言1.游戏描述2.代码实现2.1打印菜单2.2构建基础框架2.3玩游戏2.3.1生成随机数2.3.1.1rand()2.3.1.2srand()2.3.1.3time() 2.3.2game() 2.4自己设定猜的次数 3.完整代码 前言 猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏#xff0c;下… 文章目录 前言1.游戏描述2.代码实现2.1打印菜单2.2构建基础框架2.3玩游戏2.3.1生成随机数2.3.1.1rand()2.3.1.2srand()2.3.1.3time() 2.3.2game() 2.4自己设定猜的次数 3.完整代码 前言 猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏下面我将详细介绍该游戏的实现和编程逻辑。玩小游戏的同时也能对C语言控制语句有更好的认识。 1.游戏描述
电脑随机生成一个1-100的数字玩家来猜。玩家可以根据自己需要设置每次猜的次数。如果在设置的次数内猜对了则提示你猜对了否则提示猜错了。
2.代码实现
2.1打印菜单
我们在玩游戏前都是先打印菜单在进行选择。所以此处选择do-while循环
#includestdio.h
void menu()
{printf(***********************\n);printf(*** 1.play 0.exit ***\n);printf(***********************\n);
}
int main()
{do{menu();} while (1);return 0;
}效果展示
2.2构建基础框架 选择1玩游戏 选择0退出 选择其它重新选择 int main()
{int input 0;do{menu();printf(请选择);scanf(%d, input);switch (input){case 1:printf(玩游戏\n);break;case 0:printf(退出游戏\n);break;default:printf(选择错误请重新选择\n);}} while (input);return 0;
}效果展示
2.3玩游戏
既然我们要玩猜数字游戏那么我们选择1后不能就打印一个玩游戏吧因此下面来真正实现猜数字游戏。
2.3.1生成随机数 怎么才能生成随机数呢 C语言提供了一个函数用来生成随机数 2.3.1.1rand() 查看文档我们发现 rand函数会返回⼀个伪随机数这个随机数的范围是在0~RAND_MAX之间这个RAND_MAX的大小是 依赖编译器上实现的但是⼤部分编译器上是32767。在调用rand之前使用srand函数为伪随机数生成器提供种子。rand函数的使用需要包含⼀个头文件是stdlib.h 什么意思呢我们不妨写代码测试一下 运行一下发现确实产生了随机数。但是当我运行第二次发现产生的随机数和第一次的一样那怎么能行这不是BUG吗 如果再深⼊了解⼀下我们就不难发现其实rand函数⽣成的随机数是伪随机的伪随机数不是真的随机数是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。 之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的那是因为rand函数⽣成随机数的默认种⼦是1。 如果要⽣成不同的随机数就要让种⼦是变化的。 种子要变化我们再让种子是一个随机值不就行了嘛 NO,大漏特漏 如果这样的话就死循环了
2.3.1.2srand()
刚才在文档中提到的一个srand是什么呢 程序中在调⽤ rand 函数之前先调⽤ srand 函数通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦只要种⼦在变化每次生成的随机数序列也就变化起来了。 那也就是说给srand的种⼦如果是随机的rand就能⽣成随机数在⽣成随机数的时候⼜需要⼀个随机数这就又矛盾了 那电脑上什么东西是一直变化的呢——时间
2.3.1.3time() time 函数会返回当前的⽇历时间其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运行时间之间的差值单位是秒。 如果time()的参数timer是NULL就只返回这个时间的差值。time函数返回的这个时间差也被叫做时间戳 如果是这样我们就可以这样写代码 这样我们发现数字就随机起来了那我们的代码接下来可就好写咯。 我们需要的随机数是1-100之间的所以我们可以这样写代码
2.3.2game()
生成随机数
void game()
{srand((unsigned int)time(NULL));int random_number rand() % 100 1;printf(%d\n, random_number);
}效果如下 但是如果你是老司机手速比较快的话生成的随机数会相同如下 这是为什么呢 因为当我们运行一次game(),就会调用一次srand(),这样在较短时间内调用就会产生相同的数字。 因此srand函数不需要频繁调用的⼀次运⾏的程序中调用⼀次就够了。 所以我们可以将其放在main()中
void game()
{int random_number rand() % 100 1;int number 0;while (1){printf(请猜数字);scanf(%d, number);if (number random_number){printf(您猜大了\n);}else if (number random_number){printf(您猜小了\n);}else{printf(恭喜你猜对了\n);break;}}
}2.4自己设定猜的次数
用户自己输入次数如果未在设置的次数中猜对则提示失败 代码变动地方如下
switch (input){case 1:printf(你感觉你几次就能猜对呢?\n);scanf(%d, count);game(count);break;case 0:printf(退出游戏\n);break;default:printf(选择错误请重新选择\n);}void game(int count)
{int random_number rand() % 100 1;int number 0;while (count){printf(请猜数字);scanf(%d, number);if (number random_number){printf(您猜大了\n);}else if (number random_number){printf(您猜小了\n);}else{printf(恭喜你猜对了\n);break;}count--;}if (count 0){printf(你未在规定的次数内猜对有点高估自己了还得练哦\n);}
}效果如下
3.完整代码
#includestdio.h
#includestdlib.h
#includetime.h
void menu()
{printf(***********************\n);printf(*** 1.play 0.exit ***\n);printf(***********************\n);
}
void game(int count)
{int random_number rand() % 100 1;int number 0;while (count){printf(请猜数字);scanf(%d, number);if (number random_number){printf(您猜大了\n);}else if (number random_number){printf(您猜小了\n);}else{printf(恭喜你猜对了\n);break;}count--;}if (count 0){printf(你未在规定的次数内猜对有点高估自己了还得练哦\n);}
}
int main()
{srand((unsigned int)time(NULL));int input 0;int count 0;do{menu();printf(请选择);scanf(%d, input);switch (input){case 1:printf(你感觉你几次就能猜对呢?\n);scanf(%d, count);game(count);break;case 0:printf(退出游戏\n);break;default:printf(选择错误请重新选择\n);}} while (input);return 0;
}本次分享就到这里啦感谢您的观看