在我们学习分支和循环之后我们可以简单的写一个小游戏了——猜数字
思维构想
一、预期效果
实现随机生成0~100之间的数字,玩家进行猜测,按结果进行判断。对于结果实现如果玩家猜大了给予玩家“猜大了”的提示;如果猜小了,给予玩家“猜小了”的提示;若玩家所猜测数字正确则给予玩家“回答正确”的答复并给出随机数。
二、整理思路
1、想要实现这个目标,首先我们要获取一个完全随机的数字并且这个数字的范围是在0~100之间。先要实现获取随机数这就需要rand函数,但只有rand是不够的,因此我们需要srand和time对其进行修饰以便于进行“随机数”的完全随机。
rand()%100所生成的结果再0~99之间+1之后就实现范围在0~100之间了
2、接着我们要有一个游戏菜单界面,这并不难,但为了实现开始和结束的可供选择,这时可以用我们学过的swich语句或者if 语句。在这里显然switch语句更加简单便捷。接下来为了方便玩家在游戏结束后可以继续游戏那么我们是不是可以用我们学过的do while循环?
3、在玩家给出结果后显然不是一次就可以结束的,那这样就可以用我们学过的while循环来实现重复操作
综上,我们只需要3个函数就可以解决这个问题了
代码实现
生成随机数和调用所需函数的头文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
生成游戏的主体我们给此函数命名为game,这里并不需要game有类型和返回值所以使用void
void game()
{
int r = rand() % 100 + 1;
int a = 0;
//printf("%d", r);//已经生成随机数但并不需要打印出来
while (1)
{
printf("请输入你的数字");
scanf("%d", &a);
if (a < r)
{
printf("猜小了");
}
else if (a > r)
{
printf("猜大了");
}
else
{
printf("猜对了,随机数字为%d\n", r);
break;
}
}
}
接下来我们要打印菜单,和game一样不需要类型和返回值,所以这里我们也用void
void menu()
{
printf("--------------------------------\n");
printf("--------------------------------\n");
printf("---------1 玩游戏---------------\n");
printf("---------2 退出游戏-------------\n");
printf("--------------------------------\n");
printf("--------------------------------\n");
}
加下来我们只需要写出程序的主体,并且将以上两个函数调用就完成了
int main()
{
int input = 1;
srand((unsigned int)time(NULL));//修饰rand,使随机出的数字完全随机
do
{
menu();//调用菜单的函数
printf("请选择");//接受所输入的结果
scanf("%d", &input);
switch (input)//进行选择判断是否进行游戏
{
case 1:
game();//调用游戏主体函数
break;
case 2:
printf("游戏结束\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
以下是完整代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("--------------------------------\n");
printf("--------------------------------\n");
printf("---------1 玩游戏---------------\n");
printf("---------2 退出游戏-------------\n");
printf("--------------------------------\n");
printf("--------------------------------\n");
}
void game()
{
int r = rand() % 100 + 1;
int a = 0;
//printf("%d", r);
while (1)
{
printf("请输入你的数字");
scanf("%d", &a);
if (a < r)
{
printf("猜小了");
}
else if (a > r)
{
printf("猜大了");
}
else
{
printf("猜对了,随机数字为%d\n", r);
break;
}
}
}
int main()
{
int input = 1;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 2:
printf("游戏结束\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
那么这样是不是太简单了;一直循环到结束就导致无论如何都可以猜出来,那么是不是可以增加一些限制条件,使其出现失败的可能。比如使其猜测的次数限制在5次以内?
加下来就是游戏的进阶
游戏进阶
接下来就是游戏进阶的思维构想了
思维构想
我们就用count来记录玩家剩余的猜测次数,并且每次循环之后使count减一,以count为while循环的标准,当玩家剩余次数为0 时count = 0;此时while(count == 0)循环就就结束了。这样就实现了猜测次数的控制了。
实现次数控制后我们只需要在完善一下就可以了,比如在猜测前加入剩余猜测次数;在猜测次数用完之后用if语句对其实现失败的出现;当然失败后可以加入一些惩罚措施(这就有你来自定义了,比如使他人的电脑关机)
代码实现
在构思好后发现只有game函数体内发生变化;头文件,menu函数,主函数都没有发生变化
那么就来看看game函数体的变化吧
void game()
{
int r = rand() % 100 + 1;
int a = 0;
//printf("%d", r);//已经生成随机数但并不需要打印出来
int count = 5;//设置游戏回答次数
while (count)
{
printf("你还剩余%d", count);
printf("请输入你的数字");
scanf("%d", &a);
if (a < r)
{
printf("猜小了");
}
else if (a > r)
{
printf("猜大了");
}
else
{
printf("猜对了,随机数字为%d\n", r);
break;
}
count--;
}
if (count == 0)//回答次数用尽后对于失败的实现
{
printf("你输了正确答案是 %d", r);
}
}
以下就是完整代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("--------------------------------\n");
printf("--------------------------------\n");
printf("---------1 玩游戏---------------\n");
printf("---------2 退出游戏-------------\n");
printf("--------------------------------\n");
printf("--------------------------------\n");
}
void game()
{
int r = rand() % 100 + 1;
int a = 0;
//printf("%d", r);
int count = 5;
while (count)
{
printf("你还剩余%d", count);
printf("请输入你的数字");
scanf("%d", &a);
if (a < r)
{
printf("猜小了");
}
else if (a > r)
{
printf("猜大了");
}
else
{
printf("猜对了,随机数字为%d\n", r);
break;
}
count--;
}
if (count == 0)
{
printf("你输了正确答案是 %d", r);
}
}
int main()
{
int input = 1;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 2:
printf("游戏结束\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
感谢观看,有兴趣的话,点赞,评论,关注,来一波吧。有更多想法可以一起聊一聊
标签:count,--------------------------------,游戏,int,代码,break,printf,input,分支 From: https://blog.csdn.net/2402_87907999/article/details/143094739