0.初始部分:大致流程图展示:

1.第一部分:打印游戏菜单
void menu()
{
printf("******************************");
printf("********** 1.play **********");
printf("********** 0.exit **********");
printf("******************************");
}
2.第二部分:游戏运行逻辑的构建
(1)生成随机值,设置其范围:
a.生成随机值
1.rand函数的介绍:
rand函数可以随机生成一个伪随机数(这个随机数的范围是在0~RAND_MAX之间的,故称为伪随机数),使用它时需要包含头文件<stdlib.h>.
2.该函数的特点:
rand函数是对于一个叫“种子”的基准值进行运算生成的随机值,所以要使得其生成的随机值处于不断的变化当中,就需要让rand函数的种子处于不断变化的状态.
b.设置其范围
1.取余符号%的介绍:
取余符号会将余数控制在0~右操作数-1的这个范围内.例如:左操作数%10就会将结果的范围控制在0~9之间.
2.产生范围分析:
此处需要选择控制正确的数值范围,建议尝试把范围控制的小一些,这里把正确数值的范围控制在1~10之间.
int w = rand() % 10 +1
在上述说明了一个数%10会将结果范围控制在0~9之间,我们再给它右边加上个1就把结果范围控制在1~10之间,就达成了目的.
3.公式法生成随机值
想要产生一个a~b的随机值时,可以套公式:a + rand() % (b-a+1)
(2)自定义函数,存放猜测数值:
a.自定义函数:(用于表示自我猜测的数值)
int shuzi = 0;
b.使用scanf函数存放该自我猜测数值
scanf("%d",&shuzi);
(3)猜测正确与否的判断
a.分支语句,多case判断:
使用分支语句if来对产生的多个情况进行判断(如图)
if(shuzi < w)
{
printf("您猜测的数字比真实数要更小\n");
}
else if(shuzi > w)
{
printf("您猜测的数字比真实数要更大\n");
}
else
{
printf("恭喜您,猜对了正确的数字\n");
break;
}
b.循环结构,多次重复判断:
由于需要经过多次的猜测判断,就需要用到循环结构将分支语句if包含于while循环当中,满足表达式的情况下可以进行重复判断(如图)
while(1)
{
printf("请选择数字:");
scanf("%d",&shuzi);
if(shuzi < w)
{
printf("您猜测的数字比真实数要更小\n");
}
else if(shuzi > w)
{
printf("您猜测的数字比真实数要更大\n");
}
else
{
printf("恭喜您,猜对了正确的数字\n");
break;
}
}
3.第三部分:构建粗略的游戏框架
(1)自定义函数:(用于表示开始的数值)
int put = 0;
(2)初始化、随机化随机值
a.初始化(srand函数介绍)
1.其原型为:
void srand(unsigned int seed)
2.作用:
可以用来初始化随机值,确保每一次生成的随机值都不一样.
3.特点:
可以通过srand函数的参数seed来设置rand函数生成随机数的种子,只要种子在变化,每次生成的随机数也会改变.
b.随机化(time函数介绍)
1.其原型为:
time_t time(time_t* timer);
time函数包含于头文件<time.h>中,使用时需要引用该头文件.
2.作用:
time函数会返回当前的日历时间,其返回的是1970年1月1日0时0分0秒到现在程序运行时间的差值。
3.特点:
如果timer参数是非NULL,那么函数也会将这个返回的差值放在timer指向的内存中带回去;
如果timer参数是NULL,那么就返回这个时间的差值,timer返回的这个时间差也被叫做:时间戳;
4.使用:
此处需要返回一个时间戳作为srand函数的种子,故需要使timer参数为NULL(如下图)
time(NULL)
(注意:由于srand函数的参数类型为“unsigned int”,而time函数的参数类型为“time_t”,使用时将time函数强制类型转换为“unsigned int”)
(3)选择、套入循环结构
此处使用的是“do while”循环,其特点是先循环再判断后再循环.
(4)引用菜单函数,提示用户选择
a.引用菜单函数(如下图)
menu()
b.提示用户选择(如下图)
使用printf函数打印“请您选择”字样对用户进行提示.
printf("请您选择:")
(5)使用scanf函数存放选择开始数值
scanf("%d",&input);
(6)选择分支语句,处理不同的情况
a.选择分支语句
此处选择switch语句对游戏菜单选择不同情况的结果进行处理
b.处理不同的情况
1.“case 1”:(选择开始游戏)
将game游戏函数引用到此情况下方,当菜单选择“case 1”过后,将开始运行游戏,而在结尾处需要加入break语句终止该情况分支.(如图)

2."case 0":(选择退出游戏)
当菜单函数处选择“case 0”过后,运用printf函数在下方打印“游戏结束”,在结尾处需要加入break语句终止该情况分支.(如图)

3.“default”:(选择错误,请重新选择)
当菜单函数处选择除了以上两种情况以外的情况后,运用printf函数在下方打印“选择错误,请重新选择”,在结尾处任然需要使用break语句终止该情况分支.(如图)

4.第四部分:构建完整的游戏框架
(1)处理的目的:
经过以上步骤,就已经完成了对该游戏的粗略代码实现,但却尚有美中不足之处,可以对此作出一定的修饰调整,使得游戏变得更加完美.
(2)处理后的相应效果:(如图)
a.限定游戏的次数:(如图)

b.清除游戏记录:(如图)

c.失败后的正确值提醒:(如图)

(3)实际的处理步骤
a.限定游戏次数
1.自定义计次函数,设定初始值
自定义一个计次函数,此处用count来定义;
将count初始值设定为想要进行的游戏次数;
2.更换“while”循环的表达式
将“while”循环后面的表达式换成count,当循环经过count次试验后没有成功则此时count==0(为假),使得while循环运行的条件不被满足,进行下一个步骤.
3.在循环末加入计次削减语句
在相应的“while”循环的最下方加入“ count--;”语句,用于表示游戏次数的削减.
b.清除游戏记录
当我们进行过多次的游戏过后,会残留大量的游戏记录而使得界面变得不美观,这时就可以考虑引用system函数进行清除,它是包含于<stdlib.h>头文件的,使用时需要先引用头文件.
清除游戏记录的语句: system("cls");
c.失败后的正确值提醒
在while循环经过count次循环尝试后依旧没有成功猜到正确的值时,使用if分支语句将该情况进行管理,即当“count==0”时,使用printf函数打印“您失败了,正确的数字是:%d\n, w (定义产生的随机值)”(如图)

(4)该部分修改后的代码展示:(如图)

5.第五部分:完整游戏代码展示
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("******************************\n");
printf("********** 1.play **********\n");
printf("********** 0.exit **********\n");
printf("******************************\n");
}
void game()
{
int w = rand() % 10 +1;
int shuzi = 0;
int count = 5;
while(count)
{
printf("请选择数字:");
scanf("%d",&shuzi);
if(shuzi < w)
{
printf("您猜测的数字比真实数要更小\n");
}
else if(shuzi > w)
{
printf("您猜测的数字比真实数要更大\n");
}
else
{
printf("恭喜您,猜对了正确的数字\n");
break;
}
count--;
}
if(count == 0)
{
printf("您失败了,正确的数字是:%d\n", w );
}
system("cls");
}
int main()
{
int input = 0;
srand((unsigned int) time (NULL));
do
{
menu();
printf("请选择:");
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
}while(input) ;
return 0;
}
6.第六部分:作者声明
(1)本博客由作者整理所学知识编排实践后而成,旨在分析猜数字游戏代码实现过程中的逻辑;
(2)本博客源于学习途中关于对猜数字游戏相关的拙见,如若存在错误或是解析不当之处还请探讨与指正,经验证后再进行修改的相关工作.
最后,感谢各位的支持!希望能够和各位一起在思想的碰撞中茁壮成长!再次对您表示感谢!
2040

被折叠的 条评论
为什么被折叠?



