速算24点小游戏


推荐用DEV-c++编译

新增账号验证

 ver1.0.6新增多账号设置登录,修改密码,HELP,密码HASH算法加密,验证码 , 密码强度检验,输入过滤更加严格,避免输入错误时刷屏现象 ,修复程序意外停止情况,登陆账号显示,保存最高纪录下次登录时显示最高纪录


HDU acm提交通过

//推荐用DEV-C++编译或 code blocks!!!!!

#include<math.h>
#include<string.h>
#include <cstdlib>
#include <time.h>
#include <windows.h>
#include<iostream>
using namespace std;

double jisuan(double x,double y,char ch)
{
	if(ch=='+')
		return x+y;
	if(ch=='-')
		return x-y;
	if(ch=='*')
		return x*y;
	if(ch=='/')
		return x/y;

}
int kuohaozuhe(int w,int x,int y,int z,char c1,char c2,char c3)
{
	int flag=0;
	double a[5];
	char ch[5];
	double s,p,val;
	a[1]=w;a[2]=x;a[3]=y;a[4]=z;

	ch[1]=c1;ch[2]=c2;ch[3]=c3;

	if(ch[1]!='/'||(ch[1]=='/'&&a[2]!=0))//  顺序计算w&x&y&z   0不能做除数
	{
		s=jisuan(a[1],a[2],ch[1]);
		if(ch[2]!='/'||(ch[2]=='/'&&a[3]!=0))
		{
			p=jisuan(s,a[3],ch[2]);
			if(ch[3]!='/'||(ch[3]=='/'&&a[4]!=0))
			{
				val=jisuan(p,a[4],ch[3]);
			    if(fabs(val-24)<1e-3)
				{
				    flag=1;
				    printf("((%.0lf%c%.0lf)%c%.0lf)%c%.0lf\n",a[1],ch[1],a[2],ch[2],a[3],ch[3],a[4]);
				}
			}
		}
	}

	if(ch[1]!='/'||(ch[1]=='/'&&a[2]!=0))//  先计算两端结果(w&x)&(y&z)
	{
		s=jisuan(a[1],a[2],ch[1]);
		if(ch[3]!='/'||(ch[3]=='/'&&a[4]!=0))
		{
			p=jisuan(a[3],a[4],ch[3]);
			if(ch[2]!='/'||(ch[2]=='/'&&p!=0))
			{
				val=jisuan(s,p,ch[2]);
		    	if(fabs(val-24)<1e-3)
				{    flag=1;
			    	printf("(%.0lf%c%.0lf)%c(%.0lf%c%.0lf)\n",a[1],ch[1],a[2],ch[2],a[3],ch[3],a[4]);

				}
			}
		}
	}

	if(ch[2]!='/'||(ch[2]=='/'&&a[3]!=0))//  (w&(x&y))&z
	{
		s=jisuan(a[2],a[3],ch[2]);
		if(ch[1]!='/'||(ch[1]=='/'&&s!=0))
		{
			p=jisuan(a[1],s,ch[1]);
			if(ch[3]!='/'||(ch[3]=='/'&&a[4]!=0))
			{
				val=jisuan(p,a[4],ch[3]);
			    if(fabs(val-24)<1e-3)
				{   flag=1;
			    	printf("(%.0lf%c(%.0lf%c%.0lf))%c%.0lf\n",a[1],ch[1],a[2],ch[2],a[3],ch[3],a[4]);

				}
			}
		}
	}

	if(ch[2]!='/'||(ch[2]=='/'&&a[3]!=0))//  w&((x&y)&z)
	{
		s=jisuan(a[2],a[3],ch[2]);
		if(ch[3]!='/'||(ch[3]=='/'&&a[4]!=0))
		{
			p=jisuan(s,a[4],ch[3]);
			if(ch[1]!='/'||(ch[1]=='/'&&p!=0))
			{
				val=jisuan(a[1],p,ch[1]);
		    	if(fabs(val-24)<1e-3)
				{   flag=1;
			    	printf("%.0lf%c((%.0lf%c%.0lf)%c%.0lf)\n",a[1],ch[1],a[2],ch[2],a[3],ch[3],a[4]);

				}
			}
		}
	}

	if(ch[3]!='/'||(ch[3]=='/'&&a[4]!=0))//  w&(x&(y&z))
	{
		s=jisuan(a[3],a[4],ch[3]);
		if(ch[2]!='/'||(ch[2]=='/'&&s!=0))
		{
			p=jisuan(a[2],s,ch[2]);
			if(ch[1]!='/'||(ch[1]=='/'&&p!=0))
			{
				val=jisuan(a[1],p,ch[1]);
			    if(fabs(val-24)<1e-3)
				{    flag=1;
				     printf("%.0lf%c(%.0lf%c(%.0lf%c%.0lf))\n",a[1],ch[1],a[2],ch[2],a[3],ch[3],a[4]);
				}
			}
		}
	}
	return flag;

}
int yunsuanfupaixu(int w,int x,int y,int z)//运算符排序
{
    int flag=0;
	int i,j,k;
	char ch[6]="0+-*/";
	for(i=1;i<5;i++)   //运算符排序
	{
		for(j=1;j<5;j++)
		{
			for(k=1;k<5;k++)
			{
				if(kuohaozuhe(w,x,y,z,ch[i],ch[j],ch[k])==1)
				{
					flag=1;
				}
			}
		}
	}
	return flag;

}


int shuzipaixu(int w,int x,int y,int z)//数字排序
{
    int flag=0;
	int a[5]={0,w,x,y,z};
	int i,j,k,l;
	for(i=1;i<5;i++)
	{
		for(j=1;j<5;j++)
		{
			if(i!=j)
			{
				for(k=1;k<5;k++)
				{
					if(k!=i&&k!=j)
					{
						for(l=1;l<5;l++)
						{
							if(l!=i&&l!=j&&l!=k)
							{

						        if(yunsuanfupaixu(a[i],a[j],a[k],a[l])==1)
                                    flag=1;
                             }

						}
					}
				}
			}

		}
	}
//	if(!flag)
//	puts("NO   RESULT");
    return flag;
}

struct node
{
	int hashpas,record;
}info;
int jiancezhanghao(char *name)
{
	char place[150]="C:\\Program Files\\";
	FILE*user;
	strcat(place,name);
	strcat(place,".dat");
	if((user=fopen(place,"rb"))==NULL)
		return 0;
	fclose(user);
	return 1;

}

int pasjiance(char *pas)
{
	int i,flag=0,tem=1;
	if(strlen(pas)<7)
	{printf("长度小于7\n"); flag=1;}

	for(i=1;pas[i]!=0;i++)
		if(pas[i]-pas[i-1]==1)
			tem++;
		if(tem==i)
		{ puts("密码递增"); flag=1;}
    
	tem=1;
	for(i=1;pas[i]!=0;i++)
		if(pas[i]-pas[i-1]==-1)
			tem++;
		if(tem==i)
		{ puts("密码递减"); flag=1;}
	tem=1;
	for(i=1;pas[i]!=0;i++)
		if(pas[i]-pas[i-1]==0)
			tem++;
		if(tem==i)
		{puts("密码字符重复"); flag=1;}

	tem=0;
	for(i=0;pas[i]!=0;i++)
	if(pas[i]>='0'&&pas[i]<='9')
		tem++;
	if(tem==i)
	{puts("全为数字"); flag=1;}

	tem=0;
	for(i=0;pas[i]!=0;i++)
	  if(pas[i]>='a'&&pas[i]<='z')
		tem++;
	if(tem==i)
	{puts("全为小写"); flag=1;}

	tem=0;
	for(i=0;pas[i]!=0;i++)
	  if(pas[i]>='A'&&pas[i]<='Z')
		tem++;
	if(tem==i)
	{puts("全为大写"); flag=1;}

	if(flag)
		puts("\n请重新输入密码");
	
	return flag;

}

void yanzhengma(char*username)
{
	char yzm[5],pasword[100];
    system("CLS");
		while(1)
		{
    	printf("=============休闲小游戏==============\n\n");

    	printf("请输入用户名: %s\n",username);
		puts("请输入密码: *******");
            printf("请输入验证码: ");
            srand(time(0)); 
			for(int k=0;k<4;k++)
			{
				yzm[k]=rand()%25+'a';
			    printf("%c",yzm[k]);
			}
			putchar(10);
			yzm[4]=0;
			scanf("%s",pasword);
			if(strcmp(pasword,yzm)==0)
				break;
		    system("CLS");
		}
}

int hash(char* pas)
{
	int i,s=0;
	for(i=0;pas[i]!=0;i++)
		s=s*131+pas[i];
	return s;

}

void jishi(char*p,int count,int ms)
{
	printf("%s",p);
	for(int i=0;i<count;i++)
	{
		printf("。");
		Sleep(ms);
	}
	putchar(10);
}
int zhuanhuan(char*jb)
{
	int s=0,i;
	for(i=0;jb[i]!=0;i++)
		s=s*10+jb[i]-'0';
	return s;
}

int qishiye()
{
	int xuanze;
	char tem[100];
	printf("=============休闲小游戏==============\n\n");
	printf("请选择:\n1.创建账号    2.登录账号   3.HELP\n");
	while(scanf("%s",tem),xuanze=zhuanhuan(tem),!(xuanze==1||xuanze==2||xuanze==3))
	{
		printf("输入错误,请重新输入\n");
	}
	system("CLS");
	return xuanze;
}


void xuanxiang1(char*username)
{

	FILE* userw;
	char pasword[100],passs[100];

	char place[150]="C:\\Program Files\\";

	int hashpas;
    	printf("=============休闲小游戏==============\n\n");

    	printf("请输入用户名:");
		while(scanf("%s",username),jiancezhanghao(username))
		{
			printf("账号已存在,请输入其他账号:");
		}
		system("CLS");
		printf("=============休闲小游戏==============\n\n");
    	printf("请输入用户名: %s\n",username);
		printf("请输入密码:");
	    while(scanf("%s",pasword),pasjiance(pasword))
		{
			//轻度检验
		}
		system("CLS");
		printf("=============休闲小游戏==============\n\n");
    	printf("请输入用户名: %s\n",username);
		printf("请输入密码: *******\n");
	 	printf("请再次输入密码:");
	 	while(scanf("%s",passs),strcmp(passs,pasword)) 
	 	{
             printf("密码错误,请重新输入:");
        }
	//	system("CLS");
        yanzhengma(username);
        strcat(place,username);
		strcat(place,".dat");
        hashpas=hash(pasword);
		userw=fopen(place,"wb");
	//	fputs(pasword,userw);
	//	struct node
	//	{
	//		int hashpas,record;
	//	}info;
		info.hashpas=hashpas;
		info.record=0;
	//	fwrite(&hashpas,sizeof(int),1,userw);
	//	int val=0;
    	fwrite(&info,sizeof(node),1,userw);
		fclose(userw);
		jishi("正在创建账号,请稍后 ",5,500);
		puts("账号创建成功!");
		printf("账号: %s     密码: %s\n\n",username,pasword);
		system("pause");
        system("CLS");

}

void xuanxiang2(char*username)
	{

	FILE*userr;
	char pasword[100];

	char place[150]="C:\\Program Files\\";
    int intpas;
	int hashpas;
    	printf("=============休闲小游戏==============\n\n");

    	printf("请输入用户名:");
		while(scanf("%s",username),!jiancezhanghao(username))
		{
			printf("账号不存在,请重新输入:");
		}
		strcat(place,username);
		strcat(place,".dat");
		userr=fopen(place,"rb");
		fread(&intpas,sizeof(int),1,userr);
		fclose(userr);
		system("CLS");
		printf("=============休闲小游戏==============\n\n");
    	printf("请输入用户名: %s\n",username);
		printf("请输入密码:");

	    while(scanf("%s",pasword),hashpas=hash(pasword),intpas!=hashpas)
		{
			//密码检验
			puts("密码错误,请重新输入");
		}
	//	system("CLS");
        yanzhengma(username);
		jishi("正在登陆 ",5,300);
		puts("登陆成功");
        
	}

void kaishi(char*username)
{
	int a[5],i,flag;
    int jibie,tem;
	char panduan[20];
    int max=0;
    char pasword[100];
	int val=0;
	char jb[100];
	FILE *userr;
 
	 
 
	char place[150]="C:\\Program Files\\";
    int xuanze;
 

		strcat(place,username);
		strcat(place,".dat");
    	userr=fopen(place,"rb");

		fread(&info,sizeof(node),1,userr);
		fclose(userr);
     //   printf("%d   %d   ",info.hashpas,info.record);
    system("CLS");
	
	printf("===欢迎使用速算24点游戏===\n请选择以下操作\n");
	printf("1.开始游戏\n2.修改账号密码\n3.提交HIGHEST RECORD\n\n");
	while(scanf("%s",&jb),xuanze=zhuanhuan(jb),!(xuanze>0&&xuanze<4))
	{
		printf("输入错误,请重新输入:");
	}
	if(xuanze==2)
	{

	puts("===游戏账号秘密重置===");

	userr=fopen(place,"rb");
	{
		fread(&info,sizeof(node),1,userr);
        fclose(userr);
	//	fclose(u1); fclose(u2);
		puts("请输入新密码");
		while(scanf("%s",pasword),pasjiance(pasword))
		{
			//密码检验
		}

		info.hashpas=hash(pasword);
		userr=fopen(place,"wb");
			//fputs(ch,u1);
		fwrite(&info,sizeof(node),1,userr);
		fclose(userr);
	    jishi("正在同步至服务器",8,300);

		putchar(10);
		printf("密码重置成功,新密码 %s\n",pasword);
	//	strcpy(username,ch);
	    system("pause");
	}

	system("CLS");
    } 
	else if(xuanze==3)
	{
	
        jishi("正在提交HIGHEST RECORD",8,300);
		putchar(10);
		printf("提交成功,感谢您的参与\n\n");
		system("pause") ;
		system("CLS");
	}

	else
	{
        system("CLS");
    }
	while(1)
	{
		printf("====速算24点 BY青春微凉====\n");
        printf("\n     当前登录账号: %s\n\n",username);
		userr=fopen(place,"rb");
		fread(&info,sizeof(node),1,userr);
		max=info.record; 
	    printf("     HIGHEST RECORD: %d\n",info.record);
		fclose(userr); 

	    printf("   YOU NOW HAVE %d SCORES\n",val);
   	    printf("       请输入难度级别\n    范围1 ~ 12之间的整数:");
    	while(scanf("%s",jb),jibie=zhuanhuan(jb),!(jibie>0&&jibie<13))
		{
			printf("     输入错误,请重新输入: ");
		}
    	putchar(10);
	    tem=jibie;

            if(jibie<=3)
                jibie=6; 
            else if(jibie>3&&jibie<=6)
                 jibie=jibie*3+1;
            else if(jibie>=7&&jibie<=10)
                 jibie=jibie*3;
            else if(jibie>=11&&jibie<=12)
                 jibie=jibie*3+1;

        if(tem<=10)
        {
           srand(time(0));    //根据系统时间设置随机数种子
	    	for(i=1;i<5;i++)
			{ 
				a[i] = rand() % jibie; 
	        	printf("%d  ",a[i]);
			} 

        }
        else
        {  
            srand(time(0));    //根据系统时间设置随机数种子
	    	for(i=1;i<3;i++)
			{ 
				a[i]=rand()%jibie; 
	        	printf("%d  ",a[i]);
			}
            jibie=jibie-5;
            srand(time(0));    //根据系统时间设置随机数种子
	    	for(i=3;i<5;i++)
			{  
				a[i] =-rand() % jibie; 
	        	printf("%d  ",a[i]);
			}

        }	

		puts("\n以上数字是否可以计算出24 ?  Y/N:");

		while(scanf("%s",panduan),!(panduan[0]=='y'||panduan[0]=='Y'||panduan[0]=='n'||panduan[0]=='N'))
		{
			printf("输入错误,请重新输入: ");
		}

        flag=shuzipaixu(a[1],a[2],a[3],a[4]);

        if(flag==1&&(panduan[0]=='Y'||panduan[0]=='y'))
		{
			puts("\n    YOU  ARE  CLEVER!"); 
			val=val+tem%13; 
		}
		else if(flag==0&&(panduan[0]=='N'||panduan[0]=='n'))
		{
			puts("\n    YOU  ARE  CLEVER!"); 
			val=val+tem%13; 
		}
		else
		{
			puts("\nYOU  SHOULD GOOD GOOD STUDY,DAY DAY UP!");
			val=val-tem%13; 
		}

        if(val>max)
        {
			puts("     A NEW RECORD !\n   YOU ARE VERY CLEVER ,\n Einstein CAN NOT CATCH UP WITH YOU!");
		    userr=fopen(place,"rb");
		    fread(&info,sizeof(node),1,userr);
		    fclose(userr);
			info.record=val;
			userr=fopen(place,"wb");
		    fwrite(&info,sizeof(node),1,userr);
		    max=val;
			fclose(userr);
        }
       system("PAUSE");
       system("CLS");
        
    }
//printf("%s  ",username);
}
int main()
{
	char username[100];
	int xuanze;
 
  loop:  xuanze=qishiye();
	if(xuanze==1)
	   { xuanxiang1(username);  kaishi(username);}
	else if(xuanze==2)
	{ 
		xuanxiang2(username);
    	kaishi(username);
	}
   	else if(xuanze==3)
	{printf("=============休闲小游戏==============\n\n");
		printf("欢迎使用本游戏,如有疑问请加\nQQ 772478760\n欢迎关注官方博客\nhttp://blog.csdn.net/qq909157370\n\n");
		system("pause");
        system("CLS");
		goto loop;
	}

}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值