break;
caseLeft:
if(x>4){x-=2;gotoxy(x,y);}
break;
caseRight:
if(x<2*m-2){x=2;gotoxy(x,y);}
break;
caseDel:
if(y-2==StartPlace.y&&x/2-1==StartPlace.x)b_start=FALSE;
if(y-2==EndPlace.y&&x/2-1==EndPlace.x)b_end=FALSE;
putch('''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''');Maze[y-2][x/2-1]=1;gotoxy(x,y);
break;
caseEnter:
if(y-2==StartPlace.y&&x/2-1==StartPlace.x)break;
if(y-2==EndPlace.y&&x/2-1==EndPlace.x)break;
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');Maze[y-2][x/2-1]=0;gotoxy(x,y);
break;
caseHome:
if(Maze[y-2][x/2-1]&&!
b_start)
{
StartPlace.x=x/2-1;
StartPlace.y=y-2;
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
gotoxy(x,y);
b_start=TRUE;
}
break;
caseEnd:
if(Maze[y-2][x/2-1]&&!
b_end)
{
EndPlace.x=x/2-1;
EndPlace.y=y-2;
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
gotoxy(x,y);
b_end=TRUE;
}
break;
caseEsc:
gotoxy(2,22);printf("exit");sleep
(1);exit
(1);
caseF9:
if(b_start&&b_end)flag=TRUE;break;
caseF2:
gotoxy(2,22);
printf("Savename:
");
scanf("%s",savename);
gotoxy(2,22);
if(SaveMaze(savename))printf("SaveOK!
");
elseprintf("Savefail!
");
sleep
(1);
gotoxy(2,22);
printf("");
gotoxy(x,y);
break;
default:
break;
}
}
while(!
flag);
for(i=0;i<30;i)
for(j=0;j<20;j)
{
maze[j][i].=Maze[j][i];
maze[j][i].mark=0;
maze[j][i].foot=0;
}
}
StatusLoadMaze(char*file)
/*Themazehasbeenloaded.*/
{
FILE*fp;
char*buffer;
charch;
inti=0,j,k;
Booleanlen=FALSE,wid=FALSE;
if((fp=fopen(file,"r"))==NULL)
returnERROR;
buffer=(char*)malloc(600*sizeof(char));
ch=fgetc(fp);
while(ch!
=EOF)
{
buffer[i]=ch;
i;
ch=fgetc(fp);
}
m=30;n=20;
for(i=0;i<600;i)
{
j=i/30;k=i0;
if(buffer[i]==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&&!
len){m=i;len=TRUE;}
if(k==0&&buffer[i]==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&&!
wid){n=j;wid=TRUE;}
switch(buffer[i])
{
case''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''':
Maze[j][k]=0;break;
case''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''':
Maze[j][k]=1;break;
case''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''':
Maze[j][k]=2;break;
case''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''':
Maze[j][k]=1;
StartPlace.x=k;
StartPlace.y=j;
b_start=TRUE;
break;
case''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''':
Maze[j][k]=1;
EndPlace.x=k;
EndPlace.y=j;
b_end=TRUE;
break;
default:
break;
}
}
fclose(fp);
clrscr();
for(i=0;i<30;i)
for(j=0;j<20;j)
{
maze[j][i].=Maze[j][i];
maze[j][i].foot=0;
maze[j][i].mark=0;
if(Maze[j][i]==0)
{
gotoxy(2*i2,j2);
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
}
}
gotoxy(2*StartPlace.x2,StartPlace.y2);
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
gotoxy(2*EndPlace.x2,EndPlace.y2);
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
returnOK;
}
StatusSaveMaze(char*filename)
/*Themazehasbeensaved.*/
{
FILE*fp;
char*buffer;
inti,j,k;
fp=fopen(filename,"wb");
buffer=(char*)malloc(600*sizeof(char));
for(i=0;i<600;i)
{
j=i/30;k=i0;
switch(Maze[j][k])
{
case0:
buffer[i]=''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''';break;
case1:
buffer[i]=''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''';break;
case2:
buffer[i]=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''';break;
default:
Error("Write");break;
}
if(k==StartPlace.x&&j==StartPlace.y)buffer[i]=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
if(k==EndPlace.x&&j==EndPlace.y)buffer[i]=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
}
fwrite(buffer,600,1,fp);
free(buffer);
fclose(fp);
returnOK;
}
voidError(char*message)
{
clrscr();
fprintf(serr,"Error:
%s\n",message);
exit
(1);
}/*Error*/
StatusInitStack(Stack*s)
/*Thestackshasbeencreatedandisinitializedtobeempty.*/
{
s->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!
s->base)Error("Overflow");
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
returnOK;
}/*InitStack*/
StatusDesoyStack(Stack*s)
/*Thestackshasbeendesoyed.*/
{
s->top=NULL;
s->stacksize=0;
free(s->base);
s->base=NULL;
returnOK;
}/*DesoyStack*/
StatusClearStack(Stack*s)
/*Thestackhasbeencleartobemaximum.*/
{
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
returnOK;
}/*ClearStack*/
BooleanStackEmpty(Stack*s)
/*Checkifthestacksisempty.*/
{
if(s->top==s->base)returnTRUE;
elsereturnFALSE;
}/*StackEmpty*/
intStackLength(Stack*s)
/*Gainthelengthofthestacks.*/
{
if(s->top>s->base)return(int)(s->top-s->base);
elsereturn0;
}/*StackLength*/
StatusPush(Stack*s,SElemTypee)
/*Theelementehasbeenpushedintothestacks.*/
{
if(s->top-s->base>=s->stacksize)
{
s->base=(SElemType*)realloc(s->base,
(s->stacksizeSTACKINCREMENT)*sizeof(SElemType));
if(!
s->base)Error("Overflow");
s->top=s->bases->stacksize;
s->stacksize=STACKINCREMENT;
}
*s->top=e;
returnOK;
}/*Push*/
SElemTypePop(Stack*s,SElemTypee)
/*Theelementehasbeenremovedfromthestacks.*/
{
if(s->top==s->base)Error("Pop");
e=*--s->top;
returne;
}/*Pop*/
StatusGetTop(Stack*s,SElemType*e)
/*Theelementehasgottothetopofthestacks.*/
{
if(s->top==s->base)Error("GetTop");
*e=*(s->top-1);
returnOK;
}/*GetTop*/
/*Traversethestacksusing''''''''''''''''''''''''''''''''visiting''''''''''''''''''''''''''''''''function.*/
/*StatusStackTraverse(Stack*s,Status(*visit)(SElemType*se))
{
SElemTypep;
intresult;
if(s->top==s->base)returnERROR;
p=s->base;
while(!
(p==s->top))
{
result=(*visit)(p);
p;
}
returnOK;
}*/
BooleanPass(PosTypecurpos)
/*Checkifthecurrentpositioncanbepassed.*/
{
if(maze[curpos.x][curpos.y].==1&&
maze[curpos.x][curpos.y].foot==0&&maze[curpos.x][curpos.y].mark==0)
returnTRUE;
elsereturnFALSE;
}/*Pass*/
voidMarkPrint(PosTypeseat)
/*Markthepositionseat.*/
{
maze[seat.x]