純C語言寫的拼圖游戲源碼
#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.
</pre>