纯C语言写的拼图游戏源码

清华大佬耗费三个月吐血整理的几百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.