IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> devc++未成年保护模式系统 -> 正文阅读

[C++知识库]devc++未成年保护模式系统

? ? ? ?众所周知,现在的各大游戏都有未成年保护模式(非常烦人啊)。当然,这个系统用c++也是可以做出来的,大家如果想给自己编的游戏设置这个系统,可以参考以下方法:

? ? ? ?虽然大家都很熟悉这个系统,但先介绍一下它的规定:未满18岁的游戏用户只能在8~22点获取游戏服务,每日不超1.5小时(我们就不考虑节假日了,直接一视同仁),这是旧规定。前几天又出了新规定,每周五、六、日晚上8~9点才能玩游戏。我们新旧规定都介绍一下。

? ? ? ?那么要怎样实现呢?

? ? ? ?1.实名注册

//我们先定义一个时间的结构体,包括年、月、日、小时、分钟、秒
struct Time
{
	int year,month,day,hour,minute,second;
};
//我们再定义一个结构体,包括玩家的出生年月日和年龄
struct Player
{
    int y,m,d,age;
};
Player me;//定义一个me
bool judge_num(string num)//用于避免某些玩家乱输入身份证号码
{
	int i,k=0;
	int xs[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
	char x[11]={'1','0','X','9','8','7','6','5','4','3','2'};
	for(i=0;i<17;i++)
	  k+=(num[i]-'0')*xs[i];
	k%=11;
	return (x[k]==num[17]);//采用判断校验码的方式
}
void namek()
{
	printf("请输入姓名:");
	string num;
    bool flag;
	cin>>num;
	do
	  {
		printf("请输入身份证号码:");
		cin>>num;
		flag=judge_num(num);
		if (flag==0)
		  printf("输入有误,请重新输入!\n");
	  }
	while(flag==0);
	int y,m,d;
	y=(num[7]-'0')*1000+(num[8]-'0')*100+(num[9]-'0')*10+(num[10]-'0');
	m=(num[11]-'0')*10+(num[12]-'0');
	d=(num[13]-'0')*10+(num[14]-'0');
	Time now=gottime();//gottime在下面会提到
	me.y=y;
	me.m=m;
	me.d=d;//保存数据
	me.age=(now.year-me.y)+(now.month>me.m||now.month==me.m&&now.day>me.d);//计算年龄
} 

? ? ? ?这里给大家普及一下身份证的校验码计算方法:将身份证号码前17位分别乘以7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,然后模11,得到的余数分别为0,1,2,...,10,对应1,0,X,9,8,7,6,5,4,3,2这11个数字,也就是校验码。我们在判断时只需计算一下校验码,判断是不是合法的即可(也就是说姓名在这儿没用)。

? ? ? ?2.获取当前时间

? ? ? ?只有获取了当前的时间,才能判断该玩家能否进入游戏。

//然后就需要获取当前时间了,有个很好用的方法:
Time gottime()
{
	Time TIME;
	time_t now=time(0);
	tm*ltm=localtime(&now);
	TIME.year=1900+ltm->tm_year;
	TIME.month=1+ltm->tm_mon;
	TIME.day=ltm->tm_mday;
	TIME.hour=ltm->tm_hour;
	TIME.minute=ltm->tm_min;
	TIME.second=ltm->tm_sec;
	return TIME;
}

? ? ? ?这样,我们通过调用gottime()函数,就可以获取当前的详细时间了。

? ? ? ?3.判断今天星期几(新规定)

? ? ? ?这个问题在平时考试时经常出现,计算方法当然是越简单越好,考虑电脑的优质性能,我们采用笨方法(但是很实用,考试除外)

? ? ? ?

int getwday(int y,int m,int d)
{
	const int monthS[2][13]=
	{
	{0,31,28,31,30,31,30,31,31,30,31,30,31},
	{0,31,29,31,30,31,30,31,31,30,31,30,31},
	};
	int i;
	//以2021.09.01星期三开始算起
	int y1,m1,d1;
	for(y1=2021;y1<=y;y1++) 
	  for(m1=9;m1<=m||y1<y&&m1<=12;m1++)
	    i+=y1==y&&m1==m?d:monthS[y1%400==0||y1%100!=0&&y%4==0][m1];//省掉if和else
	return (i+1)%7+1;
} 

? ? ? ?这就是很暴力的一个月一个月的算的方法。

? ? ? ?4.时间限制

? ? ? ? ?这里就不写代码了,因为稍有点复杂。方法就是每次关闭游戏时使用clock()函数记录本次游戏的时间,然后保存起来,如果今天之内再次打开游戏则将时间累加,如果一天过去了,则清空保存的数据重新记录。

? ? ? ?5.旧规定判断方法

bool baohu()
{
	Time jk=gottime();
	int m=jk.hour;
	if (m<=8||m>=22)
	{
	  cout<<"你好,根据国家政策,保护模式限定8点~22点才能登录游戏,请退出!\n";
	  return 1;
	}
	return 0;
}

只需判断时间即可

? ? ? ?6.新规定判断方法

? ? ? 先判断是否是在周五~周日,其次判断是否在20~21点,如果不是则直接退出就行。由于代码过于简单,这里就不写了,获取时间的方法刚才说过了。

? ? ? ?如果你还有更好的方法,欢迎在下面评论提出喔!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:29:00  更:2021-09-22 14:31:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:31:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码