C语言入门—猜数字游戏(猜错4次电脑自动关机)

 前言

        Hello,大家好!我是Summer歆,今天给大家分享的是用C语言编写带有整蛊趣味的猜数字游戏,在猜错4次后需要输入指令否则电脑自动关机。

        让我带大家刨析一下游戏的组成:进入游戏后,程序会自动生成一个1-100之间的随机数,我们可以猜猜这个数字是多少。如果猜错了,程序会提示我们是猜大了还是猜小了。我们一共有4次机会,只要在4次内猜对我们就通过了游戏。如果4次机会耗完还没猜对就游戏失败,进入惩罚阶段:需要输入一段指令,否则电脑在一分钟内自动关机。接下来让我们看看游戏的设计过程以及最终的成品吧。

一. 如何生成一个随机数

       我们要想编写猜数字的游戏,首先要生成一个随机数供玩家猜测。那么我们要怎样才能实现一个随机数的生成呢?

   1.rand函数

#include<stdlib.h>
int rand(viod);

        rand函数是C语言提供给我们能够生成随机数的函数,但它生成的是伪随机数,它的使用需要包含头文件stdlib.h。那么什么是伪随机数呢?我们运行两次rand函数就会发现生成的随机数是相同的。

        那是因为伪随机数并不是真正的随机数,它是对一个叫“种子”的基准值进行运算生成的随机值。而这个种子是不变的,默认值为1。也就是说我们每次使用rand函数生成的随机值是不变的。

       这样说不好理解,那我们打个比方:假设我们需要的随机数为y,随机数y的生成是基于一种运算完成的,假设这种运算为y=3x,x就是我们上面提到的种子,它的默认值为1,所以不管我们运算多少次得到的随机数y都是3,是不变的,也就配不上我们随机数这个名,只能退而求其次叫伪随机数。想让这个伪随机数变起来其实也很简单,我们只需要让“种子”改变就行了。当然,这里我们只是把这种运算简化了,真正的运算肯定比这复杂得多。

        问题到这里也就很明朗了:我们需要一个随机数,但生成的是伪随机数,达不到我们我们的要求,而改变“种子”的值我们就能得到一个真正的随机数。所有我们需要思考的是如何改变“种子”的值。

2.srand函数

void srand(种子)

       srand函数中的参数就是我们需要改变的种子,我们只要改变srand函数中的参数并在使用rand函数前调用srand函数就可以实现随机数的生成。

        随机数的生成是实现了,但是像这样每次手动输入并改变“种子”的值比较麻烦,如果我们能够让“种子”的值自动改变那就实现了真正意义上的随机数的生成。那么怎么让“种子”自动改变呢?

3.time函数

#include<time.h>
time_t time(time_t* timer)

       如果我们能找到一个自动改变的数并赋值给“种子”,那么这个问题就迎刃而解了。那么什么是在一直自动改变的呢?——答案是时间。

       time函数就可以获取时间,并以当前的时间与1970年1月1日0分0秒这个时间点做差,单位为秒,得到的数也叫时间戳。返回的类型为time_t类型,本质上是型。time函数的参数timer如果是非NULL的指针,函数也会将这个返回的差值放在timer指向的内存中带回去;如果是NULL型,就只会返回这个时间的差值,我们也就得到了自动改变的“种子”。接下来实现代码:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
  srand((unsigned)time(NULL));
  printf("%d",rand());
  return 0;
}

 

       至此,我们实现了生成一个随机数,但这个随机数还不符合我们的要求,我们要的是1-100内的随机数,那我们该怎么做呢?---取模,如果我们把得到的随机数用100取膜就得到了0-99之间的随机数,在此基础上加1就得到了1-100之间的随机数。代码如下(运行图我就不展示了):

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
  srand((unsigned)time(NULL));
  int random_num=rand()%100+1;
  printf("%d",random_num);
  return 0;
}

二. 如何让电脑自动关机

       在游戏失败后,我们就让电脑自动关机,但我们只是整蛊,并不是给整不活,还是得留点回旋的余地。我们可以设置让玩家在一分钟内完成特殊指令(这个可以自己DIY),比如输入我是那啥。否则就自动关机。那它是怎么实现的呢?

1.shutdown命令

         在电脑菜单中有搜索cmd,会出现一个命令提示符,我们点开后输入shutdown命令,再输入(空格)+(-s),表示关机;接着输入(空格)+(-t)表示设置关机时间;最后输入(空格)+(60),表示在60秒后关机。想要取消关机的话可以输入shutdown  -a。这些都是计算机中的指令,我们该怎么运用到C语言中来呢。

2.system库函数

system是包含在#include<stdlib.h>头文件中的库函数,可以用来执行系统命令,在了解到这些后我们就柳暗花明了。

#include<stdio.h>
#include<stdlib.h>
int main
{
  printf("电脑将在60秒后关机");
  system("shutdown -s -t 60");\\关机指令
  printf("电脑取消关机");
  system("shutdown -a");\\取消关机指令
  return 0;
}

三. 功能组装

1.游戏菜单+生成随机数

   打开程序后玩家可以选择是否游戏。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	int input = 0;
    srand((unsigned)time(NULL));
	do
	{
     printf("******************");
	 printf("***** 1.play *****");
	 printf("***** 2.exit *****");	
	 printf("******************");
	 printf("请选择:");
	 scanf("%d", &input);
	 switch (input)
	 {
	 case 1:
		 game();//游戏主体,封装成函数。
		 break;
	 case 2:
		 printf("退出游戏");
		 break;
	 default:
		 printf("输入错误,请重新输入");
		 break;
	 }
	}
	while(input)
	return 0;
}

2.猜数字

     玩家输入一个数字,与生成的随机数比对,如果错了提示猜大了还是猜小了,一共给玩家4次机会,只要在4次内猜对就通过了游戏。并封装在game()函数内。

void game();
{
    int randow_num = rand() % 100 + 1;
    int guess = 0;
	int i = 4;
	while (i)
	{
		if (guess > randow_num)
		{
			printf("猜大了\n");
		}
		else if (guess < randow_num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜对了!");
            break;
		}
		i--;
		if (i = 0)
		{
			punishment();//惩罚程序,封装成函数。
		}
	}
}

3.自动关机

        上文中已经介绍了如何让电脑自动关机,代码如下:

void punishment()
{
	char get[20] = { 0 };
	system("shutdown -s -t 60");
	printf("请注意:您的电脑将在60秒内关机,如果输入:我是小丑,就取消关机");
again:
	scanf("%s", get);
	if (strcmp(get, "我是小丑") == 0)//判断两个字符串内容是否相等
	{
		system("shutdown -a");
	}
	else
	{
		printf("输入错误,请重新输入");
		goto again;
	}
}

四. 成品展示

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
void punishment()
{
	char get[20] = { 0 };
	system("shutdown -s -t 60");
	printf("请注意:您的电脑将在60秒内关机,如果输入:我是小丑,就取消关机\n");
again:
	scanf("%s", get);
	if (strcmp(get, "我是小丑") == 0)
	{
		system("shutdown -a");
	}
	else
	{
		printf("输入错误,请重新输入\n");
		goto again;
	}
}
void game()
{
	int randow_num = rand() % 100 + 1;
	int guess = 0;
	int i = 4;
	while (i)
	{
		printf("还剩下%d次机会\n", i);
        scanf("%d",&guess);
		if (guess > randow_num)
		{
			printf("猜大了\n");
		}
		else if (guess < randow_num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜对了!\n");
            break;
		}
		i--;
	   if (i == 0)
	  {
		  printf("游戏失败,请接受惩罚\n");
		  punishment();
	  }	
	}
   
}
int main()
{
	srand((unsigned)time(NULL));
	int input = 0;
	do
	{
		printf("******************\n");
		printf("***** 1.play *****\n");
		printf("***** 2.exit *****\n");
		printf("******************\n");
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 2:
			printf("退出游戏");
			break;
		default:
			printf("输入错误,请重新输入");
			break;
		}
	} while (input);
		return 0;
}

        到这也就结束了今天的分享,快复制代码去整蛊你的小伙伴吧!我是Summer歆,期待每位读者的关注!

  • 34
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值