猜数字游戏

/*

猜数字游戏

运行环境:VC++ 6.0

*/

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
int New,num=0,difficulty=2;
struct date
{
int num;
int A,B;
}data[100];
void juge(int str)
{
int a=0,b=0;
int mark[5];
for(int i=1;i<=4;i++) mark[i]=0;
int t1=str%10,t2=str/10%10,t3=str/100%10,t4=str/1000;
int d1=New%10,d2=New/10%10,d3=New/100%10,d4=New/1000;
if(d1 == t1) a++,mark[1]=1;
if(d2 == t2) a++,mark[2]=1;
if(d3 == t3) a++,mark[3]=1;
if(d4 == t4) a++,mark[4]=1;
if(d1 != t1)
{
if(!mark[2] && d1==t2) b++,mark[2]=1;
else if(!mark[3] && d1 == t3) b++,mark[3]=1;
else if(!mark[4] && d1 == t4) b++,mark[4]=1;
}
if(d2 != t2)
{
if(!mark[1] && d2==t1) b++,mark[1]=1;
else if(!mark[3] && d2==t3) b++,mark[3]=1;
else if(!mark[4] && d2==t4) b++,mark[4]=1;
}
if(d3 != t3)
{
if(!mark[1] && d3==t1) b++,mark[1]=1;
else if(!mark[2] && d3==t2) b++,mark[2]=1;
else if(!mark[4] && d3==t4) b++,mark[4]=1;
}
if(d4 != t4)
{
if(!mark[1] && d4==t1) b++;
else if(!mark[2] && d4==t2) b++;
else if(!mark[3] && d4==t3) b++;
}
printf("back: %dA%dB\n",a,b);
data[num].A=a;
data[num].B=b;
num++;
}
int creat()
{
int b=0,a=0;
while(!a)
{
b=rand()%10000;
a=b/1000;
}
return b;
}
void Print()
{
printf("( %d )\n",New);
printf(" ----------------------------------------------\n");
printf(" 次数 猜数 反馈\n");
for(int i=0;i<num;i++) printf(" %d. %d %dA%dB\n",i+1,data[i].num,data[i].A,data[i].B);
printf(" ----------------------------------------------\n");
}
void prompt()
{
printf("已 产 生 随 机 数\n  您 要 猜 的 数 字 为:");
if(difficulty == 1)
{
int x=rand()%3;
if(x==0) printf("%dX",New/10);
else if(x==1) printf("%d%dX%d",New/1000,New/100%10,New%10);
else if(x==2) printf("X%d",New%1000);
}
else if(difficulty ==2)
{
int x=rand()%3;
if(x==0) printf("XX%d",New%100);
else if(x==1) printf("%dXX%d",New/1000,New%10);
else if(x==2) printf("%d%dXX",New/1000,New/100%10);
}
else if(difficulty == 3)
{
int x=rand()%4;
if(x==0) printf("XXX%d",New%10);
else if(x==1) printf("XX%dX",New/10%10);
else if(x==2) printf("X%dXX",New/100%10);
else if(x==3) printf("%dXXX",New/1000);
}
else if(difficulty == 4) printf("XXXX");
printf("\n");
}
void game()
{
srand(time(0));
New=creat();
prompt();
int guess,flag=0;
while(true)
{
for(int i=0;i<10;i++)
{
printf("请 输 入 您 猜 的 数 字:");
scanf("%d",&guess);
data[num].num=guess;
if(guess == New) 
{
printf("恭 喜,猜 对 了!\n");
Print();
flag=1;
printf("输入Enter键继续");
getchar();
getchar();

break;
}
juge(guess);
}
if(!flag)
{
getchar();
printf("是 否 给 出 答 案? y/n :");
char c;
scanf("%c",&c);
if(c=='y' || c=='Y') Print();
break;
}
else break;
}
}
int menu()
{
printf(" ---------------------------------------------------------\n");
printf(" *       1.开始新游戏                      *\n");
printf(" *                     2.选择游戏难度                    *\n");
printf(" *       3.查看游戏帮助                    *\n");
printf(" *       4.退出游戏                        *\n");
printf(" ---------------------------------------------------------\n");
printf("请输入数字 1~4 :");
char select;
scanf("%c",&select);
getchar();
return select-'0';
}
void chiose_difficulty()
{
printf(" ****************************\n");
printf(" * 1.一级 ( 123X )    *\n");
printf(" * 2.二级 ( 12XX )    *\n");
printf(" * 3.三级 ( 1XXX )    *\n");
printf(" * 4.四级 ( XXXX )    *\n");
printf(" ****************************\n");
printf(" 请输入数字 1~4 选择难度:");
char chi;
scanf("%c",&chi);
int c=chi-'0';
if(c<1 || c>3) printf("error! \n");
else difficulty=c;
getchar();
}
void help()
{
printf("猜数字的规则是:电脑在0~9这10个数字当中,任意不重复地选择四个排列成四位数,然后由玩的人猜使用的是哪四个数字和数字在第几位;A代表数字和位置都对了;B代表数字对了,但是位置不对。A、B前的数字表示处于两种情况下的数字个数;举例,电脑给你猜的数字是2943,你猜2893,电脑就显示2A1B。\n输入Enter键继续\n");
getchar();
}
int main()
{
printf("                猜数字游戏\n\n");
for(;;)
{
switch(menu())
{
case 1:game();break;
case 2:chiose_difficulty();break;
case 3:help();break;
case 4:
{
printf("谢谢使用,再见!\n");
return 0;
}
default:printf("error! please input again!");
}
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值