#include
#include
#include
#include
#include
void choose();//选择函数
void shu();//猜数字函数
void paihang();//排行榜
void repaihang(int n);//更新排行榜
void replace();//初始化排行榜(没有记录时的排行榜)
typedef struct {
char name[10];
int score;
}re;
int main()
{
printf("-------------------猜数游戏--------------------\n");
printf(" 1. 开始游戏\n");
printf(" 2. 排行榜\n");
printf(" 3. 退出游戏\n\n");
choose();
}
void choose()
{
int n;
printf("请输入序号:");
scanf("%d",&n);
switch(n)
{
case 1:
system("cls");
shu();
break;
case 2:
paihang();
break;
case 3:
exit(0);
break;
}
}
void shu()
{
int a[4],b[4],i,j,n;
srand((unsigned int)time(0));
for(i=0;i<4;i++)a[i]=1+rand()%10;
printf("请输入四个数字:");
for(j=1;j<=10;j++)
{
for(i=0;i<4;i++)
scanf("%d",&b[i]);
if(b[0]==-1||b[1]==-1||b[2]==-1||b[3]==-1)
break;
for(i=0;i<4;i++)
{
if(a[i]==b[i])
printf("第%d个数对了,你真棒!\n",i+1);
if(a[i]>b[i])
printf("第%d个数小了!\n",i+1);
if(a[i]<b[i])
printf("第%d个数大了!\n",i+1);
}
if(a[0]==b[0]&&a[1]==b[1]&&a[2]==b[2]&&a[3]==b[3])
{
printf("全部猜对了,你用了%d次机会,你真棒!\n",j);
printf("是否存入排行榜:1.是 2.否\n");
scanf("%d",&n);
if(n==1)
repaihang(j);
}
}
printf("按任意键继续...\n");
getch();
}
void paihang()
{
int i,j,num=0;
re r[5];
re p;//临时结构体
FILE *fp=NULL;
char bang[10]="paihang";
fp=fopen(bang,"rb");
if(fp==NULL)
{
printf("打开失败!按任意键结束...\n");
getch();
}
if(fread(&r[num],sizeof(re),1,fp)!=NULL)
num++;
fclose(fp);
if(num<1)
{
replace();
}
if(num>1)
{
for(i=0;i<num;i++)
for(j=i+1;j<num;j++)
{
if(r[i].score>r[j].score)
{
strcpy(p.name=r[i].name);
p.score=r[i].score;
strcpy(r[i].name=r[j].name);
r[i].score=r[j].score;
strcpy(r[j].name=p.name);
r[j].score=p.score;
}
}
fp=fopen(bang,"wb+");
if(fp==NULL)
{
printf("打开失败!按任意键结束...\n");
getch();
}
for(i=0;i<num;i++)
if(fwrite(&r[num],sizeof(re),1,fp)!=1)
printf("error\n");
fclose(fp);
printf("排行榜如下所示:\n\n");
printf("名字\t分数\n");
if(fread(&r[num],sizeof(re),1,fp)!=NULL)
printf("%s\t%d\n",p.name,p.score);
fclose(fp);
}
}
void repaihang(int n)
{
int i,j,num=0,max=0;
re r[5];
re p;
FILE *fp;
char bang[10]="paihang";
fp=fopen(bang,"rb");
if((fread(&r[num],sizeof(re),1,fp)!=NULL)&&num<5)
num++;
fclose(fp);
if(num<5)//排名不满5个
{
printf("你的名字是:");
scanf("%s",r[num].name);
r[num].score=n;
num++;
}
else//排名满5个,找出分数最高(成绩最低)的玩家
{
for(i=0;i<5;i++)
{
if(r[i].score>max)
{
max=r[i].score;
j=i;
}
}
if(n<=r[j].score)
{
printf("你的名字是:");
scanf("%s",r[j].name);
r[j].score=n;
}
fp=fopen(bang,"wb");
for(i=0;i<num;i++)
if(fwrite(&r[num],sizeof(re),1,fp)!=1)
printf("error\n");
fclose(fp);
fp=fopen(bang,"rb");
printf("排行榜为:\n");
printf("名字\t分数\n");
if(fread(&r[num],sizeof(re),1,fp)!=NULL)
printf("%s\t%d\n",p.name,p.score);
fclose(fp);
}
}
void replace()
{
FILE *fp;
re c;
char bang[10]="paihang";
if((fp=fopen(bang,"rb"))==NULL)
{
strcpy(c.name,"player");
c.score=10;
printf("%s\t%d\n",c.name,c.score);
}
fclose(fp);
}