文章出處

第一步:

  問題,怎樣動態的建立一個10*10的grid(布局)

for (int i = 0; i < 10; i++)
{
  RowDefinition rowDef = new RowDefinition();
  GridGame.RowDefinitions.Add(rowDef);


  ColumnDefinition colDef = new ColumnDefinition();
  GridGame.ColumnDefinitions.Add(colDef);
}

 

第二步:

  問題,怎樣將button放到上邊那個布局中(這個是我查資料才知道的,一般都是用Grid在前臺布局)

for (int i = 0; i < 10; i++)
{
  for (int j = 0; j < 10; j++)
  {
  Button btn = new Button();

  btn.Content = i + "," + j;
  Grid.SetColumn(btn, j);
  Grid.SetRow(btn, i);

  GridGame.Children.Add(btn);
}
}

效果如圖1

第三步:

  問題3,怎樣將Button的內容換成隨機圖片呢?

    

Random random = new Random();


for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
int imgName = random.Next(1, 10);//生成一個>=1,<10的隨機數

Image img = new Image();
img.Source = new BitmapImage(new Uri("images/" + imgName + ".png", UriKind.Relative));


Button btn = new Button();
btn.Content = img;

Grid.SetColumn(btn, j);
Grid.SetRow(btn, i);

GridGame.Children.Add(btn);
}
}

效果如圖


  這里需要注意一點,不要把Random random = new Random();這句放到循環里面,不然會變成這樣

第四步:

  上面我們已經完成了LLK的布局,下面咱們實現Button的點擊事件,并實現點擊

兩個相同背景的button進行消除。問題又來,我們怎么判斷兩個button是相同背景呢。

我們來重寫Button,給它增加幾個屬性:

  

 public class MyButton : Button
    {
        //button標示,用于判斷兩個按鈕是否為同一個
        public int Flag { get; set; }

        //Button所在行
        public int RowNum { get; set; }

        //所在列
        public int ColNum { get; set; }

        public MyButton(int flag,int rowNum,int colNum)
        {
            this.Flag = flag;
            this.RowNum = romNum;
            this.ColNum = colNum;
        }
    }

 

好了,有了判斷依據,我們就可以寫點擊事件了

 MyButton btn1;
        MyButton btn2;
        int ClickCount = 0;
        void btn_Click(object sender, RoutedEventArgs e)
        {
            ++ClickCount;
            if (ClickCount == 1)
            {
                btn1 = sender as MyButton;
            }
            else if(ClickCount==2)
            {
                btn2 = sender as MyButton;

                if (btn1 != null && btn2 != null)
                {
                    if (btn1.Flag == btn2.Flag&&!(btn1.ColNum==btn2.ColNum&&btn1.RowNum==btn2.RowNum))
                    {
                        btn1.Visibility = Visibility.Hidden;
                        btn2.Visibility = Visibility.Hidden;
                    }

                }
                btn1 =null;
                btn2 = null;
                ClickCount = 0;
            }
        }

好了,我們現在完成了最基本點擊消除功能

運行效果如下:

 

完整代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace llk
{
    /// <summary>
    /// MainWindow.xaml 的交互邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Add();
        }
        public void Add()
        {
            Random random = new Random();

            for (int i = 0; i < 10; i++)
            {
                RowDefinition rowDef = new RowDefinition();
                GridGame.RowDefinitions.Add(rowDef);

                ColumnDefinition colDef = new ColumnDefinition();
                GridGame.ColumnDefinitions.Add(colDef);
            }

            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    int imgName = random.Next(1, 10);//生成一個>=1,<21的隨機數

                    Image img = new Image();
                    img.Source = new BitmapImage(new Uri("images/" + imgName + ".png", UriKind.Relative));


                    MyButton btn = new MyButton(imgName,i,j);
                    btn.Content = img;
                    btn.Click += btn_Click;
                    Grid.SetColumn(btn, j);
                    Grid.SetRow(btn, i);

                    GridGame.Children.Add(btn);
                }
            }
        }

        MyButton btn1;
        MyButton btn2;
        int ClickCount = 0;
        void btn_Click(object sender, RoutedEventArgs e)
        {
            ++ClickCount;
            if (ClickCount == 1)
            {
                btn1 = sender as MyButton;
            }
            else if(ClickCount==2)
            {
                btn2 = sender as MyButton;

                if (btn1 != null && btn2 != null)
                {
                    if (btn1.Flag == btn2.Flag&&!(btn1.ColNum==btn2.ColNum&&btn1.RowNum==btn2.RowNum))
                    {
                        btn1.Visibility = Visibility.Hidden;
                        btn2.Visibility = Visibility.Hidden;
                    }

                }
                btn1 =null;
                btn2 = null;
                ClickCount = 0;
            }
        }

      
    }
    public class MyButton : Button
    {
        //button標示,用于判斷兩個按鈕是否為同一個
        public int Flag { get; set; }

        //Button所在行
        public int RowNum { get; set; }

        //所在列
        public int ColNum { get; set; }

        public MyButton(int flag,int romNum,int colNum)
        {
            this.Flag = flag;
            this.RomNum = romNum;
            this.ColNum = colNum;
        }
    }
}

 是不是很簡單啊,下一步我們加入規則算法……

  ----- 未完待續……------

 另外誰能告訴我怎么上傳源代碼嗎,直接發出來太占篇幅了……

 

哈,知道怎么上傳了,現把圖片發一下,資源圖片,便于你們試驗用……


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()