/*拼成后不能顺利退出 (有谁感兴趣拼成后说下结果)*/ #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> int main() { int a[25],b,n,k,i=0,j,temp,h,y,flag,sum=0; char f; puts("********************"); puts("* 1 3x3 *"); puts("* 2 4x4 *"); puts("* 3 5x5 *"); puts("* 4 退出 *"); puts("********************"); puts("选择:"); while(1) { scanf("%d",&b); system("cls"); if(b==1) h=3; else if(b==2) h=4; else if(b==3) h=5; else if(b==4) exit(1); n=h*h; srand(time(NULL)); while(i<n-1)//出图 { a[n-1]=0; k=rand()%(n-1)+1; for(j=0;j<i;j++) if(a[j]==k) break; if(j==i) { a[j]=k; i++; } } for(i=0;i<n;i++) { if(a[i]==0) printf("%3s","_"); else printf("%3d",a[i]); if((i+1)%h==0) puts(""); } printf("\n\n共移动了%d次!\n",sum);//出图 y=n-1;//移动 while(1) { flag=0; f=getch(); if(f=='w') { for(i=0;i<h;i++) if(y==i) flag=1; if(flag!=1) { temp=a[y-h]; a[y-h]=a[y]; a[y]=temp; y=y-h; sum++; } } else if(f=='s') { for(i=0;i<h;i++) if(y==h*(h-1)+i) flag=2; if(flag!=2) { temp=a[y+h]; a[y+h]=a[y]; a[y]=temp; y=y+h; sum++; } } else if(f=='a') { for(i=0;i<h;i++) if(y==h*i) flag=3; if(flag!=3) { temp=a[y-1]; a[y-1]=a[y]; a[y]=temp; y=y-1; sum++; } } else if(f=='d') { for(i=0;i<h;i++) if(y==h*i+(h-1)) flag=4; if(flag!=4) { temp=a[y+1]; a[y+1]=a[y]; a[y]=temp; y=y+1; sum++; } } system("cls"); for(i=0;i<n;i++) { if(a[i]==0) printf("%3s","_"); else printf("%3d",a[i]); if((i+1)%h==0) puts(""); } printf("\n\n共移动了%d次!\n",sum);//出图 for(i=1,j=0;i<n;i++) { if(a[j]==i) j++; } if(j==n-1) { puts("You win!"); exit(1); } }//移动 } return 0; }