c#(WPF)實現連連看

夢在未名湖畔發表於2018-04-07

       其實c#實現簡單的練練看是很簡單的,主要目的就是熟悉一些控制元件和函式吧。首先需要用到的是Grid佈局,因為這是個網格佈局,正好和連連看的佈局一致。至於想設計多大看你自己。在WPF中我們寫控制元件可以利用Xaml和直接用程式碼寫,這就看個人喜好了。但是出於練習,我還是沒有直接拖出控制元件,而是用程式碼寫。

            for (i = 0; i < n; i++)
            {
                RowDefinition row = new RowDefinition();
                LLK_Background.RowDefinitions.Add(row);
                ColumnDefinition col = new ColumnDefinition();
                LLK_Background.ColumnDefinitions.Add(col);
            }

這段程式碼是用來設定佈局的,其中RowDefinition是設定行,ColumnDefinition是設定列的,這裡我們要明白一點,可以在Xaml中寫的都是可以在程式碼中new出來的。其中Grid的佈局是大家平分這個網格,橫向的橫向平分,縱向的縱向平分。

       然後我們需要學會的就是動態的生成控制元件,因為我們假設連連看是7*7的那麼就要49個Image的控制元件,如果手動的話。。。。。

            //動態生成圖片
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    imageName = rand.Next(1, 8);
                    Image image = new Image();
                    image.Source = new BitmapImage(new Uri("MyPicture/" + imageName.ToString() + ".bmp", UriKind.Relative));
                    image.Name = "image" + imageName.ToString();
                    //image.Stretch = Stretch.Fill;;
                    Grid.SetRow(image, i);
                    Grid.SetColumn(image, j);
                    LLK_Background.Children.Add(image);
                    image.MouseDown += image_MouseDown;                   
                }
            }

其中image.Source的意思是從指定的路徑獲取圖片,注意路徑中式用/來進入檔案的。image.Name是為了後面方便來判斷兩幅圖畫是否相同的輔助變數,不過我們在操縱控制元件的時候一般也是通過名字來進行的。並且注意這個image的設定,右側的字串不能有非數字和字母的字元,否則會報錯,而且最好不要讓數字.ToString()放前面,不然也會報錯,還有裡面呆上image這個字串。(具體錯誤原因我目前也沒弄懂。)注意註釋的那一句,因為我們在載入圖片上去的時候會發現,有一些空白在圖片之前,那是因為Image有個自動對齊功能,會自動調整圖片的大小,讓所有圖片對齊。如果我們不需要這個那麼就可以設定Stretch這個屬性。後面的Grid那兩個函式直接顧名思義就知道了。然後就是吧Iimage這圖片加入到Grid中。最後一句話是給每張圖片新增一個滑鼠點選的事件。這裡我們要注意的是:

      在WPF寫的程式碼中加時間就和找屬性一樣,可以直接用打一點(.)來聯想出來,然後按 Tab鍵就可以了自動新增函式了。下面是要隨機新增圖片到網格中。:

Random rand = new Random();
int imageName;

然後在迴圈中配合rand.Next()函式就行,其中Next函式有過載的:

Next(int min,int max);意思是返回的隨機數大於等於min小於max,

Next();                        直接產生隨機數,沒有限制,可以用求餘數來完成上面的功能。

        void image_MouseDown(object sender, MouseButtonEventArgs e)
        {
            //throw new NotImplementedException();
            if (count == 0)
            {
                count++;
                Before = ((Image)sender);
            }
            else
            {
                count = 0;
                string Now = ((Image)sender).Name;
                if (Before.Name == Now && Before != (Image)sender)
                {
                    ((Image)sender).Visibility = System.Windows.Visibility.Collapsed;
                    Before.Visibility = System.Windows.Visibility.Collapsed;
                }
            }
        }

這個就是每張圖片的點選事件,實現很簡單,連連看的邏輯就是點選的兩個圖片一樣,那麼久消除就行了,那麼這裡就是一個簡單的判斷是否相等的邏輯就行了。這裡注意sender這個引數,每個事件函式中都有,因為這個引數代表的是控制元件,但是由於不知道是什麼控制元件被點選了,所以用了一個公共的父類Object,這就是多型。

--------------------------------------------------------我是分割線--------------------------------------------------------------

控制元件雜記:

1.常用的控制元件屬性:

    1>.Visibility:是否可見,注意這裡不可見選取的是collapse,而不是Hidden。

    2>.IsEnable:是否可用

    3>.backGround背景顏色的設定,ForeGround前景顏色,比如字的顏色

    4>.isReadOnly文字用來只讀的屬性

    5>.TextWrapping:(wrap)代表可以滾動

2.c#中不可以為null的值的型別,可以寫成
int?   a = null;
DateTime?   b = null;
也就是加一個問號就可以,其中有好多控制元件的事件函式中可能會用到這個

3.radioButton分組:

GroupName = “”(組的名字)相同的組成員是一個名字


4.ProgressBar:進度條
Maximum:最大值
Minimum: 最小值
value:當前值
IsInDeterminate:不確定模式,進度條一直顯示在讀條狀態

相關文章