程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 自己動手做個小游戲(2),動手做小游戲

自己動手做個小游戲(2),動手做小游戲

編輯:關於C語言

自己動手做個小游戲(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,但是用的時候總是導致矩陣不能顯示出來。

應該怎麼實現我每次輸入數字,這個矩陣都是動態更新的?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved