#includestdio.h#includestring.h#includestdlib.h#includetime.h#includeconio.hints[20][20],map[20][20];voidinput(intn){srand(time(0));inti,j,k,a,b,t;for(i=1;i=n;i++)for(j=1;j=n;j++){s[i][j]=(i-1)*n+j-1;map[i][j]=s[i][j]+1;}map[n][n]=0;for(i=n;i0;i--)for(j=n;j0;j--){a=rand()%i+1;b=rand()%j+1;t=s[a][b];s[a][b]=s[i][j];s[i][j]=t;}}intins(intn){inti,j;for(i=1;i=n;i++)for(j=1;j=n;j++)if(s[i][j]!=map[i][j])return0;return1;}voidoutput(intn){inti,j,k;system(cls);for(i=1;i=n;i++){for(j=1;j=n;j++)printf(s[i][j]?%-3d:,s[i][j]);printf();for(j=1;j=n;j++)printf(map[i][j]?%-3d:,map[i][j]);printf(\n);}}voiddes(){printf(\t\t本游戏为数字拼图1.1版本,在w,a,s,d基础\n\\t上增加方向键控制数字板移动\n\n\\t界面仍然很简陋,仅有控制台,但已很接近图形界面\n\n\\t其中数字为可移动板,空格为可移动位置\n\n\\t按任意键返回...);if((char)getch()0)getch();system(cls);}intmain(){intx,y,i,j,t,k,key;charch;begin:printf(\t\t##拼图游戏1.1版本欢迎您的使用##\n\n);printf(请输入指令1:游戏介绍2:开始游戏Esc:退出游戏\n);ch=getch();system(cls);if(ch=='')return0;elseif(ch=='1'){des();gotobegin;}elseif(ch=='2')while(1){t=1;printf(请输入拼图大小(3~9)Esc:上一步\n);ch=getch();if(ch==''){system(cls);gotobegin;}k=ch-'0';if(2k&&k10)input(k);else{system(cls);printf(\n输入有误,请重新输入!\n\n);continue;}for(i=1;i=k;i++)for(j=1;j=k;j++)if(s[i][j]==0){x=i;y=j;}output(k);while(1){printf(请输入操作w/↑:上a/←:左s/↓:下d/右:右Esc:重新开始\n);ch=getch();if(ch0)ch=getch();key=1;switch(ch){case'w':case72:case'W':if(xk){s[x][y]=s[x+1][y];x++;key=0;}elset--;break;case'a':case75:case'A':if(yk){s[x][y]=s[x][y+1];y++;key=0;}elset--;break;case's':case80:case'S':if(x1){s[x][y]=s[x-1][y];x--;key=0;}elset--;break;case'd':case77:case'D':if(y1){s[x][y]=s[x][y-1];y--;key=0;}elset--;break;case'':system(cls);gotobegin;default:key=1;t--;break;}s[x][y]=0;output(k);if(key)printf(输入有误\n);if(ins(k)){printf(****GOOD!****\n共用%d步\n\n按任意键继续...\n\n,t-1);if((char)getch()0)getch();system(cls);break;}elseprintf(已用%d步\n,t++);}}else{system(cls);printf(输入有误请重新输入\n);gotobegin;}return0;}