#include<stdio.h> #include<stdlib.h> int main(void) { char sr;//存儲用戶輸入的指令 //繪制地圖 char a[11][20]={ "###################", "###################", "### $ $ ###", "### ##### ###", "### ###", "#### #### ### ####", "### # @ # ###", "### # @ # ###", "### ^ ###", "###################", "###################"}; // 定義箱子,小人和目的的坐標 int i=1,e=8,f=9,m=7,n=9,x=6,y=9; while(i) { //清屏,給人一種真實游戲的感覺,這是在MAC環境上的,WIN的清屏語句是system("cls") //這個程序所用到的類型和語法除了清屏這句還有清除緩存區都是可以在WIN系統下,VC++6.0裡完美運行的 system("clear"); printf("歡迎使用推箱子\n^就代表你,而你的工作就是把@推到$的位置,好好努力吧!\n"); printf("對了w代表上,s代表下,a代表左,d代表右,q表示退出,開始吧!\n"); //判斷是否推到目的地 if(m== 2 && n==8) { if(x==2 && y==10) { printf("恭喜你挑戰成功!\n"); break; } } if(m==2 && n==10) { if(x==2 && y==8) { printf("恭喜你挑戰成功!\n"); break; } } //打印地圖 for(int b=0;b<11;b++) { for(int c=0;c<20;c++) { printf("%c",a[b][c]); } printf("\n"); } //清除緩存區 fpurge(stdin); scanf("%c",&sr); //判斷方向 switch(sr) { case 'w': case 'W': if(a[e-1][f]==' ') { a[e-1][f]='^'; a[e][f]=' '; e-=1; } else if(a[e-1][f]=='@' && a[e-2][f]!='#' && a[e-2][f]!='@') { if(e-m==1 && f==n) { m-=1; a[m][n]='@'; a[e-1][f]='^'; a[e][f]=' '; e-=1; } else if(e-x==1 && f==y) { x-=1; a[x][y]='@'; a[e-1][f]='^'; a[e][f]=' '; e-=1; } } break; case 's': case 'S': if(a[e+1][f]==' ') { a[e+1][f]='^'; a[e][f]=' '; e+=1; } else if(a[e+1][f]=='@' && a[e+2][f]!='#' && a[e+2][f]!='@') { if(m-e==1 && f==n) { m+=1; a[m][n]='@'; a[e+1][f]='^'; a[e][f]=' '; e+=1; } else if(x-e==1 && y==f) { x+=1; a[x][y]='@'; a[e+1][f]='^'; a[e][f]=' '; e+=1; } } break; case 'a': case 'A': if(a[e][f-1]==' ') { a[e][f-1]='^'; if((e==2 && f==8)||(e==2 && f==10)) a[e][f]='$'; else a[e][f]=' '; f-=1; } else if(a[e][f-1]=='$') { a[e][f-1]='^'; if((e==2 && f==8)||(e==2 && f==10)) a[e][f]='$'; else a[e][f]=' '; f-=1; } else if(a[e][f-1]=='@' && a[e][f-2]!='#' && a[e][f-2]!='@') { if(e==m && f-n==1) { n-=1; a[m][n]='@'; a[e][f-1]='^'; if((e==2 && f==8)||(e==2 && f==10)) a[e][f]='$'; else a[e][f]=' '; f-=1; } else if(e==x && f-y==1) { y-=1; a[x][y]='@'; a[e][f-1]='^'; if((e==2 && f==8)||(e==2 && f==10)) a[e][f]='$'; else a[e][f]=' '; f-=1; } } break; case 'd': case 'D': if(a[e][f+1]==' ') { a[e][f+1]='^'; if((e==2 && f==8)||(e==2 && f==10)) a[e][f]='$'; else a[e][f]=' '; f+=1; } else if(a[e][f+1]=='$') { a[e][f+1]='^'; if((e==2 && f==8)||(e==2 && f==10)) a[e][f]='$'; else a[e][f]=' '; f+=1; } else if(a[e][f+1]=='@' && a[e][f+2]!='#' && a[e][f+2]!='@') { if(e==m && n-f==1) { n+=1; a[m][n]='@'; a[e][f+1]='^'; if((e==2 && f==8)||(e==2 && f==10)) a[e][f]='$'; else a[e][f]=' '; f+=1; } else if(e==x && y-f==1) { y+=1; a[x][y]='@'; a[e][f+1]='^'; if((e==2 && f==8)||(e==2 && f==10)) a[e][f]='$'; else a[e][f]=' '; f+=1; } } break; case 'q': case 'Q':i=0;break; } } return 0; }