推荐用DEV-c++编译
新增账号验证
//推荐用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; } }