2011-07-18 82 views
1

使用Windows窗體創建國際象棋棋盤的最佳方式是什麼?使用Windows窗體創建國際象棋棋盤

我對winforms中的圖形編碼還是一個新的東西,我不確定哪個控件可以用於那個?

用戶應該能夠將棋子放入棋盤。 我想寫象棋圖編輯器。

謝謝

回答

4

有很多方法。這裏有一個讓你開始使用一些WinForms概念的方法:

(它使用一個2D控制面板控件來創建一個棋盤,爲了擴展它,你可以改變每個面板的背景圖片來顯示棋子。由你來定義。)

// class member array of Panels to track chessboard tiles 
    private Panel[,] _chessBoardPanels; 

    // event handler of Form Load... init things here 
    private void Form_Load(object sender, EventArgs e) 
    { 
     const int tileSize = 40; 
     const int gridSize = 12; 
     var clr1 = Color.DarkGray; 
     var clr2 = Color.White; 

     // initialize the "chess board" 
     _chessBoardPanels = new Panel[gridSize, gridSize]; 

     // double for loop to handle all rows and columns 
     for (var n = 0; n < gridSize; n++) 
     { 
      for (var m = 0; m < gridSize; m++) 
      { 
       // create new Panel control which will be one 
       // chess board tile 
       var newPanel = new Panel 
       { 
        Size = new Size(tileSize, tileSize), 
        Location = new Point(tileSize * n, tileSize * m) 
       }; 

       // add to Form's Controls so that they show up 
       Controls.Add(newPanel); 

       // add to our 2d array of panels for future use 
       _chessBoardPanels[n, m] = newPanel; 

       // color the backgrounds 
       if (n % 2 == 0) 
        newPanel.BackColor = m % 2 != 0 ? clr1 : clr2; 
       else 
        newPanel.BackColor = m % 2 != 0 ? clr2 : clr1; 
      } 
     } 
    } 
+0

這正是我所需要的。謝謝。我將使用上面的代碼來顯示國際象棋棋盤,然後我正在考慮使用面板屬性BackgroundImage和BackgroundImageLayout在面板上顯示國際象棋棋子。 – user850010

0

我不知道你想用這個國際象棋棋盤做什麼,但如果它只是一個背景後顯示,你最好的辦法是設置一個背景圖像。

1

在控件OnPaint事件處理程序中,您首先通過使用公式(floor(x * 8) mod 2) = (floor(y * 8) mod 2)隱式繪製棋盤圖案,或者僅使用Graphics.FillRectangle繪製正方形來繪製棋盤圖案。第二步是用Graphics.DrawImage繪製最上面的部分。

+0

在評論中更新。 –