本人。現在大一,老師要我們用tc做一個小軟件。那一位高人能做一個示范說明。
熱心網友
程序目的:輸入一個任意大小的迷宮,用棧求出一條走出迷宮的路徑,并顯示在屏幕上。程序實現:可以實現載入迷宮和保存迷宮,附帶文件中有4個測試迷宮路徑的文件test1~4。dd。請將這些文件拷貝到TC當前目錄下,或者在載入時寫明完全路徑。由于屏幕大小的限制,當用戶自己輸入迷宮時一定要注意:迷宮大小是有限制的,不小于4*3,不大于30*20。否則會出現錯誤信息。輸入開始時全是墻,用上下左右鍵移動,用Del鍵刪除墻,形成通路,用Enter鍵添加墻。輸入結束時可以將迷宮保存下來,以dd為擴展名。輸入完畢時用F9鍵來得到結果,找到路徑時,屏幕下方會出現Pathfound,否則出現Pathnotfound。程序經TurboC2。0編譯調試成功。運行時不用添加任何運行庫。不可以在VC上編譯。下載DOS版和windows版的迷宮游戲全部代碼用戶名:migong----------------------------------------------------------------------------------/*MazePathDemoBYTurboC2。0Copyright(c)RoverUnion。Allrightreserved。 */#include#include#include#include#include#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineF90x43#defineEsc0x1b#defineDel0x53#defineHome0x47#defineEnd0x4f#defineSpace0x20#defineUp0x48#defineDown0x50#defineLeft0x4b#defineRight0x4d#defineEnter0x0d#defineF20x3c#defineF30x3d#defineSTACK_INIT_SIZE200#defineSTACKINCREMENT10typedefintBoolean;typedefintStatus;typedefstruct{intx;inty;}PosType;typedefstruct{intord;PosTypeseat;intdi;}SElemType;typedefstruct{inttd;intfoot;intmark;}MazeType;typedefstruct{SElemType*base;SElemType*top;intstacksize;}Stack;intMaze[20][30];MazeTypemaze[20][30];PosTypeStartPlace;PosTypeEndPlace;intcount;intm,n;Booleanb_start=FALSE,b_end=FALSE;voidCreatMaze(void);StatusSaveMaze(char*filename);StatusLoadMaze(char*filename);voidError(char*message);StatusInitStack(Stack*s);StatusDestroyStack(Stack*s);StatusClearStack(Stack*s);BooleanStackEmpty(Stack*s);intStackLength(Stack*s);StatusPush(Stack*s,SElemTypee);SElemTypePop(Stack*s,SElemTypee);StatusGetTop(Stack*s,SElemType*e);StatusStackTraverse(Stack*s,Status(*visit)(SElemType*se));BooleanPass(PosTypecurpos);voidMarkPrint(PosTypeseat);voidFootPrint(PosTypecurpos);PosTypeNextPos(PosTypeseat,intdi);StatusMazePath(PosTypestart,PosTypeend);voidCreatMaze(void)/*Formthemaze。*/{voidError(char*message);StatusSaveMaze(char*filename);StatusLoadMaze(char*filename);inti,j;intx,y;charc;charsavename[12],loadname[12];Booleanflag=FALSE,load=FALSE;clrscr();printf("Menu:\n\n");printf("1。LoadMazefile:(*。dd)\n\n");printf("2。InputMaze:\n\n");printf("Inputyourchoice:");do{c=getch();switch(c){case''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''':putch(''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''');break;case''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''':putch(''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''');break; (1);exit(1); }}while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&&c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''');if(c==''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''){printf("\n\nLoadName:");scanf("%s",loadname);if(LoadMaze(loadname)){sleep(1);load=TRUE;}else{gotoxy(1,9);printf("Loadfail!");}}if(!load){printf("\nInputthemaze''''''''''''''''''''''''''''''''ssize:\n");printf("\nInputLength:\n");scanf("%d",&m);printf("\nInputWidth:\n");scanf("%d",&n);if(m30||n20)Error("Mazetoolarge");for(i=0;i3){y--;gotoxy(x,y);}break; (y4){x-=2;gotoxy(x,y);}break; (x<2*m-2){x+=2;gotoxy(x,y);}break; (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; (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; (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; (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; (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; }}while(!flag);for(i=0;i<30;i++)for(j=0;j<20;j++){maze[j][i]。td=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=i%30;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;。