基于随机数游戏的实现

        在上一篇博客中,我们简单地介绍了C语言的分支与循环语句。今天我们来进行随机数游戏的进阶与提升。

1.项目演示

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
//猜数字游戏
void menu()
{
	printf("********************\n");
	printf("***** 1. start *****\n");
	printf("***** 0.  end  *****\n");
	printf("********************\n");
}
void game()
{
	int x = rand()%100+1;
	int guess = 0;
	while (1)
	{
		printf("请输入数字:\n");
		scanf("%d", &guess);
		if (guess < x)
		{
			printf("小屁孩儿,你猜小了\n");
		}
		else if (guess > x)
		{
			printf("小屁孩儿,你猜大了\n");
		}
		else
		{
			printf("你猜对了!\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned)time(NULL));
	int a = 0;
	while(1)
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &a);
		if (a == 1)
		{
			game();
			break;
		}
		else if (a == 0)
		{
			printf("退出游戏!\n");
			break;
		}
		else
		{
			printf("输出无效,请重新输入!\n");
		}
	}
	system("pause");
	return 0;
}

        首先,看到我们定义了一个menu函数,因为我们不需要它返回任何值,故设定其类型为void,其功能是打印游戏的菜单。接着,进入了该游戏的核心环节,game(同menu函数类型为void的原因)!最后,就是进入main函数进行函数调用了(当然,我们这里也可以将以上的两个函数直接装入主函数中,但是会造成main函数的臃肿,分装有利于可读性的提高)。

2.详细解读

(1). menu函数的实现

是否进入一个游戏取决于玩这个游戏的人,编写者必须给游客选择的权利。

void menu()
{
	printf("********************\n");
	printf("***** 1. start *****\n");
	printf("***** 0.  end  *****\n");
	printf("********************\n");
}

        这串代码负责对菜单打印,选择‘1’就是开始游戏,‘0’就是退出游戏。诶,如果输入其他值咋办?等一会在主函数中会提到,这里先不做说明。

(2). game函数的实现

void game()
{
	int x = rand()%100+1;
	int guess = 0;
	while (1)
	{
		printf("请输入数字:\n");
		scanf("%d", &guess);
		if (guess < x)
		{
			printf("小屁孩儿,你猜小了\n");
		}
		else if (guess > x)
		{
			printf("小屁孩儿,你猜大了\n");
		}
		else
		{
			printf("你猜对了!\n");
			break;
		}
	}
}

        这里我们用到了while语句和else if语句,注意到这里的while语句只要没有break就是无限循环的,如想对猜数的次数进行限制,可以参考以下代码:

void game()
{
	int x = rand()%100+1;
	int guess = 0;
	int count = 5;
	while (count)
	{
		printf("请输入数字:\n");
		scanf("%d", &guess);
		if (guess < x)
		{
			printf("小屁孩儿,你猜小了\n");
			count--;
		}
		else if (guess > x)
		{
			printf("小屁孩儿,你猜大了\n");
			count--;
		}
		else
		{
			printf("你猜对了!\n");
			break;
		}
	}
}

        这里我们新增加了一个变量count,负责限制循环的次数。经过上篇文章的学习,我们知道,while()内值为0时为假,不执行{}内的操作。如果没有猜对的话,count会进行自减的操作,通过每次对count的检测,来确定是否进行循环。

因为要生成随机数,所以我们调用了一个rand函数来生成,但是请注意rand函数生成的随机数是伪随机数,你经过VS跑数次之后会发现这个数相差不大。记得包含头文件咯(#include<time.h> #include<stdlib.h>)具体有关rand函数以及下面srand的用法的介绍请参考http://t.csdnimg.cn/0cJB0

        当然,他次数用完还没有猜对时,可以告诉他真正的答案是多少 ,这个代码请读者自己去实践一下咯。

(3) . main函数

int main()
{
	srand((unsigned)time(NULL));
	int a = 0;
	while(1)
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &a);
		if (a == 1)
		{
			game();
			break;
		}
		else if (a == 0)
		{
			printf("退出游戏!\n");
			break;
		}
		else
		{
			printf("输出无效,请重新输入!\n");
		}
	}
	system("pause");
	return 0;
}

        这里我们首先定义了一个变量,然后调用menu函数输入一个值用以确认是否进行游戏,如果输入值非菜单的值,将会重新进入循环。这里我们可以将代码进行一定程度的优化:

int main()
{
	srand((unsigned)time(NULL));
	int a = 0;
	do
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
		{
			game();
			break;
		}
		case 0:
		{
			printf("退出游戏!\n");
			break;
		}
		default:
		{
			printf("输出无效,请重新输入!\n");
		}
		}
	}while (a);
	system("pause");
	return 0;
}

使用do…while语句以及switch语句,会大大简化代码。

        今天的文章讲了条件分支与循环的实战,在下一篇博客中,我会讲述数组的有关知识,一起加油咯~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值