【猜数字】利用分支循环实现简单小游戏

一、不多废话,直接进入主题

   我们来理清一下实现这个小游戏的思路:

1.生成随机数(重点)

2.你来猜(输入要猜的数)

3.提示玩家猜大或猜小了,直到猜对为止

ok,只要能把上面要求都实现了,那我们的小游戏也就完成了。

二、实现功能

1.生成随机数(1~100的随机数)

  咦!懵了!我怎么生成随机数呢?

———————————————————————————————————————————

  别慌,下面介绍一个库函数 rand()—————— 解锁新技能(很重要,仔细看)

  上面是官方定义,简单点这个函数就能让我们得到随机值  

  行!我们来用用看

include<stdio.h>
include<stdlib.h>//别忘记头文件

int main()
{
  int a = rand();
  int b = rand();
  int c = rand();
  printf("%d %d %d",a,b,c);
 return 0;
}

运行几次后发现,怎么每次都41  18467  6334这三个数字,给人一种随机又不随机(如随)的感觉。

我们再来好好看看这个rand函数怎么介绍的

emmm...

简单就是说,使用rand函数之前我们得先用一个srand的函数来设置“种子” 。

我们可以这样理解,rand函数其实就是接受一个值x,然后加减乘除一通(或者其他运算),算来算去,最后得到我们所谓的随机数y。    类似于y=f(x)  给个种子x就给你个随机值y。

理解了这个,我们就来看看刚刚咋回事?

哦!我们原来并没有给rand种子,所以它就用默认的种子来算,所以每次得到的结果都是一样的。

接下来我们就把srand用上,先来看看官方介绍

srand用起来!

include<stdio.h>
include<stdlib.h>//别忘记头文件

int main()
{
  srand(200);//设置种子
  int a = rand();
  int b = rand();
  int c = rand();
  printf("%d %d %d",a,b,c);
 return 0;
}

运行了几次之后,咋结果还是一样呢

原因是:其实这和刚刚就是一样的道理,只是这次的初始值是由我们给了个200,上次的初始值是默认的。 每次初始值都不变,所以最终还是没法得到真正的随机值。

难道我们srand里设置的种子应该是个————随机值?!!

为了生成随机值首先我们得有随机值??!

No,再仔细一想,其实srand里不是随机值也行,但值必须是每次运行程序时都不一样。这样每次生成的随机值才不一样。

哦!!奥妙就在这里,我们发现每次运行程序的时间都不一样,那我们把时间放进去不就可以了,时间不就是一个一直在改变的值吗?

接下来我们看看怎么把时间放进去

这里我们要用到第三个函数 time

Gets the system time——获取系统时间

对头,这个就是我们想要的函数

include<stdio.h>
include<time.h>//time 函数的头文件
include<stdlib.h>//rand srand 的头文件

int main()
{
  srand((unsigned int)time(NULL));//设置种子 srand+time
  int a = rand();
  int b = rand();
  int c = rand();
  printf("%d %d %d",a,b,c);
 return 0;
}

 srand里需要个unsigned int 所以我们就强制类型转换一下,time函数里需要个指针,那我们就放个NULL空指针进去。

运行结果交给你们来!

OK,随机数已经到手,现在只差临门一脚

怎么得到1~100之间的数呢?

(随机数%100)这个的范围,我们想想是不是0~99

  那(随机数%100)+1  这个的范围不就是我们想要的1~100

大功告成!接下来就简单了!

2、你来猜(输入要猜的数)

  int com=0;
  scanf("%d",&com)//后面也用com表示

相信对于大家来说那不是有手就行!

3.提示玩家猜大或猜小了,直到猜对为止
//生成1~100的随机数
    srand(unsigned int(time(NULL));
	int R = rand() % 100 + 1;

	int Com = 0;//玩家

	int count = 0;//记录猜的次数
    int Time = 6;//设置一个猜数次数

	for (count = 0; count < Time; count++)
	{
		printf("猜猜我是多少?\n");
		printf("我猜是> ");
		scanf("%d", &Com);
		if (Com > R)
		{
			printf("猜大了!\n");
			printf("剩余次数:%d次\n", Time - count-1);
		}
		else if (Com < R)
		{
			printf("猜小了!\n");
			printf("剩余次数:%d次\n", Time - count-1);
		}
		else
		{
			printf("恭喜你,猜对了!\n");
		}
	}

同样的这不也就是信手拈来!

三、最后我们把功能合并一下,看代码!

接下来就会运用到:

循环语句:

do-while  语句

for 语句

选择语句:

if  语句

switch 语句

游戏中加入菜单  猜数次数功能,让游戏更合理

//猜数字游戏
#include<stdio.h>
#include<stdlib.h>
#include<time.h> //头文件

void menu()//菜单界面
{
	printf("******************************\n");
	printf("****      猜数字游戏      ****\n");
	printf("****      1.开始游戏      ****\n");
	printf("****      0.退出游戏      ****\n");
	printf("******************************\n");
}

void game()//选择开始游戏就会调用这个部分
{
	//生成1~100的随机数
	int R = rand() % 100 + 1;

	int Com = 0;//玩家

	int count = 0;//记录猜的次数
    int Time = 6;//设置一个猜数次数

	for (count = 0; count < Time; count++)
	{
		printf("猜猜我是多少?\n");
		printf("我猜是> ");
		scanf("%d", &Com);
		if (Com > R)
		{
			printf("猜大了!\n");
			printf("剩余次数:%d次\n", Time - count-1);
		}
		else if (Com < R)
		{
			printf("猜小了!\n");
			printf("剩余次数:%d次\n", Time - count-1);
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}

int main()
{
	srand((unsigned int)time(NULL));//定义种子,运用上面讲的知识
	int input = 0;//用来选择的变量
	do
	{
		menu();//菜单
		printf("请输入你的选择>  ");
		scanf("%d", &input);
			switch (input)
			{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("选择错误,重新选择>\n");
			}
	} while (input);
	return 0;
}

恭喜你!运用所学知识做出了猜数字小游戏!

未来掌握更多知识后,可以加点好玩的功能(超过猜数次数就关机等)给好兄弟(倒霉蛋)玩一玩。

希望大家喜欢作者的写作风格,以后会持续更新各种各样有意思的程序!在开心玩耍中学习知识,请大家多多关注!

  • 29
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值