純C語言寫的拼圖游戲源碼

cwf8 9年前發布 | 2K 次閱讀 C/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>

 本文由用戶 cwf8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!