声明:因本人为非科班转码,个人水平有限,博客中难免有不准确之处,如有读者发现,本人恳请大家积极指出,本人也想知道自己的错误在哪里。欢迎大家一起指正,共同进步。
- 联系方式:3146367553@qq.com
想直接看源代码的小可爱可以直接跳转至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-100int 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-100int 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;
}
运行截图:
创作不易,小可爱们,动动你们的小手点个赞再走呗。