【c语言】写出第一个游戏:猜数字

先给出我的思维导图:

 猜数字的基本要求有四个:

1.有菜单供玩家选择

2.有一百个数字,并且系统会随机给出一个数字让玩家猜。

3.猜错时,系统会给出时猜大还是猜

4.游戏能重复玩耍

写代码的流程及问题的解决

1.创建一个菜单:

建立菜单首先我们考虑使用函数menu。菜单建立如下:

void menu()
{
  printf("***********************");
  printf("*****  1.paly  ********");
  printf("*****  0.exit  ********");
  printf("***********************");
}

 其次,我们要考虑到玩家输入不同数字时产生不同的效果,所以我们使用switch分支(switch与ifelse的区别看我的文章)。

然后,为了让玩家能重复玩,且至少玩一次,我们可以考虑用dowhile循环(循环的区别看我的文章)。

具体效果如下:

do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("正在退出");
			break;
		default:
			printf("请重新输入");
			break;
		}
      } while (input);

 2.有一百个数字,并且系统会随机给出一个数字让玩家猜:

如果要让系统能创造一个随机数,就必须能让系统随时变化,这里我们可以采用时间戳。

首先我们得使用rand函数,这个函数的作用就是产生随机数,但它有个弊端,它产生随机数的依据是在数据库0~RAND_MAX(32767)这里取值。可是当数据库的起点和终点都一样时,系统每次产生的随机数就都相同了。

所以为了改变数据库的起点或终点,我们采用srand函数

srand用法::它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如:srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned)time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned)time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。(转载自CSDN博主「天糊土」的原创文章)

可即使采用了srand((unsigned)time(NULL)) 仍然可能出问题,也就是这个函数放哪里。

为了增加数字的随机性,我们要把数据库的起点也就是srand((unsigned)time(NULL)) 既要放在rand前,但又不能放在游戏循环内。这样既能防止数字出现规律,又能使数字随机。

3.猜错时,系统会给出猜大了还是猜小了

既然出现了条件分支,那么就要考虑使用if语句了。这里直接给出实例:

while (1)
	{
		printf("请猜数字\n");
		scanf("%d", &guess);
		if (guess<ret)
		{
			printf("猜小了\n");
	     }
		else if (guess>ret)
		{
			printf("猜大了\n");
		}
			else
		{
			printf("猜对了\n");
			break;
		}
	}

接下来只要补充细节,便可完成这个小游戏了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值