基础小游戏——猜数字(猜不对有惩罚哟)

初步代码的实现

//
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu()
{
	printf("****************************\n");
	printf("*********1,play*************\n");
	printf("*********0,exit*************\n");
	printf("****************************\n");

}
void play()
{
	int a = rand() % 100 + 1;
	int b = 0;
	while (1)
	{
		printf("请输入你猜的数字:");
		scanf("%d", &b);
		if (b > a)
		{
			printf("猜大了\n");
		}
		else if (b < a)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:play(); break;
		case 0:printf("退出游戏\n"); break;
		default:printf("输入错误,请重新输入\n");

		}
	} while (input);
	return 0;
}

这是这个游戏代码的初步形态。

局部代码细讲

1,在这里插入图片描述
首先用rand()函数产生随机数,我们玩家从键盘上输入,当我们输入的值不是电脑产生的随机数的时候,就会提示我们我们输入的数据与随机数的大小关系,知道输入正确然后跳出循环。这里我们用到了rand函数,后面我们介绍。
2,在这里插入图片描述
作为一个小游戏肯定是需要一个菜单的,这里做的比较建议简易。在这里插入图片描述根据菜单的提示我们要根据玩家输入的数字,来实现游戏。
输入1,就进入游戏,输入0,就会退出游戏。
在这里插入图片描述
3,*rand函数:*我们在调用rand函数的时候电脑会随机给出0-32767的一个数,由于我们游戏需要的是1-100的数据,我们可以做取余数处理,因为我们知道任何一个数%100的结果都是0-99的,此时我们再加上一就是1-100.
所以上面我们用的是rand()%100+1表示随机产生1-100之间的数。
但是我们发现单纯的使用rand函数每局游戏产生的随机数都是一样的,所以又要引出srand函数了。
*srand函数:*当srand函数的参数是不断变化的时候,我们每局产生的随机数就不同了,但又出现了一个问题,我们怎么保证srand函数的参数是随机的呢,这又要引出time函数
*time函数:*time(NULL):会产生时间戳,显然时间是不断变化的,所以就解决了srand函数参数要不断变化的问题。

惩罚措施

我们再对这个游戏进行优化一下,加入一个惩罚措施——当输入十次都没猜对的话就会使你的电脑在一分钟之后关机(当然你也可以加大难度比如五次没猜对),只有输入我是猪后才能关闭关机程序。
我们先介绍一下shutdown -s 这是电脑自带的关机命令,shutdown -s -t 60就表示一分钟之后关机。
shutdown -a是取消前面的关机程序。
在这里插入图片描述
这里还用到了strcmp函数,这是一个比较两个字符串的函数,依次比较相应元素的ascall码返回值有大于零,等于零,和小于零三种。若两个字符串完全相同,那么就会返回零。
下面展示最终的代码

// 
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu()
{
	printf("****************************\n");
	printf("*********1,play*************\n");
	printf("*********0,exit*************\n");
	printf("****************************\n");

}
void play()
{
	int a = rand() % 100 + 1;
	int b = 0;
	int count = 0;
	char arr[20] = "";
	while (1)
	{
		printf("请输入你猜的数字:");
		scanf("%d", &b);
		count++;
		if (b > a)
		{
			printf("猜大了\n");
		}
		else if (b < a)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		if (count >= 10)
		{
			system("shutdown -s -t 60");
			printf("输入我是猪,否则电脑将在一分钟后关机\n");
			scanf("%s", arr);
			if (strcmp(arr, "我是猪") == 0)
			{
				system("shutdown -a");
				break;
			}
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:play(); break;
		case 0:printf("退出游戏\n"); break;
		default:printf("输入错误,请重新输入\n");

		}
	} while (input);
	return 0;
}

在这里插入图片描述

希望对大家有所帮助。
制作不易给个“一键三连”吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大理寺j

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值