用C语言写猜数字游戏(拿去惩罚你的室友在为不过)

猜数字游戏是C语言的第一道小小门槛,而你又是否掌握了其编程逻辑?下面用一道猜数字游戏。

规则:系统随机分配1~100之间的数,我们自行输入其中的一个值,直到输入正确答案(注:如果机会用完则需要接受惩罚)

看到此问题是我们又该如何解决呢?

首先,我们需要明确目标:

1.先制作菜单:告知玩家游戏规则

2.需要制作1~100之间的数

3.系统从这之间的数产生一个值(注意:该结果不需要打印,直到玩家猜出正确答案

4.玩家需要从键盘输入数字(则需要用到scanf函数)

5.制定一定惩罚,如:玩家失败可以强制电脑关机等等,友友们有需要可自行写代码制定一定惩罚

下面我们将按照以上目标一一进行

1.打印菜单(使用printf函数即可,友友们可自行尝试,在这就不过多介绍)

2.制作1~100之间的数(则可以使用循环函数在我其他内容有讲解到)

3.系统该如何随机产生1~100之间的一个数呢???

此时需要用到rand函数,一下是rand函数的定义

A:rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是⼤部分编译器上是32767。


B:rand函数的使⽤需要包含⼀个头⽂件是:stdlib.h


C:rand函数⽣成的随机数是伪随机的, ⽣成随机数的默认种⼦是1。


D:在调⽤rand函数之前先调⽤srand函数,通过srand函数的参数seed来设置rand函数⽣成随
机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。

int  r  =  rand() % 100 + 1; //由于rand产生值为0~32767,%后值为0~99,再加1则产生0~100数字
//如果要生成a~b的数,则为a + rand() % (b - a + 1)  -->需要头文件stdlib.h

既然rand函数默认种子为1,此时我们需要通过srand函数来使rand函数产生随机种子

srand((unsigned int)time(NULL));  ——>需要头文件time.h

4.scanf在我文章内容也有讲解。

5.如果要使用关机惩罚,我其他文章里有介绍。

目标完成后则可以通过编程思维及理解写出代码,以下便是猜数字游戏的代码。

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#include<Windows.h>

void menu()
{
	printf("*****  选择是否玩游戏  *****\n");
	printf("*****  若玩游戏,请选择1  *****\n");
	printf("*****  若不玩则选择0  *****\n");
	printf("*****  请选择:  *****\n");
}

void game()
{
	printf("提醒:若次数用完请接受惩罚\n");
	printf("系统已随机生成1~100中的一个数字\n");
	printf("开始游戏:请输入数字\n");
	int r = rand() % 100 + 1;
	int guess = 1;
	int cnt = 7;
	while (1)
	{
		printf("你拥有%d次机会\n", cnt);
		printf("请输入:");
		scanf("%d", &guess);
		if (guess < r)
			printf("猜小了\n");
		else if (guess > r)
			printf("猜大了\n");
		else
		{
			printf("恭喜你猜对了,数字是:%d\n",r);
			break;
		}
		cnt--;
		if (cnt == 0)
		{
			printf("失败,请接受惩罚\n");
			char input[] = { 0 };
			system("shutdown -s -t 60");
			while (1)
			{
				printf("请注意,你的电脑在一分钟内关机,如要取消,请输入:我是猪,就取消关机\n");
				scanf("%s", input);
				if (0 == strcmp(input, "我是猪"))
				{
					system("shutdown -a");
					break;
				}
			}
		}
	}
}


	
int main()
{
	int input = 1;
	srand((unsigned int)time(NULL));
	do {
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("欢迎光临\n");
			break;
		default:
			printf("输入错误,请重新选择\n");
		}
	} while (input);

	return 0;
}

当然,这段代码显得很长很绕,那么我们是否可以让其更加简单呢?答案是肯定的。(在这篇文章就不做多介绍)

我们可以让其函数进行分装,这有什么目的呢?

1.可以让其代码更加清晰易懂

2.可以隐藏代码(需要改成静态库),对我们的代码有一定的保护性

这些在我之后的文章里都会讲到,友友们可自行尝试。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值