您的位置:首页 > 编程语言 > C语言/C++

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

2013-12-12 17:44 288 查看
#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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: