/*猜数游戏*/
/*程序产生一个随机数,游戏者输入数据进行猜测。管理员可输入密码,
其中普通管理员只能获得答案,超级管理员获得答案并能修改普通管理员密码*/
#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) ; /*退出游戏*/
}
}
正文
好玩的猜数游戏2005-04-10 20:46:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/goal00001111/510.html
阅读(3646) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论