自己动手做个小游戏(2)

随机显示矩阵已经完成了,接下来就是怎么根据输入移动数字

1.首先需要一个issort函数,判断是否排序完成,如果否,则printf输入需要移动的数字,然后根据输入找到要移动的数字,找到下划线的位置,判断位置是否可以移动,如果可以则swap。可不可以移动分为三种情况,在矩阵左边、右边、和中间。所以要isleft函数和isright函数判断是否属于这种情况。

        while(!issort(square,f*f))
        {
                printf("请输入要移动的数字:");
                int m;
                scanf("%d",&m);//输入要移动的数字
                int t = findnum(m,square,f);//找到要移动的数字的位置
                int max = findmax(square,f);//找到下划线的位置
                if((!isleft(max,f)) && (!isright(max,f)) && (t == max + 1||t == max-1||t == max+f||t == max-f))swap(&square[max],&square[t]);
                else if(isleft(max,f) && (t == max+1||t == max+f||t == max-f))swap(&square[max],&square[t]);//在左边的情况
                else if(isright(max,f) && (t == max-1||t == max+f||t == max-f))swap(&square[max],&square[t]);//在右边的情况
                else printf("不能移动!\n");


          for(i = 0,k = 0;i < f*f;i+=f) //打印输出为矩阵形式
                {
                        for(j = 0;j < f;j++)
                        {
                                if(ismax(&square[0],f*f,k))
                                        printf("%2c  ",'_');
                                else
                                        printf("%2d  ",square[k]);
                                k++;
                        }
                        printf("\n");
                }
        }

issort函数  findmax函数  findnum函数  isleft函数  isright函数

int
issort(int a[],int c)//判断矩阵是否排序
{
        for(int b = 0;b<c-1;b++)
        {
                if(a[b] >= a[b+1]) return 0;
        }
        return 1;
}
int
findnum(int a,int b[],int c)//找到输入的数字位置
{
        for(int k = 0;k < c*c;k++)
        {
                if(b[k] == a) return k;
        }
        return printf("没这个数!\n");
}
int
findmax(int a[],int b)//找到下划线的位置
{
        int max = 0;
        for(int i = 1;i< b*b;i++)
        {
                if(a[max]<a[i]) max = i;
        }
        return max;
}
int
isleft(int max,int f)//判断下划线是否在左边
{
        for(int i = 0;i < f-1; i++)
        {
                if(max ==(i+1)*f) return 1;
        }
        return 0;

}

int
isright(int max,int f)// 判断下划线是否在右边
{ 
        for(int i = 0;i < f-1; i++)
        {
                if(max ==(i+1)*f-1) return 1;
        }
        return 0;

}

最后代码完成,但是每次输入都会从新输出一个新的矩阵,记得网易公开课的cs50有讲过fflush,但是用的时候总是导致矩阵不能显示出来。

应该怎么实现我每次输入数字,这个矩阵都是动态更新的?

posted @ 2015-12-15 17:51  Alighieri Dante  阅读(309)  评论(0编辑  收藏  举报