/*猜数游戏*/ /*程序产生一个随机数,游戏者输入数据进行猜测。管理员可输入密码, 其中普通管理员只能获得答案,超级管理员获得答案并能修改普通管理员密码*/ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define NO 0 #define YES 1 #define QUIT -1 #define EASY 1 #define COMMON 2 #define HARD 3 #define PASSWORD2 -100 /*超级管理员密码,不可修改*/ char *PasswordName = "nihao";/*超级管理员确认密码,不可修改*/ int Password1 =-10 ; /*普通管理员密码,可修改*/ long number; /*计算机产生的随机数*/ long guess_value=0; /*游戏者输入的猜测数*/ int nbr_of_guesses=0;/*累加游戏者猜测的次数*/ int done=0; /*标记游戏者是否猜对,若猜对则 done=1*/ long chushu; void the_back_door(int password,long answer); /*开个后门好作弊,判断普通或超级管理员*/ void super_Adm_menu(void); /*超级管理员选择菜单*/ void game_introduction(void);/*游戏介绍,选择游戏级别或退出*/ void quit_or_not(void); /*确认是否退出*/ void change_password(void);/*修改普通管理员密码*/ void input_data(long Max);/*输入数据或退出,管理员可输入密码*/ void congratulate(void) ; /*祝贺猜对并问是否继续*/ int judge(void);/*判断数据是否正确*/ void enter_password_name(char *true_password);/*确认超级管理员*/ void choice(void);/*选择菜单*/ int main(void) { game_introduction();/*游戏介绍,选择游戏级别或退出*/ getchar(); return 0; } void game_introduction(void)/*游戏介绍,选择游戏级别或退出*/ { int selection; int flag=0;/*循环游戏介绍标志,选择游戏级别或退出后flag=1,循环结束*/ do { nbr_of_guesses=0; puts("这是一个猜数游戏,电脑随机产生一个数字,你可以输入一个数字来进行猜测."); do { puts("\n1--容易等级."); puts("\n2--中等难度."); puts("\n3--高难度."); puts("\n-1--离开."); puts("\n请输入一个选择."); scanf("%d",&selection); } while(selection != -1 && selection < 1 || selection > 3); if(selection == EASY) chushu=101; else if (selection==COMMON) chushu=10001; else if (selection==HARD) chushu=1000001; else quit_or_not(); /*确认是否退出*/ printf("\n\n正在产生随机数,请等待。。。\n"); /*产生随机数*/ srand( (unsigned) time(NULL)); number=(rand()*100)%chushu; flag=1 ; } while(flag==0);/*循环游戏介绍,选择游戏级别或退出*/ input_data(chushu);/*输入数据或退出,管理员可输入密码*/ } void quit_or_not(void) /*确认是否退出*/ { int flag=0; /*放弃后可再来一次*/ puts("\n哦,你放弃了!还想再来一次吗?"); puts("请输入数字 1 选择开始,否则输入其他数字选择退出\n"); scanf("%d",&flag); if (flag==YES) { guess_value=0; game_introduction();/*游戏介绍,选择游戏级别或退出*/ } else { getchar(); exit(0); } } void input_data(long Max)/*输入数据或退出,管理员可输入密码*/ { int flag=0; do { do { printf("\n选择一个 0 到 %ld 之间的数字进行猜测:",Max-1); puts("或者输入 -1 选择离开 :"); scanf("%ld", &guess_value); /*Get a number*/ nbr_of_guesses++; if(guess_value == Password1 || guess_value == PASSWORD2) the_back_door(guess_value,number); /*开个后门好作弊,判断普通或超级管理员*/ } while(guess_value != QUIT && guess_value < 0 || guess_value >= Max); if(guess_value == QUIT) quit_or_not(); /*确认是否退出*/ else flag=judge(); /*判断数据是否正确*/ } while(flag == 0);/*循环输入数据,直到用户输入正确或选择退出*/ congratulate() ;/*祝贺猜对并问是否继续*/ } int judge(void)/*判断数据是否正确*/ { done=NO; if(number == guess_value) done=YES; else if(number < guess_value) printf("\n你输入的数字 %ld 太大了!\n", guess_value); else printf("\n你输入的数字 %ld 太小了!\n", guess_value); the_back_door(guess_value,number);/*开个后门好作弊,判断普通或超级管理员*/ return done;/*返回done值,判断数据是否正确*/ } void the_back_door(int password, long answer) /*开个后门好作弊,判断普通或超级管理员*/ { if(password == Password1) { printf("\n哦,原来你是管理员,答案是 %ld", answer); input_data(chushu);/*输入数据或退出,管理员可输入密码*/ } if(password == PASSWORD2) super_Adm_menu();/*超级管理员选择菜单*/ } void super_Adm_menu (void) /*超级管理员选择菜单*/ { enter_password_name(PasswordName);/*确认超级管理员*/ puts("老板你好,您准备做些什么呢?"); choice(); } void change_password(void)/*修改普通管理员密码*/ { int new_password_1,new_password_2; int sum=0; int selection; puts("请输入新密码(注意:密码应该为整型数据):"); scanf("%d", &new_password_1); do{ puts("确认新密码:"); scanf("%d",&new_password_2); sum++; if(sum>3) { puts("你太累了,请离开电脑去休息一会!再见!"); getchar(); exit(0) ; /*退出游戏*/ } } while (new_password_1!=new_password_2 ) ;/*循环输入确认密码,直到用户输入正确或超过三次,自动退出*/ Password1 =new_password_1; puts("\n 已建立新密码!"); printf("新的密码为 %d\n",new_password_1); choice(); } void choice(void) { int selection; do { puts("\n1--获取答案."); puts("\n2--修改密码."); puts("\n3--离开游戏."); puts("\n请输入一个选择."); scanf("%d", &selection); } while(selection < 1 || selection > 3); if(selection == 1) { printf("\n答案是 %ld", number); input_data(chushu);/*输入数据或退出,管理员可输入密码*/ } if(selection == 2) change_password();/*修改普通管理员密码*/ else { getchar(); exit(0); } } void congratulate(void) /*祝贺猜对并问是否继续*/ { int selection; printf("\n\n恭喜你答对了! 你总共猜了 %d 次!", nbr_of_guesses); printf("\n\n答案就是 %ld", number); if(nbr_of_guesses <= 6) printf("\n你真是太了不起了!\n\n"); do { puts("\n还想再玩一次吗?"); puts("\n1--是的,我想再玩一次."); puts("\n2--不,我有事要先走了,下次吧."); puts("\n请输入一个选择:"); scanf("%d",&selection); } while(selection < 1 || selection > 2); if(selection == YES) game_introduction();/*游戏介绍,选择游戏级别或退出*/ else { getchar(); exit(0); } } void enter_password_name(char *true_password)/*确认超级管理员*/ { char *password; char password_name[31]; int sum=1; puts("什么!你竟然是超级管理员!"); puts("为安全起见,请输入你的个人身份密码:"); fflush(stdin); password=gets(password_name); while(0 != strcmp(password, true_password) && sum < 4) { puts("输入错误,请重试!"); sum++; password=gets(password_name); } if(sum == 4) { puts("对不起!你把你的个人身份密码给忘了。拜拜!"); getchar(); exit(0) ; /*退出游戏*/ } }

评论