4位数猜数字
发布时间:2012-05-27 00:54:00
发布时间:2012-05-27 00:54:00
#include
#include
#include
#define EXIT_SUCCESS 0
#define MANY 4 /*4位数猜数字*/
#define TIMES_OUT 9 /*9步以内就要猜出*/
int n,u,j,i,a,b;
void game ( void ); /*游戏函数原型*/
void not_same ( int arrary[] ); /*判断实参内数字是否相同*/
void ab ( int guesss[],int answer[] ); /*提示几a几b*/
void prise ( int val ); /*特别奖励函数原型*/
void out ( void ); /*按任意键结束*/
main( void )
{
char choise;
printf("||************************************||\n");
printf("|| 吴浩猜数字V 1.0 ||\n");
printf("|| 程序制作者:吴浩 ||\n");
printf("|| 二○○四年四月三日||\n");
printf("||************************************||\n");
puts("\n1--开始游戏");
puts("2--查看帮助");
puts("3--退出");
while ( 1 )
{
printf("我选择 :");
scanf("%c",&choise);
fflush(stdin);
switch ( choise )
{
case '1':
{
game();
return 0;
}
case '2':
{
puts(" 猜数字 V1.0 规则\n");
printf(" 在%d步以内按照提示分别输入不重复的%d数字( 0 ~ 9 ) ,如果所输入的\n",TIMES_OUT,MANY);
puts("数字与答案数字位子相对则有1个a,如果与答案数字相同可位置不正确则有一");
puts("个b。");
puts(" 如答案数字为“8 3 0 4”,如果您输入“8 7 2 4”则显示“2a0b”, 若");
puts("输入“3 0 4 8”则显示“0a4b”,若答对了,即为4a0b。");
out();
}
case '3':
{
exit ( EXIT_SUCCESS ); /*退出程序*/
}
default :
{
puts("请输入 1 、2 或 3 ");
}
}
}
}
/*游戏部分*/
void game ( void )
{
int times;
int answer[MANY],guess[MANY];
char wantplay;
time_t t;
srand( (unsigned) time(&t)); /*以系统时间初始化随机数发生器*/
do
{
printf("\n请输入%d个数字!\n",MANY);
do
{
u=0;
for ( n = 0 ; n < MANY ; n++ )
{
answer[n]=rand()%10; /*生成随机数*/
}
not_same(answer); /*检查生成随机数是否相同*/
}while ( u ); /*如不同则循环结束*/
for ( times = 1 ; times <= 10 ; times++ )
{
if ( times == 10 )
{
printf("抱歉!已经超过 %d 次 (你输了)\n",TIMES_OUT);
break;
}
do
{
u=0;
for ( n = 0 ; n < MANY ; n++ )
{
scanf("%1d",&guess[n]);/*只接受一个数*/
}
fflush(stdin);
not_same(guess); /*判断输入的数是否相同*/
if ( u == 1 )
{
puts("聪明!!想走捷径,没门,因为我比你聪明!^_^");
puts("一定要输入不相同的数字才给你提示!!谢谢合作!!");
printf("\n请输入%d个数字!\n",MANY);
}
}while ( u ); /*如果否则循环结束*/
printf("( 第%d步 )",times);
ab(guess,answer); /*判断几a几b*/
if ( a == MANY )
{
puts(" 4a0b");
puts("恭喜!您猜对了!");
break;
}
printf(" %da%db\n",a,b);
}
if ( times <= 6 ) /*如果在6步内猜出则给予奖励*/
{
prise( times );
}
fflush(stdin);
puts("还玩吗? ( y or n )");
scanf("%c",&wantplay);
}while ( wantplay == 'Y' || wantplay == 'y' );
}
/*判断实参内数字是否相同*/
void not_same ( int arrary[] )
{
for ( i = 0 ; i < MANY-1 ; i++ )
for ( j = i+1 ; j < MANY ; j++ )
if ( arrary[i] == arrary[j] )
u = 1;
}
/*提示部分*/
void ab ( int guesss[],int answer[] )
{
a=0,b=0;
for ( i = 0 ; i < MANY ; i++ )
for ( j = 0 ; j < MANY ; j++ )
if ( guesss[i] == answer[j] )
if ( i == j )
a+=1;
else
b+=1;
}
/*输入任意键结束*/
void out ( void )
{
printf("\n\n\n按任意键离开程序");
getch();
exit(0);
}
/* 特别奖励 */
void prise ( int val )
{
fflush(stdin);
printf("厉害!%d步就猜出数字,有特别奖励\n\n\n\n\n\n\n",val);
getchar();
printf("奖励就是~~~~~~~~~回车以后告诉你\n\n\n\n\n\n\n\n");
getchar();
fflush(stdin);
printf("放心,我会告诉你的~~~~再会车就告诉你\n\n\n\n\n\n\n\n\n");
getchar();
fflush(stdin);
printf("好吧,我就告诉你一个秘密~~~~~回车你就知道\n\n\n\n\n\n\n\n");
getchar();
fflush(stdin);
printf("其实~~~~~我的QQ号码是 32353404 欢迎加入 ^_^ \n");
fflush(stdin);
}
// ->************************************************************************
// -> 全部代码结束
// ->************************************************************************