人机猜数游戏排行榜部分修改
各位大侠辛苦了,老麻烦你们,过了这个星期就没那么多任务了,以下一个为同学设计的程序,听我说这里有高手帮忙就想请各位稍微帮忙下,多谢了下面是他写的程序,说部分有问题想请各位帮忙修改一下排行榜部分还有文件记录和读取方面的程序。#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<string.h>
void display();
void choose();
void exe(int a);
void help();
void yourgame();
void recread();
int qushu();
void viewsn();
void addrec(int sn);
void recwrite();
void vchoose();
void vexe(int a );
void computergame();
struct record
{char name[20];
int score;
};
typedef struct record record;
record rec[5];
# define MAX 5
void display()
{ system("cls");
printf("*********逻辑推数**********\n");
printf("\n");
printf("1.人猜\n");
printf("\n");
printf("2.计算机猜\n");
printf("\n");
printf("3.游戏帮助\n");
printf("\n");
printf("4.排行榜\n");
printf("\n");
printf("5.退出游戏\n");
choose();
}
void choose()
{
int a ;
printf("请选择你的操作项目:\n");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4)
{exe(a);}
else{
printf("请重新操作:\n");
printf("\n");
system("pause");
getchar();
display();
}
}
void exe(int a)
{
switch(a)
{case 1: yourgame();break;
case 2:computergame();break;
case 3: help();break;
case 4: viewsn();break;
case 5: exit(0);break;
}
}
void yourgame()
{ int inputnum,num,x=0,y=0;
int sn=0;
num=qushu();
repeat:
system("cls");
printf("====逻辑推数====\n");
printf("\n");
printf("请输入四个不同数字\n");
scanf("%d",&inputnum);
sn++;
if(inputnum==1)
{ printf("答案是:%d,再接再厉!\n",num);
printf("\n");
system("pause");
getchar();
display();
}
else
{int a[4],b[4];
int x=0,y=0;
a[0]=num/1000;
a[1]=(num/100)%10;
a[2]=(num/10)%10;
a[3]=num%10;
b[0]=inputnum/1000;
b[1]=(inputnum/100)%10;
b[2]=(inputnum/10)%10;
b[3]=inputnum%10;
for(int i=0;i<4;i++)
{if(a[i]==b[i])
x++;}
if(b[0]==a[1]||b[0]==a[2]||b[0]==a[3])y++;
if(b[1]==a[2]||b[1]==a[0]||b[1]==a[3])y++;
if(b[2]==a[1]||b[2]==a[1]||b[2]==a[3])y++;
if(b[3]==a[1]||b[3]==a[2]||b[3]==a[2])y++;
printf("%dA%dB",x,y);
}
system("pause");
if (inputnum!=num)
goto repeat;
printf("恭喜你,猜对了!");
printf("你所使用的次数是:%d",sn);
addrec(sn);
}
int qushu()
{
int a[4],j=0,k;
srand(time(0));
do
{a[0]=rand()%10;
a[1]=rand()%10;
a[2]=rand()%10;
a[3]=rand()%10;
if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3])
j++;
}while (j!=1);
k=a[0]*1000+a[1]*100+a[2]*10+a[3];
return k;
}
void help()
{ system("cls");
printf("*********逻辑推数*********\n");
printf("\n");
printf("游戏界面中你可以选择人猜或者机猜进入新的游戏\n");
printf("人猜时,系统会自动生成四个0到9不一样的数字\n");
printf("你每次猜数后都会有相应的提示,A表示数字对应正确,B表示只有数字正确但位置不对\n");
printf("如果你回答不出来的话,可以按1系统会显示答案\n");
printf("系统会记录你所使用的次数,次数越好成绩越好\n");
printf("当你的成绩进入前五名时,系统会提示你是否保存记录\n");
printf("如果保存,你只需按照提示,输入名字,保存就成功\n");
printf("计算机猜数时,你可以预先设定四个不同数,由计算机完成猜数游戏\n");
printf("计算机会推出这四个数,并给出猜数次数\n");
printf("游戏就是这么简单,但小小的游戏却能反映大大的智慧哦\n");
printf("最后,加油吧,祝你成功!\n");
getchar();
system("pause");
display();
}
void viewsn()
{
recread();
printf("pause");
getchar();
printf("1.重新游戏\n");
printf("2.退出游戏\n");
vchoose();
}
void vchoose()
{
int a;
scanf("%d",&a);
if(a==1||a==2)
vexe(a);
else
{ printf("请重新操作:\n");
printf("\n");
system("pause");
getchar();
display();
}
}
void vexe(int a)
{ switch(a)
{
case 1:display();break;
case 2:exit(0);break;
}
}
void addrec(int sn)
{
char c;
int flag=0;
recread();
for(int i=0;i<MAX;i++)
{
if(sn<rec[i].score||rec[i].score==0)
{
printf("\n");
printf("确认保存记录请按Y\n");
printf("pause");
scanf("%s",&c);
if(c!='Y')display();
rec[i+1].score=rec[i].score;
strcpy(rec[i+1].name,rec[i].name);
printf("请输入你的名字:\n");
scanf("%s",&rec[i].name);
rec[i].score=sn;
recwrite();
printf("添加成功!\n") ;
flag++;
printf("\n");
printf("pause");
getchar();
display();
}
}
}
void recread()
{
FILE *fp;
L:fp=fopen("D:\\rec.rec","rb");
if(fp==NULL)
recwrite();
goto L;
if(fread(&rec,sizeof(record),MAX,fp)==MAX)
{}
else
{ printf("文件读取失败!");}
fclose(fp);
}
void recwrite()
{
FILE *fp;
fp=fopen("D:\\rec.rec","wb");
if(fp==NULL)
printf("写入失败!\n");
fwrite(&rec,sizeof(record),MAX,fp);
fclose(fp);
}
void computergame()
{
system("cls");
int player;
int b=1;
int a[4];
int i=0;
int sum;
int r1=0;
int r2=0;
int r3=0;
int r4=0;
printf("你好,欢迎来到猜字游戏\n");
printf("现在是机猜环节\n");
printf("游戏规则:\n");
printf("您输入一个四位数,且数字各不相同:\n");
do
{
L:printf("请正确输入:\n");
scanf("%d",&player);
a[3]=player/1000;
a[2]=(player/100)%10;
a[1]=(player/10)%10;
a[0]=player%10;
if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3])
b++;
else {printf("输入错误,请重新操作!\n");goto L;}
}while(!b);
printf("输入正确!\n");
printf("计算机猜数过程:\n");
while(r1!=a[0])
{
printf("个位数不为%d\n",r1);
r1++;
}
printf("个位数为%d\n",r1);
while(r2!=a[1])
{
printf("十位数不为%d\n",r2);
r2++;
}
printf("十位数为%d\n",r2);
while(r3!=a[2])
{
printf("百位数不为%d\n",r3);
r3++;
}
printf("百位数为%d\n",r3);
while(r4!=a[3])
{
printf("千位数不为%d\n",r4);
r4++;
}
printf("千位数为%d\n",r4);
sum=r1+r2*10+r3*100+r4*1000;
printf("所以答案是%d\n",sum);
getchar();
system("pause");
display();
}
void main()
{
display();
}