清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> int step=0; void map()//游戏菜单函数。 { printf("▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n"); printf("█ 拼 图 游 戏 █\n"); printf("█ 1. 3×3 █\n"); printf("█ 2. 4×4 █\n"); printf("█ 3. 5×5 █\n"); printf("█ 4. 退出 █\n"); printf("▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n"); } void fun(int *a,int t,int m,int r) { int i; int g; for(i=0;i<m;i++) { if(i%r==(r-1)&&(i+t)%r==0)//让数组不能跨行转换。 continue; if(i%r==0&&(i+t)%r==(r-1)) continue; if(a[i+t]==0 && (i+t)>=0 && (i+t)<m) { g=a[i]; a[i]=a[i+t]; a[i+t]=g; step++; return ; } } } void move(int *a,int m,int r) {//上下左右移动函数。 char ch; int i,j; while(ch=getch()) { system("cls"); if(ch=='w') { i=-r; fun(a,i,m,r); } else if(ch=='s') { i=r; fun(a,i,m,r); } else if(ch=='a') { i=-1; fun(a,i,m,r); } else if(ch=='d') { i=1; fun(a,i,m,r); } else if(ch=='4') { printf("您已退出游戏,请下次再玩!\n"); exit(0); } for(i=0;i<m;i++) { if(a[i]==0) printf(" "); else printf("%2d ",a[i]); if((i+1)%r==0) putchar(10); } printf("共走:%d步!\n",step); } } void map_x(int m,int r) { int i=1,j,a[25],n; srand(time(NULL)); printf("拼图游戏开始了:\n"); while(i<m) { n=1+rand()%(m-1); for(j=1;j<i;j++) { if(n==a[j]) break; } if(j==i) { a[i]=n; i++; } } a[0]=0; for(i=0;i<m;i++) { if(a[i]==0) printf(" "); else printf("%2d ",a[i]); if((i+1)%r==0) putchar(10); } printf("共走:%d步!\n",step); move(a,m,r); } int main() { int i,n; char ch; map();//显示菜单。 printf("请选择所玩游戏的级别:\n"); ch=getch(); while(ch!='1' && ch!='2' && ch!='3' &&ch!='4') { printf("输入有误,请重新输入:\n"); ch=getch(); } switch(ch) { case '1': map_x(9,3); break; case '2': map_x(16,4); break; case '3': map_x(25,5); break; case '4': printf("您已退出游戏,请下次再玩!\n"); exit(0); break; } return 0; } //对于确定的循环一般用for;而不确定的循环则用while.