帮帮忙
一个小游戏前面部分的功能是能得到choose的值(值1,2,3分别表示不同的难度)和一个本次本难度玩游戏的得分score,选择不同难度游戏结束时,会输出不同难度的最高分和本次得分,我的问题在删除难度3的所有语句的时候能正常游戏,加入难度3的时候,难度3的最高分总是不正确,与难度1,2,3有关的语句,我都是用case:语句,加入难度3的时候就只需要在各个switch语句下多一个case:3 ...;若是不没时间看程序段,请指点下最后面所提出的问题.
struct Defen
{
int s[3];/*成员数组s的元素s[0],s[1],s[2]分别存难度1,2,3的本次游戏得分score*/
struct Defen *next;
}defen;/*得分结构体*/
void GameOver(void)
{
FILE *into,*outf;
struct Defen *q,*p,*head;
int n=0,m;
cleardevice();
PrScore();
switch(choose)
{
case 1:defen.s[0]=score,defen.s[1]=defen.s[2]=0;break;/*玩一中难度时,另外两种难度的得分为0*/
case 2:defen.s[1]=score,defen.s[0]=defen.s[2]=0;break;
case 3:defen.s[2]=score,defen.s[0]=defen.s[1]=0;break;
}
if((into=fopen("score.txt","a"))==NULL)/*打开一个名为score.txt的文本文挡,没有就建立一个*/
{
printf("cannot open file\n");
exit(0);
}
fwrite(&defen,sizeof(struct Defen),1,into);
/*把从&defen开始的1*sizeof个字节输出到into所指向的文件中*/
fclose(into);
if((outf=fopen("score.txt","r"))==NULL)
{
printf("cannot open file");
exit(0);
}
head==NULL;
p=q=(struct Defen*)malloc(sizeof(struct Defen));/*申请空间*/
fread(p,sizeof(struct Defen),1,outf);
while(!feof(outf))/*建立链表----*/
{
n+=1;
if(n==1) head=p;
else q->next=p;
q=p;
p=(struct Defen*)malloc(sizeof(struct Defen));
fread(p,sizeof(struct Defen),1,outf);
}
q->next==NULL;/*-----建立链表*/
fclose(outf);
switch(choose)
{
case 1:m=0,MAX(head,n,m);break;
case 2:m=1,MAX(head,n,m);break;
case 3:m=2,MAX(head,n,m);break;
}
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}
/*输出成绩*/
void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/*找出最大分数*/
int MAX(struct Defen *h,int n,int m)
{
char st[20];
int z=h->s[m];
for(i=0;i<n;i++)
{
h=h->next;
z=(z>=h->s[m])?z:h->s[m];
}
settextstyle(0,0,2);
sprintf(st,"max score:%d",z);
outtextxy(55,50,st);
}
/*图形结束*/
void Close(void)
{
getch();
closegraph();
}
/////结构体类型的指针能不能取其成员(数组)里面的元素,如h->s[m],或者结构体变量取其元素,如defen.s[0],这样的两种用法是否正确.