小游戏———《猜数字》,但不完全是猜数字

        好久不见啊,假期期间复习了一些学校学习的知识,整合成了一个小程序,一起来看一下吧。

37dd8c670bc8490fb252bfc380cd7482.png

 

        因为程序包含多个功能,所以我创立了不同的函数模块,使各个模块分开设计,互不干扰。

        首先是一个菜单标题页,因为不需要返回值,所以我们直接使用void来定义函数。

   一:用menu1来作为函数名

void menu1()
{
	printf("********************\n");
	printf("**** 请设置密码 ****\n");
	printf("********************\n密码:");
}

实现效果如下

2af7a7df45fb4cd9a71c24c3f6a2ed55.png

二:密码设置及进入

        接下来就是第二个模块,设置密码,然后输入密码,并且有三次的输入机会,三次输入错误则退出程序。

        输入密码

void password()//密码块
{
	char pass[10] ={0};                         //定义一个字符串,用来存放设置的密码
	scanf("%s", pass);                          //输入密码
	printf("  !设置成功!\n!解锁后开始游戏!\n");//设置成功后开始输入密码进入游戏
	printf("请输入密码:");                     //pass字符串是正确的密码
	char word[10] ={0};                        //word字符串是后来输入的,我们要将其进行比对
	

        然后我们用接下来的程序实现三次错入机会的效果

int i = 0;                                  //定义一个变量,主意这个变量定义在函数内部
	while (i < 3)                          //其作用域只有这个函数当“ i ”小于三时进入循环        
	{
		scanf("%s", word);                   //输入密码,存到word
		if ((strcmp(word,pass))==0)           //用strcmp来将先后输入的密码进行比对
		{
			printf("输入正确\n游戏开始\n");    //如果一样,则表明输入正确并退出循环
			break;
		}
		else if (i != 3)                     //其他情况则表明输入错误
		{
			printf("输入错误,请再次尝试\n");
		}
		i++;                   //i++没有放到循环体的最后,因为这会影响到最后一条if语句的判断
		if (i == 3)            //因为i= 3时就不会再进入循环所以,要先让i加一再判断这条if语句
		{
			printf("三次错误输入,程序已结束运行");
			Sleep(900);         //时程序暂停900毫秒,使看起来舒适
			int* p = &ip;
			*p = 0;
			break;
		}
    }

        还记得最开始定义的一个整形变量ip吗?他就要用在这里了

            int* p = &ip;
			*p = 0;
			break;

        因为这个实参变量ip在函数外部,我们要想影响到它的真实值就要使用指针,如果三次不成功则做一个记号,将原本为1的ip变为0,再在主函数外部进行检测判断,如果ip等于0则直接退出程序。

        其实也可以直接使用exit(0);这个指令直接替换掉这三条语句,但是想到了指针的知识所以使用了一下,想要简单粗暴的方法的话替换掉就好。

        实现效果如下

28382c2692ed465eafd92be6c888d30a.png

 

 

52bb2040058846d2bde9fdef08750e0c.png

三:引导及进一步确认

         接下来就进入到游戏的部分了,猜数字游戏的主体前还需要一个引导环节,游戏模块,当然在它之前也需要一个菜单界面,我们给他来安排一下。

int menu2()//菜单块2                                    //菜单,打印就好
{
	printf("*******************************\n");
	Sleep(1000);
	printf("*********1.开始游戏************\n");
	Sleep(1000);
	printf("*********2.退出游戏************\n");
	Sleep(1000);
	printf("*******************************\n");
	printf("请输入1或2》——");
	int i = 0;                                   //创建临时变量,用于选择
	scanf("%d", &i);      //开始选择             //使用到了switch case语句
	switch (i)
	{
		case(1):                                //开始游戏
			printf("Loding");       //这就是一个小操作实现等待的效果,loding效果
			for (int i = 0; i <= 6; i++)    
			{
				printf(". ");
				Sleep(900);
			}
			system("cls");                       //清屏指令,使以后的界面不至于那么复杂
			printf("游戏启动成功");
			printf("\a");
			Sleep(2000);//暂停一会,然后清屏
			system("cls");
			printf("开始猜数>>___");
			break;                             //case结束后紧跟break紧跟break是个好习惯
		case(2):                               //退出程序
			printf("游戏已结束......");
			exit(0);                           //正常结束程序
			break;
		default:                              //习惯性加一个其他选项避免无法执行
			printf("错误!请重新输入");
			int menu2();
			break;
			
	}
	return 0;
}

        动态展示一下

8f637cc0960442a1a7856424b479bc70.gif

 

四:正式游戏

        最后就是最重要的游戏板块了

05f57a77623c4887a56e10e9cc111940.gif

 

void game()//游戏块
{
	//生成随机数
	int num = 0,c=0;
	srand((unsigned int)time(NULL));   //这里用到了srand函数来生成随机数,详细介绍见文本
	num = (rand()%100)+1;              //这里限制一下随机数的范围是0到100,以不至于太难猜到
	int n = 0;                         //因为取余100后的数字一定在100以内
	do                              //这里用do while 循环来作为猜数字的过程
	{
		while ((scanf("%d", &c)))   //用scanf返回值的特性做到多次输入的效果
		{
			if (c > num)            //猜的大了或小了就显示相应的提示
			{
				system("cls");    //用这个指令来做到清屏
				printf("猜大了\n");
			}
			if (c < num)
			{
				system("cls");
				printf("猜小了\n");
			}
			if (c == num)                //当然等于的话就是猜到了,要退出循环
			{
				system("cls");
				printf("猜对了!!恭喜!!!\n");
				break;
			}
		}
		printf("是否再来一次?输入0或1\n>>__");  //这里加了个小操作,当你想再来一次的话
		scanf("%d", &n);                          //输入1就好了
		if (n == 1)
		{
			printf("开始猜数》》__");
		}
	} while (n == 1);                //当n = 1时会再次进入大循环,然后进入小循环形成闭环

        具体来说一下这个生成随机数的函数

        srand((unsigned int)time(NULL));

        我们简单使用srand语句的话会发现每次生成的随机数都一样没有可玩性,十分的单调,不能做到完全的随机,所以我们需要借助一个时刻在变化的东西,对就是“时刻”在变化,也就是时间戳,它随着时间的变动不断变化,这个参数每时每刻都是不一样的,现在我们将这个参数作为生成随机数的参考,这样就能做到每次进入游戏它生成的随机数都不一样了。获取方法就是

               time(NULL),头文件#include<time.h>,(unsigned int)是用来强制类型转化的,为符合函数结构,不必过多在意。

        到这里介绍得就差不多了,接下来上总结:此次小常识用到了do while,指针,system指令,还有随机数的生成。有深刻想法的同志们欢迎在评论区交流。最后留下一份纯净版,需要的同学可以直接拷走。

整体版本

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<string.h>
#include <windows.h>
int ip = 1;
void menu1()
{
	printf("********************\n");
	printf("**** 请设置密码 ****\n");
	printf("********************\n密码:");
}
void password()//密码块
{
	char pass[10] ={0};
	scanf("%s", pass);
	printf("  !设置成功!\n!解锁后开始游戏!\n");
	printf("请输入密码:");
	char word[10] ={0};
	int i = 0;
	while (i < 3)
	{
		scanf("%s", word);
		if ((strcmp(word,pass))==0)
		{
			printf("输入正确\n游戏开始\n");
			break;
		}
		else if (i != 3)
		{
			printf("输入错误,请再次尝试\n");
		}
		i++;
		if (i == 3)
		{
			printf("三次错误输入,程序已结束运行");
			Sleep(900);
			int* p = &ip;
			*p = 0;
			break;
		}
	}
}
int menu2()//菜单块2
{
	printf("*******************************\n");
	Sleep(1000);
	printf("*********1.开始游戏************\n");
	Sleep(1000);
	printf("*********2.退出游戏************\n");
	Sleep(1000);
	printf("*******************************\n");
	printf("请输入1或2》——");
	int i = 0;//创建临时变量,用于选择
	scanf("%d", &i);//开始选择
	switch (i)
	{
		case(1):
			printf("Loding");
			for (int i = 0; i <= 6; i++)
			{
				printf(". ");
				Sleep(900);
			}
			system("cls");
			printf("游戏启动成功");
			printf("\a");
			Sleep(2000);//暂停一会,然后清屏
			system("cls");
			printf("开始猜数>>___");
			break;
		case(2):
			printf("游戏已结束......");
			exit(0);//正常结束程序
			break;
		default:
			printf("错误!请重新输入");
			int menu2();
			break;
			
	}
	return 0;
}
void game()//游戏块
{
	//生成随机数
	int num = 0,c=0;
	srand((unsigned int)time(NULL));
	num = (rand()%100)+1;
	int n = 0;
	do
	{
		while ((scanf("%d", &c)))
		{
			if (c > num)
			{
				system("cls");
				printf("猜大了\n");
			}
			if (c < num)
			{
				system("cls");
				printf("猜小了\n");
			}
			if (c == num)
			{
				system("cls");
				printf("猜对了!!恭喜!!!\n");
				break;
			}
		}
		printf("是否再来一次?输入0或1\n>>__");
		scanf("%d", &n);
		if (n == 1)
		{
			printf("开始猜数》》__");
		}
	} while (n == 1);
	if (n == 0)
	{
		printf("\n");
		printf("***********************************************************\n");
		printf("*********>>>>>>>>>>>>>>>> E N D <<<<<<<<<<<<<<<<<<<<*******\n");
		printf("***********************************************************\n");
	}
}
int main()
{
	menu1();
	password();
	if (ip == 0)
	{
		return 0;
	}
	system("cls");
	menu2();
	game();
	return 0;
}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寒雒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值